Namenskorrektur II
|
@ -16,7 +16,7 @@
|
||||||
inkscape:version="0.44.1"
|
inkscape:version="0.44.1"
|
||||||
version="1.0"
|
version="1.0"
|
||||||
sodipodi:docname="Web-Interface_A.svg"
|
sodipodi:docname="Web-Interface_A.svg"
|
||||||
sodipodi:docbase="/mnt/phobos/age/svn/codekasten/fotokiste/Entwurf">
|
sodipodi:docbase="/mnt/phobos/age/svn/codekasten/fotokiosk/Entwurf">
|
||||||
<defs
|
<defs
|
||||||
id="defs4">
|
id="defs4">
|
||||||
<inkscape:perspective
|
<inkscape:perspective
|
||||||
|
@ -91,7 +91,7 @@
|
||||||
sodipodi:role="line"
|
sodipodi:role="line"
|
||||||
id="tspan2406"
|
id="tspan2406"
|
||||||
x="139.44901"
|
x="139.44901"
|
||||||
y="153.06456">Logo für Glasmensch/Fotokiste</tspan></text>
|
y="153.06456">Logo für Glasmensch/Fotokiosk</tspan></text>
|
||||||
<path
|
<path
|
||||||
style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
d="M 370.95884,121.74075 L 370.95884,121.74075"
|
d="M 370.95884,121.74075 L 370.95884,121.74075"
|
||||||
|
@ -151,7 +151,7 @@
|
||||||
id="tspan3227"
|
id="tspan3227"
|
||||||
sodipodi:role="line"
|
sodipodi:role="line"
|
||||||
x="250.97425"
|
x="250.97425"
|
||||||
y="207.33772">fotokiste@glasmensch.org</tspan><tspan
|
y="207.33772">fotokiosk@glasmensch.org</tspan><tspan
|
||||||
id="tspan3229"
|
id="tspan3229"
|
||||||
sodipodi:role="line"
|
sodipodi:role="line"
|
||||||
x="250.97425"
|
x="250.97425"
|
||||||
|
@ -193,7 +193,7 @@
|
||||||
<g
|
<g
|
||||||
id="g3371"
|
id="g3371"
|
||||||
transform="translate(-1546.9999,7)"
|
transform="translate(-1546.9999,7)"
|
||||||
inkscape:export-filename="/home/lars/subversion/codekasten/fotokiste/Entwurf/Seite2.png"
|
inkscape:export-filename="/home/lars/subversion/codekasten/fotokiosk/Entwurf/Seite2.png"
|
||||||
inkscape:export-xdpi="90"
|
inkscape:export-xdpi="90"
|
||||||
inkscape:export-ydpi="90">
|
inkscape:export-ydpi="90">
|
||||||
<g
|
<g
|
||||||
|
@ -218,7 +218,7 @@
|
||||||
sodipodi:role="line"
|
sodipodi:role="line"
|
||||||
id="tspan3275"
|
id="tspan3275"
|
||||||
x="139.44901"
|
x="139.44901"
|
||||||
y="153.06456">Logo für Glasmensch/Fotokiste</tspan></text>
|
y="153.06456">Logo für Glasmensch/Fotokiosk</tspan></text>
|
||||||
<path
|
<path
|
||||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
d="M 370.95884,121.74075 L 370.95884,121.74075"
|
d="M 370.95884,121.74075 L 370.95884,121.74075"
|
||||||
|
@ -278,7 +278,7 @@
|
||||||
id="tspan3297"
|
id="tspan3297"
|
||||||
sodipodi:role="line"
|
sodipodi:role="line"
|
||||||
x="250.97425"
|
x="250.97425"
|
||||||
y="207.33772">fotokiste@glasmensch.org</tspan><tspan
|
y="207.33772">fotokiosk@glasmensch.org</tspan><tspan
|
||||||
id="tspan3299"
|
id="tspan3299"
|
||||||
sodipodi:role="line"
|
sodipodi:role="line"
|
||||||
x="250.97425"
|
x="250.97425"
|
||||||
|
@ -401,7 +401,7 @@
|
||||||
<g
|
<g
|
||||||
transform="translate(-5.250016,11.000021)"
|
transform="translate(-5.250016,11.000021)"
|
||||||
id="g3593"
|
id="g3593"
|
||||||
inkscape:export-filename="/home/lars/subversion/codekasten/fotokiste/Entwurf/Seite4.png"
|
inkscape:export-filename="/home/lars/subversion/codekasten/fotokiosk/Entwurf/Seite4.png"
|
||||||
inkscape:export-xdpi="90"
|
inkscape:export-xdpi="90"
|
||||||
inkscape:export-ydpi="90">
|
inkscape:export-ydpi="90">
|
||||||
<rect
|
<rect
|
||||||
|
@ -423,7 +423,7 @@
|
||||||
y="153.06456"
|
y="153.06456"
|
||||||
x="139.44901"
|
x="139.44901"
|
||||||
id="tspan3599"
|
id="tspan3599"
|
||||||
sodipodi:role="line">Logo für Glasmensch/Fotokiste</tspan></text>
|
sodipodi:role="line">Logo für Glasmensch/Fotokiosk</tspan></text>
|
||||||
<path
|
<path
|
||||||
inkscape:connection-end="#rect2402"
|
inkscape:connection-end="#rect2402"
|
||||||
inkscape:connection-start="#rect2402"
|
inkscape:connection-start="#rect2402"
|
||||||
|
@ -435,7 +435,7 @@
|
||||||
<g
|
<g
|
||||||
transform="translate(87.319509,447)"
|
transform="translate(87.319509,447)"
|
||||||
id="g3615"
|
id="g3615"
|
||||||
inkscape:export-filename="/home/lars/subversion/codekasten/fotokiste/Entwurf/Seite4.png"
|
inkscape:export-filename="/home/lars/subversion/codekasten/fotokiosk/Entwurf/Seite4.png"
|
||||||
inkscape:export-xdpi="90"
|
inkscape:export-xdpi="90"
|
||||||
inkscape:export-ydpi="90">
|
inkscape:export-ydpi="90">
|
||||||
<rect
|
<rect
|
||||||
|
@ -461,7 +461,7 @@
|
||||||
id="tspan3623"
|
id="tspan3623"
|
||||||
sodipodi:role="line"
|
sodipodi:role="line"
|
||||||
x="250.97425"
|
x="250.97425"
|
||||||
y="207.33772">fotokiste@glasmensch.org</tspan><tspan
|
y="207.33772">fotokiosk@glasmensch.org</tspan><tspan
|
||||||
id="tspan3625"
|
id="tspan3625"
|
||||||
sodipodi:role="line"
|
sodipodi:role="line"
|
||||||
x="250.97425"
|
x="250.97425"
|
||||||
|
@ -474,13 +474,13 @@
|
||||||
id="path3627"
|
id="path3627"
|
||||||
d="M -1987.7229,140.74075 L -1987.7229,140.74075"
|
d="M -1987.7229,140.74075 L -1987.7229,140.74075"
|
||||||
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
||||||
inkscape:export-filename="/home/lars/subversion/codekasten/fotokiste/Entwurf/Seite1.png"
|
inkscape:export-filename="/home/lars/subversion/codekasten/fotokiosk/Entwurf/Seite1.png"
|
||||||
inkscape:export-xdpi="90"
|
inkscape:export-xdpi="90"
|
||||||
inkscape:export-ydpi="90" />
|
inkscape:export-ydpi="90" />
|
||||||
<g
|
<g
|
||||||
transform="translate(34.000061,-2.073679)"
|
transform="translate(34.000061,-2.073679)"
|
||||||
id="g3766"
|
id="g3766"
|
||||||
inkscape:export-filename="/home/lars/subversion/codekasten/fotokiste/Entwurf/Seite4.png"
|
inkscape:export-filename="/home/lars/subversion/codekasten/fotokiosk/Entwurf/Seite4.png"
|
||||||
inkscape:export-xdpi="90"
|
inkscape:export-xdpi="90"
|
||||||
inkscape:export-ydpi="90">
|
inkscape:export-ydpi="90">
|
||||||
<rect
|
<rect
|
||||||
|
@ -507,7 +507,7 @@
|
||||||
<g
|
<g
|
||||||
transform="translate(34.000061,-12.327179)"
|
transform="translate(34.000061,-12.327179)"
|
||||||
id="g3825"
|
id="g3825"
|
||||||
inkscape:export-filename="/home/lars/subversion/codekasten/fotokiste/Entwurf/Seite4.png"
|
inkscape:export-filename="/home/lars/subversion/codekasten/fotokiosk/Entwurf/Seite4.png"
|
||||||
inkscape:export-xdpi="90"
|
inkscape:export-xdpi="90"
|
||||||
inkscape:export-ydpi="90">
|
inkscape:export-ydpi="90">
|
||||||
<g
|
<g
|
||||||
|
@ -605,7 +605,7 @@
|
||||||
inkscape:connector-type="polyline"
|
inkscape:connector-type="polyline"
|
||||||
inkscape:connection-start="#rect2402"
|
inkscape:connection-start="#rect2402"
|
||||||
inkscape:connection-end="#rect2402"
|
inkscape:connection-end="#rect2402"
|
||||||
inkscape:export-filename="/home/lars/subversion/codekasten/fotokiste/Entwurf/Seite1.png"
|
inkscape:export-filename="/home/lars/subversion/codekasten/fotokiosk/Entwurf/Seite1.png"
|
||||||
inkscape:export-xdpi="90"
|
inkscape:export-xdpi="90"
|
||||||
inkscape:export-ydpi="90" />
|
inkscape:export-ydpi="90" />
|
||||||
<text
|
<text
|
||||||
|
@ -615,7 +615,7 @@
|
||||||
y="22.189388"
|
y="22.189388"
|
||||||
id="text3925"
|
id="text3925"
|
||||||
transform="scale(0.7616089,1.3130099)"
|
transform="scale(0.7616089,1.3130099)"
|
||||||
inkscape:export-filename="/home/lars/subversion/codekasten/fotokiste/Entwurf/Seite1.png"
|
inkscape:export-filename="/home/lars/subversion/codekasten/fotokiosk/Entwurf/Seite1.png"
|
||||||
inkscape:export-xdpi="90"
|
inkscape:export-xdpi="90"
|
||||||
inkscape:export-ydpi="90"><tspan
|
inkscape:export-ydpi="90"><tspan
|
||||||
sodipodi:role="line"
|
sodipodi:role="line"
|
||||||
|
@ -629,7 +629,7 @@
|
||||||
y="-7.1308522"
|
y="-7.1308522"
|
||||||
id="text3969"
|
id="text3969"
|
||||||
transform="scale(0.8404344,1.1898608)"
|
transform="scale(0.8404344,1.1898608)"
|
||||||
inkscape:export-filename="/home/lars/subversion/codekasten/fotokiste/Entwurf/Seite2.png"
|
inkscape:export-filename="/home/lars/subversion/codekasten/fotokiosk/Entwurf/Seite2.png"
|
||||||
inkscape:export-xdpi="90"
|
inkscape:export-xdpi="90"
|
||||||
inkscape:export-ydpi="90"><tspan
|
inkscape:export-ydpi="90"><tspan
|
||||||
sodipodi:role="line"
|
sodipodi:role="line"
|
||||||
|
@ -646,7 +646,7 @@
|
||||||
x="-414.0744"
|
x="-414.0744"
|
||||||
y="3.3554201"
|
y="3.3554201"
|
||||||
id="text4149"
|
id="text4149"
|
||||||
inkscape:export-filename="/home/lars/subversion/codekasten/fotokiste/Entwurf/Seite3.png"
|
inkscape:export-filename="/home/lars/subversion/codekasten/fotokiosk/Entwurf/Seite3.png"
|
||||||
inkscape:export-xdpi="90"
|
inkscape:export-xdpi="90"
|
||||||
inkscape:export-ydpi="90"><tspan
|
inkscape:export-ydpi="90"><tspan
|
||||||
sodipodi:role="line"
|
sodipodi:role="line"
|
||||||
|
@ -659,7 +659,7 @@
|
||||||
id="tspan4153">Empfänger eingeben</tspan></text>
|
id="tspan4153">Empfänger eingeben</tspan></text>
|
||||||
<g
|
<g
|
||||||
id="g4226"
|
id="g4226"
|
||||||
inkscape:export-filename="/home/lars/subversion/codekasten/fotokiste/Entwurf/Seite3.png"
|
inkscape:export-filename="/home/lars/subversion/codekasten/fotokiosk/Entwurf/Seite3.png"
|
||||||
inkscape:export-xdpi="90"
|
inkscape:export-xdpi="90"
|
||||||
inkscape:export-ydpi="90">
|
inkscape:export-ydpi="90">
|
||||||
<g
|
<g
|
||||||
|
@ -684,7 +684,7 @@
|
||||||
y="153.06456"
|
y="153.06456"
|
||||||
x="139.44901"
|
x="139.44901"
|
||||||
id="tspan3410"
|
id="tspan3410"
|
||||||
sodipodi:role="line">Logo für Glasmensch/Fotokiste</tspan></text>
|
sodipodi:role="line">Logo für Glasmensch/Fotokiosk</tspan></text>
|
||||||
<path
|
<path
|
||||||
inkscape:connection-end="#rect2402"
|
inkscape:connection-end="#rect2402"
|
||||||
inkscape:connection-start="#rect2402"
|
inkscape:connection-start="#rect2402"
|
||||||
|
@ -745,7 +745,7 @@
|
||||||
id="tspan3432"
|
id="tspan3432"
|
||||||
sodipodi:role="line"
|
sodipodi:role="line"
|
||||||
x="250.97425"
|
x="250.97425"
|
||||||
y="207.33772">fotokiste@glasmensch.org</tspan><tspan
|
y="207.33772">fotokiosk@glasmensch.org</tspan><tspan
|
||||||
id="tspan3434"
|
id="tspan3434"
|
||||||
sodipodi:role="line"
|
sodipodi:role="line"
|
||||||
x="250.97425"
|
x="250.97425"
|
||||||
|
@ -978,7 +978,7 @@
|
||||||
x="369.77896"
|
x="369.77896"
|
||||||
y="-21.66836"
|
y="-21.66836"
|
||||||
id="text4360"
|
id="text4360"
|
||||||
inkscape:export-filename="/home/lars/subversion/codekasten/fotokiste/Entwurf/Seite4.png"
|
inkscape:export-filename="/home/lars/subversion/codekasten/fotokiosk/Entwurf/Seite4.png"
|
||||||
inkscape:export-xdpi="90"
|
inkscape:export-xdpi="90"
|
||||||
inkscape:export-ydpi="90"><tspan
|
inkscape:export-ydpi="90"><tspan
|
||||||
sodipodi:role="line"
|
sodipodi:role="line"
|
||||||
|
@ -992,7 +992,7 @@
|
||||||
<g
|
<g
|
||||||
transform="matrix(1.145262,0,0,1,-2316.482,288.0289)"
|
transform="matrix(1.145262,0,0,1,-2316.482,288.0289)"
|
||||||
id="g2014"
|
id="g2014"
|
||||||
inkscape:export-filename="/home/lars/subversion/codekasten/fotokiste/Entwurf/Seite4.png"
|
inkscape:export-filename="/home/lars/subversion/codekasten/fotokiosk/Entwurf/Seite4.png"
|
||||||
inkscape:export-xdpi="90"
|
inkscape:export-xdpi="90"
|
||||||
inkscape:export-ydpi="90">
|
inkscape:export-ydpi="90">
|
||||||
<rect
|
<rect
|
||||||
|
|
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 46 KiB |
|
@ -1,4 +1,4 @@
|
||||||
fotokiste
|
fotokiosk
|
||||||
|
|
||||||
This is a TurboGears (http://www.turbogears.org) project. It can be
|
This is a TurboGears (http://www.turbogears.org) project. It can be
|
||||||
started by running the start-fotokiste.py script.
|
started by running the start-fotokiosk.py script.
|
|
@ -2,7 +2,7 @@
|
||||||
# This is where all of your settings go for your development environment
|
# This is where all of your settings go for your development environment
|
||||||
# Settings that are the same for both development and production
|
# Settings that are the same for both development and production
|
||||||
# (such as template engine, encodings, etc.) all go in
|
# (such as template engine, encodings, etc.) all go in
|
||||||
# fotokiste/config/app.cfg
|
# fotokiosk/config/app.cfg
|
||||||
|
|
||||||
# DATABASE
|
# DATABASE
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@ server.socket_port=80
|
||||||
# log_debug_info_filter.on = False
|
# log_debug_info_filter.on = False
|
||||||
|
|
||||||
server.environment="development"
|
server.environment="development"
|
||||||
autoreload.package="fotokiste"
|
autoreload.package="fotokiosk"
|
||||||
|
|
||||||
# Auto-Reload after code modification
|
# Auto-Reload after code modification
|
||||||
# autoreload.on = True
|
# autoreload.on = True
|
||||||
|
@ -46,13 +46,13 @@ tg.strict_parameters = True
|
||||||
# Logging configuration generally follows the style of the standard
|
# Logging configuration generally follows the style of the standard
|
||||||
# Python logging module configuration. Note that when specifying
|
# Python logging module configuration. Note that when specifying
|
||||||
# log format messages, you need to use *() for formatting variables.
|
# log format messages, you need to use *() for formatting variables.
|
||||||
# Deployment independent log configuration is in fotokiste/config/log.cfg
|
# Deployment independent log configuration is in fotokiosk/config/log.cfg
|
||||||
[logging]
|
[logging]
|
||||||
|
|
||||||
[[loggers]]
|
[[loggers]]
|
||||||
[[[fotokiste]]]
|
[[[fotokiosk]]]
|
||||||
level='DEBUG'
|
level='DEBUG'
|
||||||
qualname='fotokiste'
|
qualname='fotokiosk'
|
||||||
handlers=['debug_out']
|
handlers=['debug_out']
|
||||||
|
|
||||||
[[[allinfo]]]
|
[[[allinfo]]]
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
Metadata-Version: 1.0
|
Metadata-Version: 1.0
|
||||||
Name: fotokiste
|
Name: fotokiosk
|
||||||
Version: 1.0
|
Version: 1.0
|
||||||
Summary: UNKNOWN
|
Summary: UNKNOWN
|
||||||
Home-page: UNKNOWN
|
Home-page: UNKNOWN
|
22
fotokiosk/fotokiosk.egg-info/SOURCES.txt
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
README.txt
|
||||||
|
setup.py
|
||||||
|
fotokiosk/__init__.py
|
||||||
|
fotokiosk/commands.py
|
||||||
|
fotokiosk/controllers.py
|
||||||
|
fotokiosk/json.py
|
||||||
|
fotokiosk/model.py
|
||||||
|
fotokiosk/release.py
|
||||||
|
fotokiosk.egg-info/PKG-INFO
|
||||||
|
fotokiosk.egg-info/SOURCES.txt
|
||||||
|
fotokiosk.egg-info/dependency_links.txt
|
||||||
|
fotokiosk.egg-info/entry_points.txt
|
||||||
|
fotokiosk.egg-info/not-zip-safe
|
||||||
|
fotokiosk.egg-info/paster_plugins.txt
|
||||||
|
fotokiosk.egg-info/requires.txt
|
||||||
|
fotokiosk.egg-info/sqlobject.txt
|
||||||
|
fotokiosk.egg-info/top_level.txt
|
||||||
|
fotokiosk/config/__init__.py
|
||||||
|
fotokiosk/templates/__init__.py
|
||||||
|
fotokiosk/tests/__init__.py
|
||||||
|
fotokiosk/tests/test_controllers.py
|
||||||
|
fotokiosk/tests/test_model.py
|
3
fotokiosk/fotokiosk.egg-info/entry_points.txt
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
[console_scripts]
|
||||||
|
start-fotokiosk = fotokiosk.commands:start
|
||||||
|
|
2
fotokiosk/fotokiosk.egg-info/sqlobject.txt
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
db_module=fotokiosk.model
|
||||||
|
history_dir=$base/fotokiosk/sqlobject-history
|
1
fotokiosk/fotokiosk.egg-info/top_level.txt
Normal file
|
@ -0,0 +1 @@
|
||||||
|
fotokiosk
|
|
@ -40,14 +40,14 @@ def start():
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
configfile = pkg_resources.resource_filename(
|
configfile = pkg_resources.resource_filename(
|
||||||
pkg_resources.Requirement.parse("fotokiste"),
|
pkg_resources.Requirement.parse("fotokiosk"),
|
||||||
"config/default.cfg")
|
"config/default.cfg")
|
||||||
except pkg_resources.DistributionNotFound:
|
except pkg_resources.DistributionNotFound:
|
||||||
raise ConfigurationError("Could not find default configuration.")
|
raise ConfigurationError("Could not find default configuration.")
|
||||||
|
|
||||||
turbogears.update_config(configfile=configfile,
|
turbogears.update_config(configfile=configfile,
|
||||||
modulename="fotokiste.config")
|
modulename="fotokiosk.config")
|
||||||
|
|
||||||
from fotokiste.controllers import Root
|
from fotokiosk.controllers import Root
|
||||||
|
|
||||||
turbogears.start_server(Root())
|
turbogears.start_server(Root())
|
|
@ -2,9 +2,9 @@
|
||||||
|
|
||||||
import turbogears as tg
|
import turbogears as tg
|
||||||
from turbogears import controllers, expose, flash, redirect
|
from turbogears import controllers, expose, flash, redirect
|
||||||
# from fotokiste import model
|
# from fotokiosk import model
|
||||||
# import logging
|
# import logging
|
||||||
# log = logging.getLogger("fotokiste.controllers")
|
# log = logging.getLogger("fotokiosk.controllers")
|
||||||
|
|
||||||
|
|
||||||
class SamplePicture(object):
|
class SamplePicture(object):
|
||||||
|
@ -19,18 +19,18 @@ import re
|
||||||
import datetime
|
import datetime
|
||||||
import random
|
import random
|
||||||
|
|
||||||
IMAGE_GALLERY_PATH = os.path.join(os.getcwd(), 'fotokiste', 'static', 'gallery')
|
IMAGE_GALLERY_PATH = os.path.join(os.getcwd(), 'fotokiosk', 'static', 'gallery')
|
||||||
IMAGE_SUFFIX = ".jpg"
|
IMAGE_SUFFIX = ".jpg"
|
||||||
IMAGE_STORE = os.path.join(tempfile.gettempdir(), "fotokiste" + IMAGE_SUFFIX)
|
IMAGE_STORE = os.path.join(tempfile.gettempdir(), "fotokiosk" + IMAGE_SUFFIX)
|
||||||
GALLERY_NUM = 12
|
GALLERY_NUM = 12
|
||||||
VIDEO_URL = "http://fotokiste:8081/?action=stream"
|
VIDEO_URL = "http://fotokiosk:8081/?action=stream"
|
||||||
SNAPSHOT_URL = "http://fotokiste:8081/?action=snapshot"
|
SNAPSHOT_URL = "http://fotokiosk:8081/?action=snapshot"
|
||||||
ALLOWED_MAILADDRESS_CHARACTERS = "\w._%@-"
|
ALLOWED_MAILADDRESS_CHARACTERS = "\w._%@-"
|
||||||
ALLOWED_MAILTEXT_CHARACTERS = "\w@_\-\.\s\n\#\(\)\[\]\{\}\|\>\<\,\+/\'\"\?\!\:=%\$^&\*"
|
ALLOWED_MAILTEXT_CHARACTERS = "\w@_\-\.\s\n\#\(\)\[\]\{\}\|\>\<\,\+/\'\"\?\!\:=%\$^&\*"
|
||||||
MAIL_ADDRESS_REGEX = r"^[a-zA-Z0-9._%-]+@[a-zA-Z0-9._%-]+\.[a-zA-Z]{2,6}$"
|
MAIL_ADDRESS_REGEX = r"^[a-zA-Z0-9._%-]+@[a-zA-Z0-9._%-]+\.[a-zA-Z]{2,6}$"
|
||||||
# TODO: this path is relative - to be fixed!
|
# TODO: this path is relative - to be fixed!
|
||||||
MAIL_SIGNATURE_FILE = os.path.join(os.getcwd(), "mail_signature.txt")
|
MAIL_SIGNATURE_FILE = os.path.join(os.getcwd(), "mail_signature.txt")
|
||||||
MAIL_FROM_ADDRESS = '"Frieda-Fotokiste" <fotokiste@glasmensch.org>'
|
MAIL_FROM_ADDRESS = '"Frieda-Fotokiosk" <fotokiosk@glasmensch.org>'
|
||||||
MAIL_SUBJECT = "Ein überwachungskritisches Foto aus der Frieda!"
|
MAIL_SUBJECT = "Ein überwachungskritisches Foto aus der Frieda!"
|
||||||
MAIL_ATTACHMENT_FILENAME = "frieda" + IMAGE_SUFFIX
|
MAIL_ATTACHMENT_FILENAME = "frieda" + IMAGE_SUFFIX
|
||||||
SMTP_HOST = "localhost"
|
SMTP_HOST = "localhost"
|
||||||
|
@ -152,7 +152,7 @@ def send_mail(address, text):
|
||||||
|
|
||||||
class Root(controllers.RootController):
|
class Root(controllers.RootController):
|
||||||
|
|
||||||
@expose(template="fotokiste.templates.start")
|
@expose(template="fotokiosk.templates.start")
|
||||||
def index(self, **kargs):
|
def index(self, **kargs):
|
||||||
|
|
||||||
# TODO: this should generate a selection of random pictures
|
# TODO: this should generate a selection of random pictures
|
||||||
|
@ -171,13 +171,13 @@ class Root(controllers.RootController):
|
||||||
return merged_dicts({ "gallery": gallery }, DEFAULT_DICT)
|
return merged_dicts({ "gallery": gallery }, DEFAULT_DICT)
|
||||||
|
|
||||||
|
|
||||||
@expose(template="fotokiste.templates.ausloeser")
|
@expose(template="fotokiosk.templates.ausloeser")
|
||||||
def ausloeser(self, **kargs):
|
def ausloeser(self, **kargs):
|
||||||
flash("Das Bild wird in 5 Sekunden aufgenommen!")
|
flash("Das Bild wird in 5 Sekunden aufgenommen!")
|
||||||
return merged_dicts({}, DEFAULT_DICT)
|
return merged_dicts({}, DEFAULT_DICT)
|
||||||
|
|
||||||
|
|
||||||
@expose(template="fotokiste.templates.mailtext")
|
@expose(template="fotokiosk.templates.mailtext")
|
||||||
def mailtext(self, mailaddress="", mailtext="", already_captured="no", already_stored="no", **kargs):
|
def mailtext(self, mailaddress="", mailtext="", already_captured="no", already_stored="no", **kargs):
|
||||||
# store the picture if necessary
|
# store the picture if necessary
|
||||||
if already_captured != "yes":
|
if already_captured != "yes":
|
||||||
|
@ -204,7 +204,7 @@ class Root(controllers.RootController):
|
||||||
}, DEFAULT_DICT)
|
}, DEFAULT_DICT)
|
||||||
|
|
||||||
|
|
||||||
@expose(template="fotokiste.templates.senden")
|
@expose(template="fotokiosk.templates.senden")
|
||||||
def senden(self, mailaddress="", mailtext="", already_stored="no", senden=None):
|
def senden(self, mailaddress="", mailtext="", already_stored="no", senden=None):
|
||||||
# filter input
|
# filter input
|
||||||
mailaddress = filter_mailaddress(mailaddress)
|
mailaddress = filter_mailaddress(mailaddress)
|
|
@ -8,7 +8,7 @@ from sqlobject import SQLObject, SQLObjectNotFound, RelatedJoin
|
||||||
# (see http://www.sqlobject.org/SQLObject.html#column-types for more)
|
# (see http://www.sqlobject.org/SQLObject.html#column-types for more)
|
||||||
from sqlobject import StringCol, UnicodeCol, IntCol, DateTimeCol
|
from sqlobject import StringCol, UnicodeCol, IntCol, DateTimeCol
|
||||||
|
|
||||||
__connection__ = hub = PackageHub('fotokiste')
|
__connection__ = hub = PackageHub('fotokiosk')
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Release information about fotokiste
|
# Release information about fotokiosk
|
||||||
|
|
||||||
version = "1.0"
|
version = "1.0"
|
||||||
|
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 4.6 KiB After Width: | Height: | Size: 4.6 KiB |
Before Width: | Height: | Size: 77 KiB After Width: | Height: | Size: 77 KiB |
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 37 KiB |
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 63 KiB After Width: | Height: | Size: 63 KiB |
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.6 KiB |
|
@ -15,7 +15,7 @@ function createImageLayer() {
|
||||||
img.style.height = "320px";
|
img.style.height = "320px";
|
||||||
img.onload = imageOnload;
|
img.onload = imageOnload;
|
||||||
img.onclick = imageOnclick;
|
img.onclick = imageOnclick;
|
||||||
img.src = "http://fotokiste:8081/?action=snapshot&n=" + (++imageNr);
|
img.src = "http://fotokiosk:8081/?action=snapshot&n=" + (++imageNr);
|
||||||
var webcam = document.getElementById("live_pic");
|
var webcam = document.getElementById("live_pic");
|
||||||
webcam.insertBefore(img, webcam.firstChild);
|
webcam.insertBefore(img, webcam.firstChild);
|
||||||
}
|
}
|
Before Width: | Height: | Size: 4.2 KiB After Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 6.4 KiB After Width: | Height: | Size: 6.4 KiB |
Before Width: | Height: | Size: 6 KiB After Width: | Height: | Size: 6 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
|
@ -9,7 +9,7 @@
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
|
|
||||||
<div id="live_pic"><img src="../static/images/fotokiste-default.png"
|
<div id="live_pic"><img src="../static/images/fotokiosk-default.png"
|
||||||
py:attrs="src=video_url"/></div>
|
py:attrs="src=video_url"/></div>
|
||||||
|
|
||||||
</body>
|
</body>
|
|
@ -17,7 +17,7 @@
|
||||||
<input class="button" type="submit" name="senden" value="Zurück" />
|
<input class="button" type="submit" name="senden" value="Zurück" />
|
||||||
</form>
|
</form>
|
||||||
</td><td>
|
</td><td>
|
||||||
<div id="mail_pic"><img src="../static/images/fotokiste-default.png"
|
<div id="mail_pic"><img src="../static/images/fotokiosk-default.png"
|
||||||
py:attrs="src=tg.url('/get_current_shot')"/></div>
|
py:attrs="src=tg.url('/get_current_shot')"/></div>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
<head py:match="item.tag=='{http://www.w3.org/1999/xhtml}head'" py:attrs="item.items()">
|
<head py:match="item.tag=='{http://www.w3.org/1999/xhtml}head'" py:attrs="item.items()">
|
||||||
<meta content="text/html; charset=UTF-8" http-equiv="content-type" py:replace="''"/>
|
<meta content="text/html; charset=UTF-8" http-equiv="content-type" py:replace="''"/>
|
||||||
<title py:replace="''">panoptische Fotokiste</title>
|
<title py:replace="''">panoptische Fotokiosk</title>
|
||||||
<meta py:replace="item[:]" name="description" content="master template"/>
|
<meta py:replace="item[:]" name="description" content="master template"/>
|
||||||
<style type="text/css" media="screen">
|
<style type="text/css" media="screen">
|
||||||
#pageLogin
|
#pageLogin
|
||||||
|
@ -34,7 +34,7 @@
|
||||||
<div id="header">
|
<div id="header">
|
||||||
<img src="../static/images/header.png')"
|
<img src="../static/images/header.png')"
|
||||||
py:attrs="src=tg.url('/static/images/header.png')"
|
py:attrs="src=tg.url('/static/images/header.png')"
|
||||||
alt="panoptische Fotokiste" />
|
alt="panoptische Fotokiosk" />
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
<tr><td>
|
<tr><td>
|
||||||
<div id="mail_pic"><img src="../static/images/fotokiste-default.png"
|
<div id="mail_pic"><img src="../static/images/fotokiosk-default.png"
|
||||||
py:attrs="src=tg.url('/get_current_shot')"/></div>
|
py:attrs="src=tg.url('/get_current_shot')"/></div>
|
||||||
</td><td>
|
</td><td>
|
||||||
<div id="mail_info">
|
<div id="mail_info">
|
||||||
|
@ -30,7 +30,7 @@
|
||||||
<div id="footer">
|
<div id="footer">
|
||||||
<p>
|
<p>
|
||||||
<img src="${tg.url('/static/images/logo.png')}" alt="Sense.Lab e.V." /> <br/>
|
<img src="${tg.url('/static/images/logo.png')}" alt="Sense.Lab e.V." /> <br/>
|
||||||
Die Fotokiste ist ein sense.lab-Projekt und ein Modul der Glasmensch-Ausstellung.<br/>
|
Die Fotokiosk ist ein sense.lab-Projekt und ein Modul der Glasmensch-Ausstellung.<br/>
|
||||||
Alle Inhalte können im Sinne einer Creative Commons Lizenz (BY-SA) beliebig weiter verwendet werden.
|
Alle Inhalte können im Sinne einer Creative Commons Lizenz (BY-SA) beliebig weiter verwendet werden.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
|
@ -3,7 +3,7 @@
|
||||||
py:extends="'master.kid'">
|
py:extends="'master.kid'">
|
||||||
<head>
|
<head>
|
||||||
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" py:replace="''"/>
|
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" py:replace="''"/>
|
||||||
<title>Willkommen in der Fotokiste!</title>
|
<title>Willkommen in der Fotokiosk!</title>
|
||||||
<script type="text/javascript" src="../static/javascript/mjp-streamer.js"
|
<script type="text/javascript" src="../static/javascript/mjp-streamer.js"
|
||||||
py:attrs="src=tg.url('/static/javascript/mjp-streamer.js')" />
|
py:attrs="src=tg.url('/static/javascript/mjp-streamer.js')" />
|
||||||
<title>Bild versenden</title>
|
<title>Bild versenden</title>
|
||||||
|
@ -14,10 +14,10 @@
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<div id="live_pic"><noscript><img width="400" height="320"
|
<div id="live_pic"><noscript><img width="400" height="320"
|
||||||
src="../static/images/fotokiste-default.jpg"
|
src="../static/images/fotokiosk-default.jpg"
|
||||||
py:attrs="src=video_url"/></noscript></div>
|
py:attrs="src=video_url"/></noscript></div>
|
||||||
<div id="default_pic"><img width="400" height="320"
|
<div id="default_pic"><img width="400" height="320"
|
||||||
src="../static/images/fotokiste-default.jpg" /></div>
|
src="../static/images/fotokiosk-default.jpg" /></div>
|
||||||
</td>
|
</td>
|
||||||
<td valign="center">
|
<td valign="center">
|
||||||
<form action="${tg.url('/mailtext')}" method="post">
|
<form action="${tg.url('/mailtext')}" method="post">
|
||||||
|
@ -77,7 +77,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div id="footer">
|
<div id="footer">
|
||||||
<p>
|
<p>
|
||||||
Die Fotokiste ist ein sense.lab-Projekt und ein Modul der Glasmensch-Ausstellung.<br/>
|
Die Fotokiosk ist ein sense.lab-Projekt und ein Modul der Glasmensch-Ausstellung.<br/>
|
||||||
Alle Inhalte können im Sinne einer Creative Commons Lizenz (BY-SA) beliebig weiter verwendet werden.
|
Alle Inhalte können im Sinne einer Creative Commons Lizenz (BY-SA) beliebig weiter verwendet werden.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
|
@ -1,7 +1,7 @@
|
||||||
import unittest
|
import unittest
|
||||||
import turbogears
|
import turbogears
|
||||||
from turbogears import testutil
|
from turbogears import testutil
|
||||||
from fotokiste.controllers import Root
|
from fotokiosk.controllers import Root
|
||||||
import cherrypy
|
import cherrypy
|
||||||
|
|
||||||
cherrypy.root = Root()
|
cherrypy.root = Root()
|
|
@ -5,7 +5,7 @@
|
||||||
# which is very fast.
|
# which is very fast.
|
||||||
|
|
||||||
from turbogears import testutil, database
|
from turbogears import testutil, database
|
||||||
# from fotokiste.model import YourDataClass, User
|
# from fotokiosk.model import YourDataClass, User
|
||||||
|
|
||||||
# database.set_db_uri("sqlite:///:memory:")
|
# database.set_db_uri("sqlite:///:memory:")
|
||||||
|
|
|
@ -1,22 +0,0 @@
|
||||||
README.txt
|
|
||||||
setup.py
|
|
||||||
fotokiste/__init__.py
|
|
||||||
fotokiste/commands.py
|
|
||||||
fotokiste/controllers.py
|
|
||||||
fotokiste/json.py
|
|
||||||
fotokiste/model.py
|
|
||||||
fotokiste/release.py
|
|
||||||
fotokiste.egg-info/PKG-INFO
|
|
||||||
fotokiste.egg-info/SOURCES.txt
|
|
||||||
fotokiste.egg-info/dependency_links.txt
|
|
||||||
fotokiste.egg-info/entry_points.txt
|
|
||||||
fotokiste.egg-info/not-zip-safe
|
|
||||||
fotokiste.egg-info/paster_plugins.txt
|
|
||||||
fotokiste.egg-info/requires.txt
|
|
||||||
fotokiste.egg-info/sqlobject.txt
|
|
||||||
fotokiste.egg-info/top_level.txt
|
|
||||||
fotokiste/config/__init__.py
|
|
||||||
fotokiste/templates/__init__.py
|
|
||||||
fotokiste/tests/__init__.py
|
|
||||||
fotokiste/tests/test_controllers.py
|
|
||||||
fotokiste/tests/test_model.py
|
|
|
@ -1,3 +0,0 @@
|
||||||
[console_scripts]
|
|
||||||
start-fotokiste = fotokiste.commands:start
|
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
db_module=fotokiste.model
|
|
||||||
history_dir=$base/fotokiste/sqlobject-history
|
|
|
@ -1 +0,0 @@
|
||||||
fotokiste
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
Hallo,
|
Hallo,
|
||||||
|
|
||||||
diese Mail wurde Ihnen mit der panoptischen Fotokiste vom Frieda Hoffest 2008 in Rostock geschickt.
|
diese Mail wurde Ihnen mit der panoptischen Fotokiosk vom Frieda Hoffest 2008 in Rostock geschickt.
|
||||||
Die Personen auf dem Foto möchten damit ein Zeichen gegen zunehmend verschärfte Überwachungsbestrebungen setzen und sie mit den folgenden Punkten auf Ihre Handlungsmöglichkeiten aufmerksam machen.
|
Die Personen auf dem Foto möchten damit ein Zeichen gegen zunehmend verschärfte Überwachungsbestrebungen setzen und sie mit den folgenden Punkten auf Ihre Handlungsmöglichkeiten aufmerksam machen.
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
# as a command-line option to your start script.
|
# as a command-line option to your start script.
|
||||||
# Settings that are the same for both development and production
|
# Settings that are the same for both development and production
|
||||||
# (such as template engine, encodings, etc.) all go in
|
# (such as template engine, encodings, etc.) all go in
|
||||||
# fotokiste/config/app.cfg
|
# fotokiosk/config/app.cfg
|
||||||
|
|
||||||
# DATABASE
|
# DATABASE
|
||||||
|
|
||||||
|
@ -59,7 +59,7 @@ server.environment="production"
|
||||||
# Logging configuration generally follows the style of the standard
|
# Logging configuration generally follows the style of the standard
|
||||||
# Python logging module configuration. Note that when specifying
|
# Python logging module configuration. Note that when specifying
|
||||||
# log format messages, you need to use *() for formatting variables.
|
# log format messages, you need to use *() for formatting variables.
|
||||||
# Deployment independent log configuration is in fotokiste/config/log.cfg
|
# Deployment independent log configuration is in fotokiosk/config/log.cfg
|
||||||
[logging]
|
[logging]
|
||||||
|
|
||||||
[[handlers]]
|
[[handlers]]
|
||||||
|
@ -72,9 +72,9 @@ level='INFO'
|
||||||
formatter='message_only'
|
formatter='message_only'
|
||||||
|
|
||||||
[[loggers]]
|
[[loggers]]
|
||||||
[[[fotokiste]]]
|
[[[fotokiosk]]]
|
||||||
level='ERROR'
|
level='ERROR'
|
||||||
qualname='fotokiste'
|
qualname='fotokiosk'
|
||||||
handlers=['error_out']
|
handlers=['error_out']
|
||||||
|
|
||||||
[[[access]]]
|
[[[access]]]
|
||||||
|
|
|
@ -4,18 +4,18 @@ from setuptools import setup, find_packages
|
||||||
from turbogears.finddata import find_package_data
|
from turbogears.finddata import find_package_data
|
||||||
|
|
||||||
import os
|
import os
|
||||||
execfile(os.path.join("fotokiste", "release.py"))
|
execfile(os.path.join("fotokiosk", "release.py"))
|
||||||
|
|
||||||
packages=find_packages()
|
packages=find_packages()
|
||||||
package_data = find_package_data(where='fotokiste',
|
package_data = find_package_data(where='fotokiosk',
|
||||||
package='fotokiste')
|
package='fotokiosk')
|
||||||
if os.path.isdir('locales'):
|
if os.path.isdir('locales'):
|
||||||
packages.append('locales')
|
packages.append('locales')
|
||||||
package_data.update(find_package_data(where='locales',
|
package_data.update(find_package_data(where='locales',
|
||||||
exclude=('*.po',), only_in_packages=False))
|
exclude=('*.po',), only_in_packages=False))
|
||||||
|
|
||||||
setup(
|
setup(
|
||||||
name="fotokiste",
|
name="fotokiosk",
|
||||||
version=version,
|
version=version,
|
||||||
# uncomment the following lines if you fill them out in release.py
|
# uncomment the following lines if you fill them out in release.py
|
||||||
#description=description,
|
#description=description,
|
||||||
|
@ -68,7 +68,7 @@ setup(
|
||||||
test_suite='nose.collector',
|
test_suite='nose.collector',
|
||||||
entry_points = {
|
entry_points = {
|
||||||
'console_scripts': [
|
'console_scripts': [
|
||||||
'start-fotokiste = fotokiste.commands:start',
|
'start-fotokiosk = fotokiosk.commands:start',
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
# Uncomment next line and create a default.cfg file in your project dir
|
# Uncomment next line and create a default.cfg file in your project dir
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#!/usr/bin/env python2.4
|
#!/usr/bin/env python2.4
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
"""Start script for the fotokiste TurboGears project.
|
"""Start script for the fotokiosk TurboGears project.
|
||||||
|
|
||||||
This script is only needed during development for running from the project
|
This script is only needed during development for running from the project
|
||||||
directory. When the project is installed, easy_install will create a
|
directory. When the project is installed, easy_install will create a
|
||||||
|
@ -8,7 +8,7 @@ proper start script.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
from fotokiste.commands import start, ConfigurationError
|
from fotokiosk.commands import start, ConfigurationError
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
try:
|
try:
|
|
@ -1,19 +1,19 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
set -u
|
set -u
|
||||||
FOTOKISTE_DIR="/usr/local/src/fotokiste"
|
FOTOKIOSK_DIR="/usr/local/src/fotokiosk"
|
||||||
FOTOKISTE_EXEC="start-fotokiste.py"
|
FOTOKIOSK_EXEC="start-fotokiosk.py"
|
||||||
PID_FILE="/var/run/fotokiste.pid"
|
PID_FILE="/var/run/fotokiosk.pid"
|
||||||
LOG_FILE="/var/log/fotokiste.log"
|
LOG_FILE="/var/log/fotokiosk.log"
|
||||||
MJPG_STREAMER=/usr/local/src/mjpg-streamer/start-fotokiste.sh
|
MJPG_STREAMER=/usr/local/src/mjpg-streamer/start-fotokiosk.sh
|
||||||
LOG_FILE_MJPG=/var/log/mjpg-streamer.log
|
LOG_FILE_MJPG=/var/log/mjpg-streamer.log
|
||||||
PID_FILE_MJPG=/var/run/mjpg-streamer.pid
|
PID_FILE_MJPG=/var/run/mjpg-streamer.pid
|
||||||
|
|
||||||
case "$1" in
|
case "$1" in
|
||||||
start)
|
start)
|
||||||
echo -n "Starting Fotokiste ... "
|
echo -n "Starting Fotokiosk ... "
|
||||||
"$MJPG_STREAMER" &>"$LOG_FILE_MJPG" </dev/null &
|
"$MJPG_STREAMER" &>"$LOG_FILE_MJPG" </dev/null &
|
||||||
echo "$!" >"$PID_FILE_MJPG"
|
echo "$!" >"$PID_FILE_MJPG"
|
||||||
cd "$FOTOKISTE_DIR"; python "$FOTOKISTE_EXEC" </dev/null &>"$LOG_FILE" &
|
cd "$FOTOKIOSK_DIR"; python "$FOTOKIOSK_EXEC" </dev/null &>"$LOG_FILE" &
|
||||||
echo "$!" >"$PID_FILE"
|
echo "$!" >"$PID_FILE"
|
||||||
echo done
|
echo done
|
||||||
X &
|
X &
|
|
@ -21,9 +21,9 @@ args='(sys.stdout,)'
|
||||||
formatter='full_content'
|
formatter='full_content'
|
||||||
|
|
||||||
[[loggers]]
|
[[loggers]]
|
||||||
[[[fotokiste]]]
|
[[[fotokiosk]]]
|
||||||
level='DEBUG'
|
level='DEBUG'
|
||||||
qualname='fotokiste'
|
qualname='fotokiosk'
|
||||||
handlers=['test_out']
|
handlers=['test_out']
|
||||||
|
|
||||||
[[[turbogears]]]
|
[[[turbogears]]]
|
||||||
|
|