runtime/NevowServer.py
author dporopat <denis.poropat@smarteh.si>
Tue, 14 Aug 2018 11:14:20 +0200
changeset 2266 ed415982a9aa
parent 2219 73042b2d8d65
child 2267 e83aa36b6627
permissions -rw-r--r--
NevowServer : Added minimalist css style customization and a link to go to settings page and back
1511
91538d0c242c add copyright notices to python files where there were missing, that
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1453
diff changeset
     1
#!/usr/bin/env python
91538d0c242c add copyright notices to python files where there were missing, that
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1453
diff changeset
     2
# -*- coding: utf-8 -*-
91538d0c242c add copyright notices to python files where there were missing, that
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1453
diff changeset
     3
1667
cefc9219bb48 runtime is licensed under LGPLv2.1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1595
diff changeset
     4
# This file is part of Beremiz runtime.
1511
91538d0c242c add copyright notices to python files where there were missing, that
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1453
diff changeset
     5
#
91538d0c242c add copyright notices to python files where there were missing, that
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1453
diff changeset
     6
# Copyright (C) 2007: Edouard TISSERANT and Laurent BESSARD
1680
6db967480b7d make run Beremiz and PLCOpen Editor, if full path contain non-lating
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1667
diff changeset
     7
# Copyright (C) 2017: Andrey Skvortsov
1511
91538d0c242c add copyright notices to python files where there were missing, that
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1453
diff changeset
     8
#
1667
cefc9219bb48 runtime is licensed under LGPLv2.1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1595
diff changeset
     9
# See COPYING.Runtime file for copyrights details.
1511
91538d0c242c add copyright notices to python files where there were missing, that
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1453
diff changeset
    10
#
1667
cefc9219bb48 runtime is licensed under LGPLv2.1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1595
diff changeset
    11
# This library is free software; you can redistribute it and/or
cefc9219bb48 runtime is licensed under LGPLv2.1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1595
diff changeset
    12
# modify it under the terms of the GNU Lesser General Public
cefc9219bb48 runtime is licensed under LGPLv2.1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1595
diff changeset
    13
# License as published by the Free Software Foundation; either
cefc9219bb48 runtime is licensed under LGPLv2.1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1595
diff changeset
    14
# version 2.1 of the License, or (at your option) any later version.
cefc9219bb48 runtime is licensed under LGPLv2.1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1595
diff changeset
    15
cefc9219bb48 runtime is licensed under LGPLv2.1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1595
diff changeset
    16
# This library is distributed in the hope that it will be useful,
1511
91538d0c242c add copyright notices to python files where there were missing, that
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1453
diff changeset
    17
# but WITHOUT ANY WARRANTY; without even the implied warranty of
1667
cefc9219bb48 runtime is licensed under LGPLv2.1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1595
diff changeset
    18
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
cefc9219bb48 runtime is licensed under LGPLv2.1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1595
diff changeset
    19
# Lesser General Public License for more details.
cefc9219bb48 runtime is licensed under LGPLv2.1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1595
diff changeset
    20
cefc9219bb48 runtime is licensed under LGPLv2.1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1595
diff changeset
    21
# You should have received a copy of the GNU Lesser General Public
cefc9219bb48 runtime is licensed under LGPLv2.1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1595
diff changeset
    22
# License along with this library; if not, write to the Free Software
cefc9219bb48 runtime is licensed under LGPLv2.1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1595
diff changeset
    23
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
1511
91538d0c242c add copyright notices to python files where there were missing, that
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1453
diff changeset
    24
1826
91796f408540 fix usage of python2-only print statement
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1782
diff changeset
    25
1881
091005ec69c4 fix pylint py3k conversion warning: "(no-absolute-import) import missing `from __future__ import absolute_import`"
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1878
diff changeset
    26
from __future__ import absolute_import
1826
91796f408540 fix usage of python2-only print statement
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1782
diff changeset
    27
from __future__ import print_function
1438
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
    28
import os
2217
a603d1ba287b Added some immutable field (platform) in default runtime web setting page, for the example.
Edouard Tisserant
parents: 2214
diff changeset
    29
import platform
2208
32dcacb67f7a Embrio of setting form, just to test
Edouard Tisserant
parents: 1919
diff changeset
    30
from zope.interface import implements
32dcacb67f7a Embrio of setting form, just to test
Edouard Tisserant
parents: 1919
diff changeset
    31
from nevow import appserver, inevow, tags, loaders, athena, url, rend
1438
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
    32
from nevow.page import renderer
2266
ed415982a9aa NevowServer : Added minimalist css style customization and a link to go to settings page and back
dporopat <denis.poropat@smarteh.si>
parents: 2219
diff changeset
    33
