qmsk/dmx/web.py
author Tero Marttila <terom@paivola.fi>
Fri, 11 Apr 2014 21:45:26 +0300
changeset 75 baa33d32308e
child 76 ca10547ba9db
permissions -rw-r--r--
qmsk.dmx.web
75
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     1
import pvl.web
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     2
from pvl.web import urls, html
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     3
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     4
import logging; log = logging.getLogger('qmsk.dmx.web')
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     5
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     6
class Handler (pvl.web.Handler) :
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     7
    # Bootstrap
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     8
    DOCTYPE = 'html'
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
     9
    HTML_XMLNS = None
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    10
    HTML_LANG = 'en'
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    11
    CSS = (
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    12
            '//code.jquery.com/ui/1.10.4/themes/ui-darkness/jquery-ui.css',
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    13
            '//netdna.bootstrapcdn.com/bootstrap/3.0.3/css/bootstrap.min.css',
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    14
    )
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    15
    JS = (
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    16
            '//code.jquery.com/jquery-2.1.0.js',
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    17
            '//code.jquery.com/ui/1.10.4/jquery-ui.js',
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    18
            '//netdna.bootstrapcdn.com/bootstrap/3.0.3/js/bootstrap.min.js',
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    19
    )
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    20
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    21
    STYLE = """
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    22
body {
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    23
    padding-top: 2em;
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    24
    text-align: center;
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    25
}
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    26
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    27
.container {
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    28
    padding: 2em 1em;
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    29
    text-align: left;
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    30
}
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    31
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    32
.panel {
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    33
    width: 30em;
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    34
    margin: 1em auto;
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    35
    }
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    36
    """
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    37
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    38
    # test
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    39
    TITLE = u"Hello World"
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    40
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    41
    def process (self) :
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    42
        self.color = (
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    43
                self.request.form.get('r'),
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    44
                self.request.form.get('g'),
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    45
                self.request.form.get('b'),
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    46
        )
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    47
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    48
        self.color = tuple((int(x, 16) if x else None) for x in self.color)
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    49
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    50
        if self.request.method == 'POST' :
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    51
            r, g, b = self.color
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    52
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    53
            self.app.dmx_color(r, g, b, 255)
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    54
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    55
        log.info("%s", self.color)
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    56
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    57
    def render (self) :
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    58
        r, g, b = self.color
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    59
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    60
        def color_input (name, value) :
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    61
            color = dict(r=0, g=0, b=0)
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    62
            bgcolor = dict(r=0, g=0, b=0)
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    63
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    64
            if value :
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    65
                color[name] = value
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    66
            bgcolor[name] = 255
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    67
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    68
            return html.input(type='text', name=name, class_='form-control', placeholder=name,
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    69
                    value   = '{:02x}'.format(value),
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    70
                    #style   = 'background-color: #{r:02x}{g:02x}{b:02x}'.format(**color),
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    71
                    style   = 'background-color: rgba({r}, {g}, {b}, {a})'.format(a=value, **bgcolor),
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    72
            )
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    73
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    74
        return html.div(class_='container')(
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    75
            html.div(class_='panel')(
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    76
                html.form(action='.', method='POST', class_='form-horizontal')(
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    77
                    html.div(class_='form-group')(
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    78
                       html.label(for_='color', class_='control-label')("Color"),
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    79
                       color_input('r', r),
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    80
                       color_input('g', g),
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    81
                       color_input('b', b),
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    82
                    ),
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    83
                    html.div(class_='form-group')(
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    84
                        html.button(type='submit', class_='btn btn-primary')("Go"),
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    85
                    ),
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    86
                )
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    87
            )
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    88
        )
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    89
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    90
class DMXWebApplication (pvl.web.Application) :
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    91
    URLS = urls.Map((
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    92
        urls.rule('/',          Handler),
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    93
    ))
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    94
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    95
    def __init__ (self, dmx, **opts) :
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    96
        super(DMXWebApplication, self).__init__(**opts)
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    97
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    98
        self.dmx = dmx
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
    99
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   100
    def dmx_color (self, r, g, b, a=255) :
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   101
        for c in (1, 30) :
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   102
            self.dmx[c + 0:c + 26:3] = r
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   103
            self.dmx[c + 1:c + 26:3] = g
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   104
            self.dmx[c + 2:c + 26:3] = b
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   105
            self.dmx[c + 28] = 255
baa33d32308e qmsk.dmx.web
Tero Marttila <terom@paivola.fi>
parents:
diff changeset
   106