from nevow.static import File
2208
32dcacb67f7a Embrio of setting form, just to test
Edouard Tisserant
parents: 1919
diff changeset
    34
from formless import annotate
32dcacb67f7a Embrio of setting form, just to test
Edouard Tisserant
parents: 1919
diff changeset
    35
from formless import webform
2209
ee2675e4778d Now, runtime extensions should be able to add their own settings to web configuration interface.
Edouard Tisserant
parents: 2208
diff changeset
    36
from formless import configurable
1439
a68cd4253259 Added stub code for runtime WAMP client. Added runtime command line switch to select WAMP url and Nevow web site port. Web port is now fixed, next port number is not tested if bind fails.
Edouard Tisserant
parents: 1438
diff changeset
    37
from twisted.internet import reactor
2210
81949104291d Nevow based web interface now show simple Log message sending form for basic runtime, and allow extensions to add their own web settings.
Edouard Tisserant
parents: 2209
diff changeset
    38
1919
ccea0fa6ea91 Another set of meaningless changes to satisfy PEP8 and PyLint.
Edouard Tisserant
parents: 1881
diff changeset
    39
import util.paths as paths
2210
81949104291d Nevow based web interface now show simple Log message sending form for basic runtime, and allow extensions to add their own web settings.
Edouard Tisserant
parents: 2209
diff changeset
    40
from runtime.loglevels import LogLevels, LogLevelsDict
1438
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
    41
2208
32dcacb67f7a Embrio of setting form, just to test
Edouard Tisserant
parents: 1919
diff changeset
    42
PAGE_TITLE = 'Beremiz Runtime Web Interface'
32dcacb67f7a Embrio of setting form, just to test
Edouard Tisserant
parents: 1919
diff changeset
    43
1438
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
    44
xhtml_header = '''<?xml version="1.0" encoding="utf-8"?>
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
    45
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
    46
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
    47
'''
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
    48
1453
f31353cac197 Fixed Nevow website startup
Edouard Tisserant
parents: 1439
diff changeset
    49
WorkingDir = None
2210
81949104291d Nevow based web interface now show simple Log message sending form for basic runtime, and allow extensions to add their own web settings.
Edouard Tisserant
parents: 2209
diff changeset
    50
_PySrv = None
1453
f31353cac197 Fixed Nevow website startup
Edouard Tisserant
parents: 1439
diff changeset
    51
1736
7e61baa047f0 clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1682
diff changeset
    52
1438
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
    53
class PLCHMI(athena.LiveElement):
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
    54
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
    55
    initialised = False
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
    56
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
    57
    def HMIinitialised(self, result):
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
    58
        self.initialised = True
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
    59
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
    60
    def HMIinitialisation(self):
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
    61
        self.HMIinitialised(None)
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
    62
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
    63
class DefaultPLCStartedHMI(PLCHMI):
1878
fb73a6b6622d fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1870
diff changeset
    64
    docFactory = loaders.stan(
fb73a6b6622d fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1870
diff changeset
    65
        tags.div(render=tags.directive('liveElement'))[
fb73a6b6622d fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1870
diff changeset
    66
            tags.h1["PLC IS NOW STARTED"],
fb73a6b6622d fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1870
diff changeset
    67
        ])
1438
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
    68
1736
7e61baa047f0 clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1682
diff changeset
    69
1438
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
    70
class PLCStoppedHMI(PLCHMI):
1878
fb73a6b6622d fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1870
diff changeset
    71
    docFactory = loaders.stan(
fb73a6b6622d fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1870
diff changeset
    72
        tags.div(render=tags.directive('liveElement'))[
fb73a6b6622d fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1870
diff changeset
    73
            tags.h1["PLC IS STOPPED"],
fb73a6b6622d fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1870
diff changeset
    74
        ])
1438
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
    75
1736
7e61baa047f0 clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1682
diff changeset
    76
1438
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
    77
class MainPage(athena.LiveElement):
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
    78
    jsClass = u"WebInterface.PLC"
1878
fb73a6b6622d fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1870
diff changeset
    79
    docFactory = loaders.stan(
2266
ed415982a9aa NevowServer : Added minimalist css style customization and a link to go to settings page and back
dporopat <denis.poropat@smarteh.si>
parents: 2219
diff changeset
    80
        tags.invisible[
ed415982a9aa NevowServer : Added minimalist css style customization and a link to go to settings page and back
dporopat <denis.poropat@smarteh.si>
parents: 2219
diff changeset
    81
            tags.div(render=tags.directive('liveElement'))[
ed415982a9aa NevowServer : Added minimalist css style customization and a link to go to settings page and back
dporopat <denis.poropat@smarteh.si>
parents: 2219
diff changeset
    82
                tags.div(id='content')[
ed415982a9aa NevowServer : Added minimalist css style customization and a link to go to settings page and back
dporopat <denis.poropat@smarteh.si>
parents: 2219
diff changeset
    83
                    tags.div(render=tags.directive('PLCElement'))]
ed415982a9aa NevowServer : Added minimalist css style customization and a link to go to settings page and back
dporopat <denis.poropat@smarteh.si>
parents: 2219
diff changeset
    84
            ],
ed415982a9aa NevowServer : Added minimalist css style customization and a link to go to settings page and back
dporopat <denis.poropat@smarteh.si>
parents: 2219
diff changeset
    85
            tags.a(href='settings')['Settings']])
1438
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
    86
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
    87
    def __init__(self, *a, **kw):
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
    88
        athena.LiveElement.__init__(self, *a, **kw)
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
    89
        self.pcl_state = False
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
    90
        self.HMI = None
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
    91
        self.resetPLCStartedHMI()
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
    92
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
    93
    def setPLCState(self, state):
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
    94
        self.pcl_state = state
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
    95
        if self.HMI is not None:
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
    96
            self.callRemote('updateHMI')
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
    97
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
    98
    def setPLCStartedHMI(self, hmi):
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
    99
        self.PLCStartedHMIClass = hmi
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   100
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   101
    def resetPLCStartedHMI(self):
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   102
        self.PLCStartedHMIClass = DefaultPLCStartedHMI
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   103
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   104
    def getHMI(self):
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   105
        return self.HMI
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   106
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   107
    def HMIexec(self, function, *args, **kwargs):
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   108
        if self.HMI is not None:
1740
b789b695b5c6 clean-up: fix PEP8 E231 missing whitespace after ':' or ','
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1736
diff changeset
   109
            getattr(self.HMI, function, lambda: None)(*args, **kwargs)
1438
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   110
    athena.expose(HMIexec)
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   111
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   112
    def resetHMI(self):
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   113
        self.HMI = None
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   114
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   115
    def PLCElement(self, ctx, data):
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   116
        return self.getPLCElement()
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   117
    renderer(PLCElement)
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   118
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   119
    def getPLCElement(self):
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   120
        self.detachFragmentChildren()
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   121
        if self.pcl_state:
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   122
            f = self.PLCStartedHMIClass()
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   123
        else:
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   124
            f = PLCStoppedHMI()
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   125
        f.setFragmentParent(self)
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   126
        self.HMI = f
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   127
        return f
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   128
    athena.expose(getPLCElement)
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   129
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   130
    def detachFragmentChildren(self):
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   131
        for child in self.liveFragmentChildren[:]:
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   132
            child.detach()
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   133
2209
ee2675e4778d Now, runtime extensions should be able to add their own settings to web configuration interface.
Edouard Tisserant
parents: 2208
diff changeset
   134
class ConfigurableBindings(configurable.Configurable):
ee2675e4778d Now, runtime extensions should be able to add their own settings to web configuration interface.
Edouard Tisserant
parents: 2208
diff changeset
   135
ee2675e4778d Now, runtime extensions should be able to add their own settings to web configuration interface.
Edouard Tisserant
parents: 2208
diff changeset
   136
    def __init__(self):
ee2675e4778d Now, runtime extensions should be able to add their own settings to web configuration interface.
Edouard Tisserant
parents: 2208
diff changeset
   137
        configurable.Configurable.__init__(self, None)
ee2675e4778d Now, runtime extensions should be able to add their own settings to web configuration interface.
Edouard Tisserant
parents: 2208
diff changeset
   138
        self.bindingsNames = []
ee2675e4778d Now, runtime extensions should be able to add their own settings to web configuration interface.
Edouard Tisserant
parents: 2208
diff changeset
   139
ee2675e4778d Now, runtime extensions should be able to add their own settings to web configuration interface.
Edouard Tisserant
parents: 2208
diff changeset
   140
    def getBindingNames(self, ctx):
ee2675e4778d Now, runtime extensions should be able to add their own settings to web configuration interface.
Edouard Tisserant
parents: 2208
diff changeset
   141
        return self.bindingsNames
ee2675e4778d Now, runtime extensions should be able to add their own settings to web configuration interface.
Edouard Tisserant
parents: 2208
diff changeset
   142
2210
81949104291d Nevow based web interface now show simple Log message sending form for basic runtime, and allow extensions to add their own web settings.
Edouard Tisserant
parents: 2209
diff changeset
   143
    def addExtension(self, name, desc, fields, btnlabel, callback):
2209
ee2675e4778d Now, runtime extensions should be able to add their own settings to web configuration interface.
Edouard Tisserant
parents: 2208
diff changeset
   144
        def _bind(ctx):
ee2675e4778d Now, runtime extensions should be able to add their own settings to web configuration interface.
Edouard Tisserant
parents: 2208
diff changeset
   145
            return annotate.MethodBinding(
ee2675e4778d Now, runtime extensions should be able to add their own settings to web configuration interface.
Edouard Tisserant
parents: 2208
diff changeset
   146
                'action_'+name,
ee2675e4778d Now, runtime extensions should be able to add their own settings to web configuration interface.
Edouard Tisserant
parents: 2208
diff changeset
   147
                annotate.Method(arguments=[
2217
a603d1ba287b Added some immutable field (platform) in default runtime web setting page, for the example.
Edouard Tisserant
parents: 2214
diff changeset
   148
                    annotate.Argument(*field)
a603d1ba287b Added some immutable field (platform) in default runtime web setting page, for the example.
Edouard Tisserant
parents: 2214
diff changeset
   149
                    for field in fields],
2209
ee2675e4778d Now, runtime extensions should be able to add their own settings to web configuration interface.
Edouard Tisserant
parents: 2208
diff changeset
   150
                    label = desc),
2214
b9cdbcc992d5 Fixed typo
Edouard Tisserant
parents: 2210
diff changeset
   151
                action = btnlabel)
2209
ee2675e4778d Now, runtime extensions should be able to add their own settings to web configuration interface.
Edouard Tisserant
parents: 2208
diff changeset
   152
        setattr(self, 'bind_'+name, _bind)
ee2675e4778d Now, runtime extensions should be able to add their own settings to web configuration interface.
Edouard Tisserant
parents: 2208
diff changeset
   153
            
2210
81949104291d Nevow based web interface now show simple Log message sending form for basic runtime, and allow extensions to add their own web settings.
Edouard Tisserant
parents: 2209
diff changeset
   154
        setattr(self, 'action_'+name, callback)
2209
ee2675e4778d Now, runtime extensions should be able to add their own settings to web configuration interface.
Edouard Tisserant
parents: 2208
diff changeset
   155
ee2675e4778d Now, runtime extensions should be able to add their own settings to web configuration interface.
Edouard Tisserant
parents: 2208
diff changeset
   156
        self.bindingsNames.append(name)
ee2675e4778d Now, runtime extensions should be able to add their own settings to web configuration interface.
Edouard Tisserant
parents: 2208
diff changeset
   157
ee2675e4778d Now, runtime extensions should be able to add their own settings to web configuration interface.
Edouard Tisserant
parents: 2208
diff changeset
   158
ConfigurableSettings = ConfigurableBindings()
ee2675e4778d Now, runtime extensions should be able to add their own settings to web configuration interface.
Edouard Tisserant
parents: 2208
diff changeset
   159
2208
32dcacb67f7a Embrio of setting form, just to test
Edouard Tisserant
parents: 1919
diff changeset
   160
class ISettings(annotate.TypedInterface):
2217
a603d1ba287b Added some immutable field (platform) in default runtime web setting page, for the example.
Edouard Tisserant
parents: 2214
diff changeset
   161
    platform = annotate.String(label = _("Platform"),
a603d1ba287b Added some immutable field (platform) in default runtime web setting page, for the example.
Edouard Tisserant
parents: 2214
diff changeset
   162
                           default = platform.system() + " " + platform.release(),
a603d1ba287b Added some immutable field (platform) in default runtime web setting page, for the example.
Edouard Tisserant
parents: 2214
diff changeset
   163
                           immutable = True)
a603d1ba287b Added some immutable field (platform) in default runtime web setting page, for the example.
Edouard Tisserant
parents: 2214
diff changeset
   164
    # TODO version ?
a603d1ba287b Added some immutable field (platform) in default runtime web setting page, for the example.
Edouard Tisserant
parents: 2214
diff changeset
   165
2210
81949104291d Nevow based web interface now show simple Log message sending form for basic runtime, and allow extensions to add their own web settings.
Edouard Tisserant
parents: 2209
diff changeset
   166
    def sendLogMessage(
2208
32dcacb67f7a Embrio of setting form, just to test
Edouard Tisserant
parents: 1919
diff changeset
   167
        ctx = annotate.Context(),
2210
81949104291d Nevow based web interface now show simple Log message sending form for basic runtime, and allow extensions to add their own web settings.
Edouard Tisserant
parents: 2209
diff changeset
   168
        level = annotate.Choice(LogLevels,
81949104291d Nevow based web interface now show simple Log message sending form for basic runtime, and allow extensions to add their own web settings.
Edouard Tisserant
parents: 2209
diff changeset
   169
                                required=True, 
81949104291d Nevow based web interface now show simple Log message sending form for basic runtime, and allow extensions to add their own web settings.
Edouard Tisserant
parents: 2209
diff changeset
   170
                                label=_("Log message level")),
81949104291d Nevow based web interface now show simple Log message sending form for basic runtime, and allow extensions to add their own web settings.
Edouard Tisserant
parents: 2209
diff changeset
   171
        message = annotate.String(label=_("Message text"))):
2208
32dcacb67f7a Embrio of setting form, just to test
Edouard Tisserant
parents: 1919
diff changeset
   172
            pass
2210
81949104291d Nevow based web interface now show simple Log message sending form for basic runtime, and allow extensions to add their own web settings.
Edouard Tisserant
parents: 2209
diff changeset
   173
    sendLogMessage = annotate.autocallable(sendLogMessage, 
81949104291d Nevow based web interface now show simple Log message sending form for basic runtime, and allow extensions to add their own web settings.
Edouard Tisserant
parents: 2209
diff changeset
   174
                                           label=_("Send a message to the log"),
81949104291d Nevow based web interface now show simple Log message sending form for basic runtime, and allow extensions to add their own web settings.
Edouard Tisserant
parents: 2209
diff changeset
   175
                                           action=_("Send"))
2208
32dcacb67f7a Embrio of setting form, just to test
Edouard Tisserant
parents: 1919
diff changeset
   176
2219
73042b2d8d65 Added a way for extension to register dedicated URL under settings page URL (i.e. /settings/something)
Edouard Tisserant
parents: 2217
diff changeset
   177
customSettingsURLs = {
73042b2d8d65 Added a way for extension to register dedicated URL under settings page URL (i.e. /settings/something)
Edouard Tisserant
parents: 2217
diff changeset
   178
}
2208
32dcacb67f7a Embrio of setting form, just to test
Edouard Tisserant
parents: 1919
diff changeset
   179
32dcacb67f7a Embrio of setting form, just to test
Edouard Tisserant
parents: 1919
diff changeset
   180
class SettingsPage(rend.Page):
32dcacb67f7a Embrio of setting form, just to test
Edouard Tisserant
parents: 1919
diff changeset
   181
    # We deserve a slash
32dcacb67f7a Embrio of setting form, just to test
Edouard Tisserant
parents: 1919
diff changeset
   182
    addSlash = True
32dcacb67f7a Embrio of setting form, just to test
Edouard Tisserant
parents: 1919
diff changeset
   183
    
32dcacb67f7a Embrio of setting form, just to test
Edouard Tisserant
parents: 1919
diff changeset
   184
    # This makes webform_css url answer some default CSS
32dcacb67f7a Embrio of setting form, just to test
Edouard Tisserant
parents: 1919
diff changeset
   185
    child_webform_css = webform.defaultCSS
2266
ed415982a9aa NevowServer : Added minimalist css style customization and a link to go to settings page and back
dporopat <denis.poropat@smarteh.si>
parents: 2219
diff changeset
   186
    child_webinterface_css = File(paths.AbsNeighbourFile(__file__, 'webinterface.css'), 'text/css')
2208
32dcacb67f7a Embrio of setting form, just to test
Edouard Tisserant
parents: 1919
diff changeset
   187
32dcacb67f7a Embrio of setting form, just to test
Edouard Tisserant
parents: 1919
diff changeset
   188
    implements(ISettings)
32dcacb67f7a Embrio of setting form, just to test
Edouard Tisserant
parents: 1919
diff changeset
   189
32dcacb67f7a Embrio of setting form, just to test
Edouard Tisserant
parents: 1919
diff changeset
   190
32dcacb67f7a Embrio of setting form, just to test
Edouard Tisserant
parents: 1919
diff changeset
   191
    docFactory = loaders.stan([tags.html[
32dcacb67f7a Embrio of setting form, just to test
Edouard Tisserant
parents: 1919
diff changeset
   192
                                   tags.head[
32dcacb67f7a Embrio of setting form, just to test
Edouard Tisserant
parents: 1919
diff changeset
   193
                                       tags.title[_("Beremiz Runtime Settings")],
32dcacb67f7a Embrio of setting form, just to test
Edouard Tisserant
parents: 1919
diff changeset
   194
                                       tags.link(rel='stylesheet',
32dcacb67f7a Embrio of setting form, just to test
Edouard Tisserant
parents: 1919
diff changeset
   195
                                                 type='text/css', 
2266
ed415982a9aa NevowServer : Added minimalist css style customization and a link to go to settings page and back
dporopat <denis.poropat@smarteh.si>
parents: 2219
diff changeset
   196
                                                 href=url.here.child("webform_css")),
ed415982a9aa NevowServer : Added minimalist css style customization and a link to go to settings page and back
dporopat <denis.poropat@smarteh.si>
parents: 2219
diff changeset
   197
                                       tags.link(rel='stylesheet',
ed415982a9aa NevowServer : Added minimalist css style customization and a link to go to settings page and back
dporopat <denis.poropat@smarteh.si>
parents: 2219
diff changeset
   198
                                                 type='text/css',
ed415982a9aa NevowServer : Added minimalist css style customization and a link to go to settings page and back
dporopat <denis.poropat@smarteh.si>
parents: 2219
diff changeset
   199
                                                 href=url.here.child("webinterface_css"))
2208
32dcacb67f7a Embrio of setting form, just to test
Edouard Tisserant
parents: 1919
diff changeset
   200
                                   ],
32dcacb67f7a Embrio of setting form, just to test
Edouard Tisserant
parents: 1919
diff changeset
   201
                                   tags.body[ 
2266
ed415982a9aa NevowServer : Added minimalist css style customization and a link to go to settings page and back
dporopat <denis.poropat@smarteh.si>
parents: 2219
diff changeset
   202
                                       tags.a(href='/')['back'],
2209
ee2675e4778d Now, runtime extensions should be able to add their own settings to web configuration interface.
Edouard Tisserant
parents: 2208
diff changeset
   203
                                       tags.h1["Runtime settings:"],
ee2675e4778d Now, runtime extensions should be able to add their own settings to web configuration interface.
Edouard Tisserant
parents: 2208
diff changeset
   204
                                       webform.renderForms('staticSettings'),
2266
ed415982a9aa NevowServer : Added minimalist css style customization and a link to go to settings page and back
dporopat <denis.poropat@smarteh.si>
parents: 2219
diff changeset
   205
                                       tags.h1["Extensions settings:"],
2209
ee2675e4778d Now, runtime extensions should be able to add their own settings to web configuration interface.
Edouard Tisserant
parents: 2208
diff changeset
   206
                                       webform.renderForms('dynamicSettings'),
2208
32dcacb67f7a Embrio of setting form, just to test
Edouard Tisserant
parents: 1919
diff changeset
   207
                                   ]]])
32dcacb67f7a Embrio of setting form, just to test
Edouard Tisserant
parents: 1919
diff changeset
   208
2209
ee2675e4778d Now, runtime extensions should be able to add their own settings to web configuration interface.
Edouard Tisserant
parents: 2208
diff changeset
   209
    def configurable_staticSettings(self, ctx):
ee2675e4778d Now, runtime extensions should be able to add their own settings to web configuration interface.
Edouard Tisserant
parents: 2208
diff changeset
   210
        return configurable.TypedInterfaceConfigurable(self)
ee2675e4778d Now, runtime extensions should be able to add their own settings to web configuration interface.
Edouard Tisserant
parents: 2208
diff changeset
   211
ee2675e4778d Now, runtime extensions should be able to add their own settings to web configuration interface.
Edouard Tisserant
parents: 2208
diff changeset
   212
    def configurable_dynamicSettings(self, ctx):
ee2675e4778d Now, runtime extensions should be able to add their own settings to web configuration interface.
Edouard Tisserant
parents: 2208
diff changeset
   213
        return ConfigurableSettings
2210
81949104291d Nevow based web interface now show simple Log message sending form for basic runtime, and allow extensions to add their own web settings.
Edouard Tisserant
parents: 2209
diff changeset
   214
    
81949104291d Nevow based web interface now show simple Log message sending form for basic runtime, and allow extensions to add their own web settings.
Edouard Tisserant
parents: 2209
diff changeset
   215
    def sendLogMessage(self, level, message, **kwargs):
81949104291d Nevow based web interface now show simple Log message sending form for basic runtime, and allow extensions to add their own web settings.
Edouard Tisserant
parents: 2209
diff changeset
   216
        level = LogLevelsDict[level]
81949104291d Nevow based web interface now show simple Log message sending form for basic runtime, and allow extensions to add their own web settings.
Edouard Tisserant
parents: 2209
diff changeset
   217
        if _PySrv.plcobj is not None:
81949104291d Nevow based web interface now show simple Log message sending form for basic runtime, and allow extensions to add their own web settings.
Edouard Tisserant
parents: 2209
diff changeset
   218
            _PySrv.plcobj.LogMessage(level, "Web form log message: " + message )
2208
32dcacb67f7a Embrio of setting form, just to test
Edouard Tisserant
parents: 1919
diff changeset
   219
2219
73042b2d8d65 Added a way for extension to register dedicated URL under settings page URL (i.e. /settings/something)
Edouard Tisserant
parents: 2217
diff changeset
   220
    def locateChild(self, ctx, segments):
73042b2d8d65 Added a way for extension to register dedicated URL under settings page URL (i.e. /settings/something)
Edouard Tisserant
parents: 2217
diff changeset
   221
        if segments[0] in customSettingsURLs :
73042b2d8d65 Added a way for extension to register dedicated URL under settings page URL (i.e. /settings/something)
Edouard Tisserant
parents: 2217
diff changeset
   222
            return customSettingsURLs[segments[0]](ctx, segments)
73042b2d8d65 Added a way for extension to register dedicated URL under settings page URL (i.e. /settings/something)
Edouard Tisserant
parents: 2217
diff changeset
   223
        return super(SettingsPage, self).locateChild(ctx, segments)
73042b2d8d65 Added a way for extension to register dedicated URL under settings page URL (i.e. /settings/something)
Edouard Tisserant
parents: 2217
diff changeset
   224
1736
7e61baa047f0 clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1682
diff changeset
   225
1438
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   226
class WebInterface(athena.LivePage):
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   227
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   228
    docFactory = loaders.stan([tags.raw(xhtml_header),
1767
c74815729afd clean-up: fix PEP8 E127 continuation line over-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1756
diff changeset
   229
                               tags.html(xmlns="http://www.w3.org/1999/xhtml")[
2208
32dcacb67f7a Embrio of setting form, just to test
Edouard Tisserant
parents: 1919
diff changeset
   230
                                   tags.head(render=tags.directive('liveglue'))[
32dcacb67f7a Embrio of setting form, just to test
Edouard Tisserant
parents: 1919
diff changeset
   231
                                       tags.title[PAGE_TITLE],
32dcacb67f7a Embrio of setting form, just to test
Edouard Tisserant
parents: 1919
diff changeset
   232
                                       tags.link(rel='stylesheet',
32dcacb67f7a Embrio of setting form, just to test
Edouard Tisserant
parents: 1919
diff changeset
   233
                                                 type='text/css', 
32dcacb67f7a Embrio of setting form, just to test
Edouard Tisserant
parents: 1919
diff changeset
   234
                                                 href=url.here.child("webform_css"))
32dcacb67f7a Embrio of setting form, just to test
Edouard Tisserant
parents: 1919
diff changeset
   235
                                   ],
1767
c74815729afd clean-up: fix PEP8 E127 continuation line over-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1756
diff changeset
   236
                                   tags.body[
c74815729afd clean-up: fix PEP8 E127 continuation line over-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1756
diff changeset
   237
                                       tags.div[
2208
32dcacb67f7a Embrio of setting form, just to test
Edouard Tisserant
parents: 1919
diff changeset
   238
                                           tags.div(render=tags.directive("MainPage")),
1767
c74815729afd clean-up: fix PEP8 E127 continuation line over-indented for visual indent
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1756
diff changeset
   239
                                       ]]]])
1438
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   240
    MainPage = MainPage()
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   241
    PLCHMI = PLCHMI
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   242
2208
32dcacb67f7a Embrio of setting form, just to test
Edouard Tisserant
parents: 1919
diff changeset
   243
    def child_settings(self, context):
32dcacb67f7a Embrio of setting form, just to test
Edouard Tisserant
parents: 1919
diff changeset
   244
        return SettingsPage()
32dcacb67f7a Embrio of setting form, just to test
Edouard Tisserant
parents: 1919
diff changeset
   245
1438
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   246
    def __init__(self, plcState=False, *a, **kw):
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   247
        super(WebInterface, self).__init__(*a, **kw)
1682
496029f768d9 fix extra brace
Anton Midyukov
parents: 1680
diff changeset
   248
        self.jsModules.mapping[u'WebInterface'] = paths.AbsNeighbourFile(__file__, 'webinterface.js')
1438
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   249
        self.plcState = plcState
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   250
        self.MainPage.setPLCState(plcState)
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   251
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   252
    def getHMI(self):
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   253
        return self.MainPage.getHMI()
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   254
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   255
    def LoadHMI(self, hmi, jsmodules):
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   256
        for name, path in jsmodules.iteritems():
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   257
            self.jsModules.mapping[name] = os.path.join(WorkingDir, path)
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   258
        self.MainPage.setPLCStartedHMI(hmi)
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   259
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   260
    def UnLoadHMI(self):
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   261
        self.MainPage.resetPLCStartedHMI()
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   262
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   263
    def PLCStarted(self):
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   264
        self.plcState = True
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   265
        self.MainPage.setPLCState(True)
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   266
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   267
    def PLCStopped(self):
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   268
        self.plcState = False
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   269
        self.MainPage.setPLCState(False)
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   270
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   271
    def renderHTTP(self, ctx):
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   272
        """
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   273
        Force content type to fit with SVG
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   274
        """
1870
4d070115b552 fix pylint error '(too-many-function-args) Too many positional arguments for function call'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1850
diff changeset
   275
        req = ctx.locate(inevow.IRequest)
1438
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   276
        req.setHeader('Content-type', 'application/xhtml+xml')
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   277
        return super(WebInterface, self).renderHTTP(ctx)
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   278
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   279
    def render_MainPage(self, ctx, data):
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   280
        f = self.MainPage
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   281
        f.setFragmentParent(self)
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   282
        return ctx.tag[f]
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   283
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   284
    def child_(self, ctx):
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   285
        self.MainPage.detachFragmentChildren()
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   286
        return WebInterface(plcState=self.plcState)
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   287
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   288
    def beforeRender(self, ctx):
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   289
        d = self.notifyOnDisconnect()
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   290
        d.addErrback(self.disconnected)
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   291
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   292
    def disconnected(self, reason):
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   293
        self.MainPage.resetHMI()
1782
5b6ad7a7fd9d clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1776
diff changeset
   294
        # print reason
5b6ad7a7fd9d clean-up: fix PEP8 E265 block comment should start with '# '
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1776
diff changeset
   295
        # print "We will be called back when the client disconnects"
1438
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   296
1736
7e61baa047f0 clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1682
diff changeset
   297
2208
32dcacb67f7a Embrio of setting form, just to test
Edouard Tisserant
parents: 1919
diff changeset
   298
1439
a68cd4253259 Added stub code for runtime WAMP client. Added runtime command line switch to select WAMP url and Nevow web site port. Web port is now fixed, next port number is not tested if bind fails.
Edouard Tisserant
parents: 1438
diff changeset
   299
def RegisterWebsite(port):
1438
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   300
    website = WebInterface()
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   301
    site = appserver.NevowSite(website)
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   302
1439
a68cd4253259 Added stub code for runtime WAMP client. Added runtime command line switch to select WAMP url and Nevow web site port. Web port is now fixed, next port number is not tested if bind fails.
Edouard Tisserant
parents: 1438
diff changeset
   303
    reactor.listenTCP(port, site)
1826
91796f408540 fix usage of python2-only print statement
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1782
diff changeset
   304
    print(_('HTTP interface port :'), port)
1439
a68cd4253259 Added stub code for runtime WAMP client. Added runtime command line switch to select WAMP url and Nevow web site port. Web port is now fixed, next port number is not tested if bind fails.
Edouard Tisserant
parents: 1438
diff changeset
   305
    return website
1438
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   306
2210
81949104291d Nevow based web interface now show simple Log message sending form for basic runtime, and allow extensions to add their own web settings.
Edouard Tisserant
parents: 2209
diff changeset
   307
1831
56b48961cc68 fix (old-style-class) Old-style class defined error for most parts of
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1826
diff changeset
   308
class statuslistener(object):
1438
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   309
    def __init__(self, site):
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   310
        self.oldstate = None
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   311
        self.site = site
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   312
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   313
    def listen(self, state):
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   314
        if state != self.oldstate:
1453
f31353cac197 Fixed Nevow website startup
Edouard Tisserant
parents: 1439
diff changeset
   315
            action = {'Started': self.site.PLCStarted,
f31353cac197 Fixed Nevow website startup
Edouard Tisserant
parents: 1439
diff changeset
   316
                      'Stopped': self.site.PLCStopped}.get(state, None)
1756
08e4394ff4fb clean-up: fix PEP8 E701 multiple statements on one line (colon)
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1746
diff changeset
   317
            if action is not None:
08e4394ff4fb clean-up: fix PEP8 E701 multiple statements on one line (colon)
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1746
diff changeset
   318
                action()
1438
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   319
            self.oldstate = state
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   320
1736
7e61baa047f0 clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1682
diff changeset
   321
1438
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   322
def website_statuslistener_factory(site):
19ebe96b41c0 Moved twisted/nevow/athena away from Berermiz_service.py + some minor cleanup
Edouard Tisserant
parents:
diff changeset
   323
    return statuslistener(site).listen
2208
32dcacb67f7a Embrio of setting form, just to test
Edouard Tisserant
parents: 1919
diff changeset
   324
32dcacb67f7a Embrio of setting form, just to test
Edouard Tisserant
parents: 1919
diff changeset
   325
2210
81949104291d Nevow based web interface now show simple Log message sending form for basic runtime, and allow extensions to add their own web settings.
Edouard Tisserant
parents: 2209
diff changeset
   326
def SetServer(pysrv):
81949104291d Nevow based web interface now show simple Log message sending form for basic runtime, and allow extensions to add their own web settings.
Edouard Tisserant
parents: 2209
diff changeset
   327
    global _PySrv
81949104291d Nevow based web interface now show simple Log message sending form for basic runtime, and allow extensions to add their own web settings.
Edouard Tisserant
parents: 2209
diff changeset
   328
    _PySrv = pysrv
81949104291d Nevow based web interface now show simple Log message sending form for basic runtime, and allow extensions to add their own web settings.
Edouard Tisserant
parents: 2209
diff changeset
   329