runtime/WampClient.py
author Andrey Skvortsov <andrej.skvortzov@gmail.com>
Wed, 03 Oct 2018 11:44:57 +0300
changeset 2419 c081dabc0f63
parent 2418 5587c490a070
child 2429 15f18dc8b56a
child 2434 07f48018b6f5
permissions -rw-r--r--
Fix old style exception raise and exec syntax
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:
diff changeset
     1
#!/usr/bin/env python
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:
diff changeset
     2
# -*- coding: utf-8 -*-
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:
diff changeset
     3
1667
cefc9219bb48 runtime is licensed under LGPLv2.1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1511
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: 1446
diff changeset
     5
#
91538d0c242c add copyright notices to python files where there were missing, that
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1446
diff changeset
     6
# Copyright (C) 2007: Edouard TISSERANT and Laurent BESSARD
91538d0c242c add copyright notices to python files where there were missing, that
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1446
diff changeset
     7
#
1667
cefc9219bb48 runtime is licensed under LGPLv2.1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1511
diff changeset
     8
# 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: 1446
diff changeset
     9
#
1667
cefc9219bb48 runtime is licensed under LGPLv2.1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1511
diff changeset
    10
# 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: 1511
diff changeset
    11
# 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: 1511
diff changeset
    12
# License as published by the Free Software Foundation; either
cefc9219bb48 runtime is licensed under LGPLv2.1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1511
diff changeset
    13
# 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: 1511
diff changeset
    14
cefc9219bb48 runtime is licensed under LGPLv2.1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1511
diff changeset
    15
# 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: 1446
diff changeset
    16
# 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: 1511
diff changeset
    17
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
cefc9219bb48 runtime is licensed under LGPLv2.1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1511
diff changeset
    18
# Lesser General Public License for more details.
cefc9219bb48 runtime is licensed under LGPLv2.1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1511
diff changeset
    19
cefc9219bb48 runtime is licensed under LGPLv2.1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1511
diff changeset
    20
# 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: 1511
diff changeset
    21
# 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: 1511
diff changeset
    22
# 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: 1446
diff changeset
    23
1826
91796f408540 fix usage of python2-only print statement
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1782
diff changeset
    24
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
    25
from __future__ import absolute_import
1826
91796f408540 fix usage of python2-only print statement
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1782
diff changeset
    26
from __future__ import print_function
1899
ff4410112b67 runtime/WAMP : was 'Added time print on session left.' from dporopat. Purpose is to log (dis/re)connection, to help debugging connection problem
Edouard Tisserant
parents: 1898
diff changeset
    27
import time
1893
971de876b1af WAMP runtime : changes from dporopat and agregorcic, adding CRA (-s) and changed way to load WAMP conf (-c)
Edouard Tisserant
parents: 1892
diff changeset
    28
import json
2203
c8a32ad27c0a #2486 Modified reconnect function. Added 'active' parameter to wampconf.json file.
dporopat <denis.poropat@smarteh.si>
parents: 2202
diff changeset
    29
import os
2201
4e511f5aad19 #2486 Added global TransportFactory, needed in WebInterface reconnecting function.
dporopat <denis.poropat@smarteh.si>
parents: 2199
diff changeset
    30
import re
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:
diff changeset
    31
from autobahn.twisted import wamp
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:
diff changeset
    32
from autobahn.twisted.websocket import WampWebSocketClientFactory, connectWS
1893
971de876b1af WAMP runtime : changes from dporopat and agregorcic, adding CRA (-s) and changed way to load WAMP conf (-c)
Edouard Tisserant
parents: 1892
diff changeset
    33
from autobahn.wamp import types, auth
1440
e8daabf2c438 Runtime : Added PLCobject methods registring. IDE : Added WAMP connector. Still need some fixes
Edouard Tisserant
parents: 1439
diff changeset
    34
from autobahn.wamp.serializer import MsgPackSerializer
1834
cd42b426028b fix ungrouped imports from package X
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1832
diff changeset
    35
from twisted.internet.defer import inlineCallbacks
1441
826730e60407 Added auto-reconnect for runtime. Fixed Beremiz closing problem caused by remaining twisted reactor thread in IDE.
Edouard Tisserant
parents: 1440
diff changeset
    36
from twisted.internet.protocol import ReconnectingClientFactory
2220
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
    37
from twisted.python.components import registerAdapter
1832
0f1081928d65 fix wrong-import-order. first standard modules are imported, then others
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1826
diff changeset
    38
2220
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
    39
from formless import annotate, webform
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
    40
import formless
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
    41
from nevow import tags, url, static
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:
diff changeset
    42
2212
cf1718962567 WampClient : Simplified, removed dead code, use exception for handling failures and misconfiguration, check existence of mandatory parameters.
Edouard Tisserant
parents: 2207
diff changeset
    43
mandatoryConfigItems = ["ID", "active", "realm", "url"]
cf1718962567 WampClient : Simplified, removed dead code, use exception for handling failures and misconfiguration, check existence of mandatory parameters.
Edouard Tisserant
parents: 2207
diff changeset
    44
2201
4e511f5aad19 #2486 Added global TransportFactory, needed in WebInterface reconnecting function.
dporopat <denis.poropat@smarteh.si>
parents: 2199
diff changeset
    45
_transportFactory = None
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:
diff changeset
    46
_WampSession = None
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:
diff changeset
    47
_PySrv = None
2220
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
    48
WorkingDir = None
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
    49
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
    50
# Find pre-existing project WAMP config file
2202
237c1a2de1c8 #2486 Adding reconnect funtion to WampClient. Global TransportFactory not needed anymore.
dporopat <denis.poropat@smarteh.si>
parents: 2201
diff changeset
    51
_WampConf = None
237c1a2de1c8 #2486 Adding reconnect funtion to WampClient. Global TransportFactory not needed anymore.
dporopat <denis.poropat@smarteh.si>
parents: 2201
diff changeset
    52
_WampSecret = None
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:
diff changeset
    53
1878
fb73a6b6622d fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1850
diff changeset
    54
ExposedCalls = [
2206
1e397afc36a9 #2486 ExposedCalls with register options as a dictionary.
dporopat <denis.poropat@smarteh.si>
parents: 2205
diff changeset
    55
    ("StartPLC", {}),
1e397afc36a9 #2486 ExposedCalls with register options as a dictionary.
dporopat <denis.poropat@smarteh.si>
parents: 2205
diff changeset
    56
    ("StopPLC", {}),
1e397afc36a9 #2486 ExposedCalls with register options as a dictionary.
dporopat <denis.poropat@smarteh.si>
parents: 2205
diff changeset
    57
    ("GetPLCstatus", {}),
1e397afc36a9 #2486 ExposedCalls with register options as a dictionary.
dporopat <denis.poropat@smarteh.si>
parents: 2205
diff changeset
    58
    ("NewPLC", {}),
1e397afc36a9 #2486 ExposedCalls with register options as a dictionary.
dporopat <denis.poropat@smarteh.si>
parents: 2205
diff changeset
    59
    ("MatchMD5", {}),
1e397afc36a9 #2486 ExposedCalls with register options as a dictionary.
dporopat <denis.poropat@smarteh.si>
parents: 2205
diff changeset
    60
    ("SetTraceVariablesList", {}),
1e397afc36a9 #2486 ExposedCalls with register options as a dictionary.
dporopat <denis.poropat@smarteh.si>
parents: 2205
diff changeset
    61
    ("GetTraceVariables", {}),
1e397afc36a9 #2486 ExposedCalls with register options as a dictionary.
dporopat <denis.poropat@smarteh.si>
parents: 2205
diff changeset
    62
    ("RemoteExec", {}),
1e397afc36a9 #2486 ExposedCalls with register options as a dictionary.
dporopat <denis.poropat@smarteh.si>
parents: 2205
diff changeset
    63
    ("GetLogMessage", {}),
1e397afc36a9 #2486 ExposedCalls with register options as a dictionary.
dporopat <denis.poropat@smarteh.si>
parents: 2205
diff changeset
    64
    ("ResetLogCount", {})
1878
fb73a6b6622d fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1850
diff changeset
    65
]
1440
e8daabf2c438 Runtime : Added PLCobject methods registring. IDE : Added WAMP connector. Still need some fixes
Edouard Tisserant
parents: 1439
diff changeset
    66
2220
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
    67
# de-activated dumb wamp config
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
    68
defaultWampConfig = {
2248
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
    69
    "ID": "wamptest",
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
    70
    "active": False,
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
    71
    "realm": "Automation",
2220
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
    72
    "url": "ws://127.0.0.1:8888"
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
    73
}
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
    74
1898
d2dbdeffc426 runtime/Wamp : adapt to unicode being enforced in latest crossbar API. Updated some documentation, to explain why there is unused definitions like SubscribedEvents or DoOnJoin.
Edouard Tisserant
parents: 1894
diff changeset
    75
# Those two lists are meant to be filled by customized runtime
1901
e8cf68d69447 Enforced check_source.sh pep8 and pylint rules.
Edouard Tisserant
parents: 1900
diff changeset
    76
# or User python code.
1898
d2dbdeffc426 runtime/Wamp : adapt to unicode being enforced in latest crossbar API. Updated some documentation, to explain why there is unused definitions like SubscribedEvents or DoOnJoin.
Edouard Tisserant
parents: 1894
diff changeset
    77
1901
e8cf68d69447 Enforced check_source.sh pep8 and pylint rules.
Edouard Tisserant
parents: 1900
diff changeset
    78
""" crossbar Events to register to """
1446
4963e3816641 Split runtime's twisted modules import and setup to ease runtime extensions hotpatching
Edouard Tisserant
parents: 1445
diff changeset
    79
SubscribedEvents = []
4963e3816641 Split runtime's twisted modules import and setup to ease runtime extensions hotpatching
Edouard Tisserant
parents: 1445
diff changeset
    80
1901
e8cf68d69447 Enforced check_source.sh pep8 and pylint rules.
Edouard Tisserant
parents: 1900
diff changeset
    81
""" things to do on join (callables) """
1446
4963e3816641 Split runtime's twisted modules import and setup to ease runtime extensions hotpatching
Edouard Tisserant
parents: 1445
diff changeset
    82
DoOnJoin = []
4963e3816641 Split runtime's twisted modules import and setup to ease runtime extensions hotpatching
Edouard Tisserant
parents: 1445
diff changeset
    83
2218
7a4deed94eb2 Fixed a bit of everything in WAMP, and added web settings for that same extension.
Edouard Tisserant
parents: 2215
diff changeset
    84
lastKnownConfig = None
1736
7e61baa047f0 clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1667
diff changeset
    85
2248
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
    86
1445
e25479e3fe11 More versatile registering of wamp callees
Edouard Tisserant
parents: 1443
diff changeset
    87
def GetCallee(name):
1446
4963e3816641 Split runtime's twisted modules import and setup to ease runtime extensions hotpatching
Edouard Tisserant
parents: 1445
diff changeset
    88
    """ Get Callee or Subscriber corresponding to '.' spearated object path """
1445
e25479e3fe11 More versatile registering of wamp callees
Edouard Tisserant
parents: 1443
diff changeset
    89
    names = name.split('.')
e25479e3fe11 More versatile registering of wamp callees
Edouard Tisserant
parents: 1443
diff changeset
    90
    obj = _PySrv.plcobj
1756
08e4394ff4fb clean-up: fix PEP8 E701 multiple statements on one line (colon)
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1753
diff changeset
    91
    while names:
08e4394ff4fb clean-up: fix PEP8 E701 multiple statements on one line (colon)
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1753
diff changeset
    92
        obj = getattr(obj, names.pop(0))
1445
e25479e3fe11 More versatile registering of wamp callees
Edouard Tisserant
parents: 1443
diff changeset
    93
    return obj
1440
e8daabf2c438 Runtime : Added PLCobject methods registring. IDE : Added WAMP connector. Still need some fixes
Edouard Tisserant
parents: 1439
diff changeset
    94
1736
7e61baa047f0 clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1667
diff changeset
    95
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:
diff changeset
    96
class WampSession(wamp.ApplicationSession):
2248
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
    97
1893
971de876b1af WAMP runtime : changes from dporopat and agregorcic, adding CRA (-s) and changed way to load WAMP conf (-c)
Edouard Tisserant
parents: 1892
diff changeset
    98
    def onConnect(self):
1901
e8cf68d69447 Enforced check_source.sh pep8 and pylint rules.
Edouard Tisserant
parents: 1900
diff changeset
    99
        if "secret" in self.config.extra:
2194
35d6b9321ffd #2486 Updated wamp test project to work with the latest Crossbar version.
dporopat <denis.poropat@smarteh.si>
parents: 2193
diff changeset
   100
            user = self.config.extra["ID"]
1893
971de876b1af WAMP runtime : changes from dporopat and agregorcic, adding CRA (-s) and changed way to load WAMP conf (-c)
Edouard Tisserant
parents: 1892
diff changeset
   101
            self.join(u"Automation", [u"wampcra"], user)
971de876b1af WAMP runtime : changes from dporopat and agregorcic, adding CRA (-s) and changed way to load WAMP conf (-c)
Edouard Tisserant
parents: 1892
diff changeset
   102
        else:
971de876b1af WAMP runtime : changes from dporopat and agregorcic, adding CRA (-s) and changed way to load WAMP conf (-c)
Edouard Tisserant
parents: 1892
diff changeset
   103
            self.join(u"Automation")
971de876b1af WAMP runtime : changes from dporopat and agregorcic, adding CRA (-s) and changed way to load WAMP conf (-c)
Edouard Tisserant
parents: 1892
diff changeset
   104
971de876b1af WAMP runtime : changes from dporopat and agregorcic, adding CRA (-s) and changed way to load WAMP conf (-c)
Edouard Tisserant
parents: 1892
diff changeset
   105
    def onChallenge(self, challenge):
971de876b1af WAMP runtime : changes from dporopat and agregorcic, adding CRA (-s) and changed way to load WAMP conf (-c)
Edouard Tisserant
parents: 1892
diff changeset
   106
        if challenge.method == u"wampcra":
2218
7a4deed94eb2 Fixed a bit of everything in WAMP, and added web settings for that same extension.
Edouard Tisserant
parents: 2215
diff changeset
   107
            if "secret" in self.config.extra:
7a4deed94eb2 Fixed a bit of everything in WAMP, and added web settings for that same extension.
Edouard Tisserant
parents: 2215
diff changeset
   108
                secret = self.config.extra["secret"].encode('utf8')
2248
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   109
                signature = auth.compute_wcs(
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   110
                    secret, challenge.extra['challenge'].encode('utf8'))
2218
7a4deed94eb2 Fixed a bit of everything in WAMP, and added web settings for that same extension.
Edouard Tisserant
parents: 2215
diff changeset
   111
                return signature.decode("ascii")
7a4deed94eb2 Fixed a bit of everything in WAMP, and added web settings for that same extension.
Edouard Tisserant
parents: 2215
diff changeset
   112
            else:
7a4deed94eb2 Fixed a bit of everything in WAMP, and added web settings for that same extension.
Edouard Tisserant
parents: 2215
diff changeset
   113
                raise Exception("no secret given for authentication")
1893
971de876b1af WAMP runtime : changes from dporopat and agregorcic, adding CRA (-s) and changed way to load WAMP conf (-c)
Edouard Tisserant
parents: 1892
diff changeset
   114
        else:
2248
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   115
            raise Exception(
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   116
                "don't know how to handle authmethod {}".format(challenge.method))
1440
e8daabf2c438 Runtime : Added PLCobject methods registring. IDE : Added WAMP connector. Still need some fixes
Edouard Tisserant
parents: 1439
diff changeset
   117
e8daabf2c438 Runtime : Added PLCobject methods registring. IDE : Added WAMP connector. Still need some fixes
Edouard Tisserant
parents: 1439
diff changeset
   118
    @inlineCallbacks
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:
diff changeset
   119
    def onJoin(self, details):
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:
diff changeset
   120
        global _WampSession
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:
diff changeset
   121
        _WampSession = self
1901
e8cf68d69447 Enforced check_source.sh pep8 and pylint rules.
Edouard Tisserant
parents: 1900
diff changeset
   122
        ID = self.config.extra["ID"]
2206
1e397afc36a9 #2486 ExposedCalls with register options as a dictionary.
dporopat <denis.poropat@smarteh.si>
parents: 2205
diff changeset
   123
1e397afc36a9 #2486 ExposedCalls with register options as a dictionary.
dporopat <denis.poropat@smarteh.si>
parents: 2205
diff changeset
   124
        for name, kwargs in ExposedCalls:
1e397afc36a9 #2486 ExposedCalls with register options as a dictionary.
dporopat <denis.poropat@smarteh.si>
parents: 2205
diff changeset
   125
            try:
1e397afc36a9 #2486 ExposedCalls with register options as a dictionary.
dporopat <denis.poropat@smarteh.si>
parents: 2205
diff changeset
   126
                registerOptions = types.RegisterOptions(**kwargs)
1e397afc36a9 #2486 ExposedCalls with register options as a dictionary.
dporopat <denis.poropat@smarteh.si>
parents: 2205
diff changeset
   127
            except TypeError as e:
1e397afc36a9 #2486 ExposedCalls with register options as a dictionary.
dporopat <denis.poropat@smarteh.si>
parents: 2205
diff changeset
   128
                registerOptions = None
1e397afc36a9 #2486 ExposedCalls with register options as a dictionary.
dporopat <denis.poropat@smarteh.si>
parents: 2205
diff changeset
   129
                print(_("TypeError register option: {}".format(e)))
1e397afc36a9 #2486 ExposedCalls with register options as a dictionary.
dporopat <denis.poropat@smarteh.si>
parents: 2205
diff changeset
   130
2197
bec80ff35282 #2486 Unnecessary variable removed.
dporopat <denis.poropat@smarteh.si>
parents: 2196
diff changeset
   131
            yield self.register(GetCallee(name), u'.'.join((ID, name)), registerOptions)
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:
diff changeset
   132
1446
4963e3816641 Split runtime's twisted modules import and setup to ease runtime extensions hotpatching
Edouard Tisserant
parents: 1445
diff changeset
   133
        for name in SubscribedEvents:
1898
d2dbdeffc426 runtime/Wamp : adapt to unicode being enforced in latest crossbar API. Updated some documentation, to explain why there is unused definitions like SubscribedEvents or DoOnJoin.
Edouard Tisserant
parents: 1894
diff changeset
   134
            yield self.subscribe(GetCallee(name), unicode(name))
1446
4963e3816641 Split runtime's twisted modules import and setup to ease runtime extensions hotpatching
Edouard Tisserant
parents: 1445
diff changeset
   135
4963e3816641 Split runtime's twisted modules import and setup to ease runtime extensions hotpatching
Edouard Tisserant
parents: 1445
diff changeset
   136
        for func in DoOnJoin:
4963e3816641 Split runtime's twisted modules import and setup to ease runtime extensions hotpatching
Edouard Tisserant
parents: 1445
diff changeset
   137
            yield func(self)
4963e3816641 Split runtime's twisted modules import and setup to ease runtime extensions hotpatching
Edouard Tisserant
parents: 1445
diff changeset
   138
2194
35d6b9321ffd #2486 Updated wamp test project to work with the latest Crossbar version.
dporopat <denis.poropat@smarteh.si>
parents: 2193
diff changeset
   139
        print(_('WAMP session joined (%s) by:' % time.ctime()), ID)
35d6b9321ffd #2486 Updated wamp test project to work with the latest Crossbar version.
dporopat <denis.poropat@smarteh.si>
parents: 2193
diff changeset
   140
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:
diff changeset
   141
    def onLeave(self, details):
2201
4e511f5aad19 #2486 Added global TransportFactory, needed in WebInterface reconnecting function.
dporopat <denis.poropat@smarteh.si>
parents: 2199
diff changeset
   142
        global _WampSession, _transportFactory
4e511f5aad19 #2486 Added global TransportFactory, needed in WebInterface reconnecting function.
dporopat <denis.poropat@smarteh.si>
parents: 2199
diff changeset
   143
        super(WampSession, self).onLeave(details)
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:
diff changeset
   144
        _WampSession = None
2201
4e511f5aad19 #2486 Added global TransportFactory, needed in WebInterface reconnecting function.
dporopat <denis.poropat@smarteh.si>
parents: 2199
diff changeset
   145
        _transportFactory = None
1890
916099cb8d22 non significant print syntax change. ready for py3.
Edouard Tisserant
parents: 1881
diff changeset
   146
        print(_('WAMP session left'))
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:
diff changeset
   147
1736
7e61baa047f0 clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1667
diff changeset
   148
1441
826730e60407 Added auto-reconnect for runtime. Fixed Beremiz closing problem caused by remaining twisted reactor thread in IDE.
Edouard Tisserant
parents: 1440
diff changeset
   149
class ReconnectingWampWebSocketClientFactory(WampWebSocketClientFactory, ReconnectingClientFactory):
2248
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   150
2195
2cef75d036c2 #2486 Added option to use websocket protocol options.
dporopat <denis.poropat@smarteh.si>
parents: 2194
diff changeset
   151
    def __init__(self, config, *args, **kwargs):
2201
4e511f5aad19 #2486 Added global TransportFactory, needed in WebInterface reconnecting function.
dporopat <denis.poropat@smarteh.si>
parents: 2199
diff changeset
   152
        global _transportFactory
2195
2cef75d036c2 #2486 Added option to use websocket protocol options.
dporopat <denis.poropat@smarteh.si>
parents: 2194
diff changeset
   153
        WampWebSocketClientFactory.__init__(self, *args, **kwargs)
2cef75d036c2 #2486 Added option to use websocket protocol options.
dporopat <denis.poropat@smarteh.si>
parents: 2194
diff changeset
   154
2207
c27b820cb96b #2486 Exception if custom protocol options are wrong.
dporopat <denis.poropat@smarteh.si>
parents: 2206
diff changeset
   155
        try:
c27b820cb96b #2486 Exception if custom protocol options are wrong.
dporopat <denis.poropat@smarteh.si>
parents: 2206
diff changeset
   156
            protocolOptions = config.extra.get('protocolOptions', None)
c27b820cb96b #2486 Exception if custom protocol options are wrong.
dporopat <denis.poropat@smarteh.si>
parents: 2206
diff changeset
   157
            if protocolOptions:
c27b820cb96b #2486 Exception if custom protocol options are wrong.
dporopat <denis.poropat@smarteh.si>
parents: 2206
diff changeset
   158
                self.setProtocolOptions(**protocolOptions)
c27b820cb96b #2486 Exception if custom protocol options are wrong.
dporopat <denis.poropat@smarteh.si>
parents: 2206
diff changeset
   159
            _transportFactory = self
2418
5587c490a070 Use python 3 compatible exception syntax everywhere
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2287
diff changeset
   160
        except Exception as e:
2207
c27b820cb96b #2486 Exception if custom protocol options are wrong.
dporopat <denis.poropat@smarteh.si>
parents: 2206
diff changeset
   161
            print(_("Custom protocol options failed :"), e)
c27b820cb96b #2486 Exception if custom protocol options are wrong.
dporopat <denis.poropat@smarteh.si>
parents: 2206
diff changeset
   162
            _transportFactory = None
2195
2cef75d036c2 #2486 Added option to use websocket protocol options.
dporopat <denis.poropat@smarteh.si>
parents: 2194
diff changeset
   163
2193
259df9ecf9ca #2486 Reset delay function added. It resets the delay and the retry counter on reconnect.
dporopat <denis.poropat@smarteh.si>
parents: 1955
diff changeset
   164
    def buildProtocol(self, addr):
259df9ecf9ca #2486 Reset delay function added. It resets the delay and the retry counter on reconnect.
dporopat <denis.poropat@smarteh.si>
parents: 1955
diff changeset
   165
        self.resetDelay()
259df9ecf9ca #2486 Reset delay function added. It resets the delay and the retry counter on reconnect.
dporopat <denis.poropat@smarteh.si>
parents: 1955
diff changeset
   166
        return ReconnectingClientFactory.buildProtocol(self, addr)
259df9ecf9ca #2486 Reset delay function added. It resets the delay and the retry counter on reconnect.
dporopat <denis.poropat@smarteh.si>
parents: 1955
diff changeset
   167
1441
826730e60407 Added auto-reconnect for runtime. Fixed Beremiz closing problem caused by remaining twisted reactor thread in IDE.
Edouard Tisserant
parents: 1440
diff changeset
   168
    def clientConnectionFailed(self, connector, reason):
2201
4e511f5aad19 #2486 Added global TransportFactory, needed in WebInterface reconnecting function.
dporopat <denis.poropat@smarteh.si>
parents: 2199
diff changeset
   169
        if self.continueTrying:
2248
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   170
            print(_("WAMP Client connection failed (%s) .. retrying ..") %
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   171
                  time.ctime())
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   172
            super(ReconnectingWampWebSocketClientFactory,
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   173
                  self).clientConnectionFailed(connector, reason)
2201
4e511f5aad19 #2486 Added global TransportFactory, needed in WebInterface reconnecting function.
dporopat <denis.poropat@smarteh.si>
parents: 2199
diff changeset
   174
        else:
4e511f5aad19 #2486 Added global TransportFactory, needed in WebInterface reconnecting function.
dporopat <denis.poropat@smarteh.si>
parents: 2199
diff changeset
   175
            del connector
1751
c28db6f7616b clean-up: fix PEP8 E301 expected 1 blank line, found 0
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1748
diff changeset
   176
1441
826730e60407 Added auto-reconnect for runtime. Fixed Beremiz closing problem caused by remaining twisted reactor thread in IDE.
Edouard Tisserant
parents: 1440
diff changeset
   177
    def clientConnectionLost(self, connector, reason):
2201
4e511f5aad19 #2486 Added global TransportFactory, needed in WebInterface reconnecting function.
dporopat <denis.poropat@smarteh.si>
parents: 2199
diff changeset
   178
        if self.continueTrying:
2248
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   179
            print(_("WAMP Client connection lost (%s) .. retrying ..") %
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   180
                  time.ctime())
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   181
            super(ReconnectingWampWebSocketClientFactory,
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   182
                  self).clientConnectionFailed(connector, reason)
2201
4e511f5aad19 #2486 Added global TransportFactory, needed in WebInterface reconnecting function.
dporopat <denis.poropat@smarteh.si>
parents: 2199
diff changeset
   183
        else:
4e511f5aad19 #2486 Added global TransportFactory, needed in WebInterface reconnecting function.
dporopat <denis.poropat@smarteh.si>
parents: 2199
diff changeset
   184
            del connector
1441
826730e60407 Added auto-reconnect for runtime. Fixed Beremiz closing problem caused by remaining twisted reactor thread in IDE.
Edouard Tisserant
parents: 1440
diff changeset
   185
1736
7e61baa047f0 clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1667
diff changeset
   186
2220
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   187
def CheckConfiguration(WampClientConf):
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   188
    url = WampClientConf["url"]
2218
7a4deed94eb2 Fixed a bit of everything in WAMP, and added web settings for that same extension.
Edouard Tisserant
parents: 2215
diff changeset
   189
    if not IsCorrectUri(url):
7a4deed94eb2 Fixed a bit of everything in WAMP, and added web settings for that same extension.
Edouard Tisserant
parents: 2215
diff changeset
   190
        raise annotate.ValidateError(
2248
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   191
            {"url": "Invalid URL: {}".format(url)},
2223
909216419e45 Fixed small typo in error message.
Edouard Tisserant
parents: 2221
diff changeset
   192
            _("WAMP configuration error:"))
2218
7a4deed94eb2 Fixed a bit of everything in WAMP, and added web settings for that same extension.
Edouard Tisserant
parents: 2215
diff changeset
   193
2248
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   194
2212
cf1718962567 WampClient : Simplified, removed dead code, use exception for handling failures and misconfiguration, check existence of mandatory parameters.
Edouard Tisserant
parents: 2207
diff changeset
   195
def GetConfiguration():
2218
7a4deed94eb2 Fixed a bit of everything in WAMP, and added web settings for that same extension.
Edouard Tisserant
parents: 2215
diff changeset
   196
    global lastKnownConfig
7a4deed94eb2 Fixed a bit of everything in WAMP, and added web settings for that same extension.
Edouard Tisserant
parents: 2215
diff changeset
   197
2220
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   198
    if os.path.exists(_WampConf):
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   199
        WampClientConf = json.load(open(_WampConf))
2248
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   200
    else:
2221
e03f7649bfb3 WAMP: now config and secret given in project files always override those given in commandline. Also made extensions web customisations happen before registration of web interface.
Edouard Tisserant
parents: 2220
diff changeset
   201
        WampClientConf = defaultWampConfig.copy()
2220
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   202
2212
cf1718962567 WampClient : Simplified, removed dead code, use exception for handling failures and misconfiguration, check existence of mandatory parameters.
Edouard Tisserant
parents: 2207
diff changeset
   203
    for itemName in mandatoryConfigItems:
2248
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   204
        if WampClientConf.get(itemName, None) is None:
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   205
            raise Exception(
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   206
                _("WAMP configuration error : missing '{}' parameter.").format(itemName))
2212
cf1718962567 WampClient : Simplified, removed dead code, use exception for handling failures and misconfiguration, check existence of mandatory parameters.
Edouard Tisserant
parents: 2207
diff changeset
   207
2220
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   208
    CheckConfiguration(WampClientConf)
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   209
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   210
    lastKnownConfig = WampClientConf.copy()
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   211
    return WampClientConf
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   212
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   213
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   214
def SetWampSecret(wampSecret):
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   215
    with open(os.path.realpath(_WampSecret), 'w') as f:
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   216
        f.write(wampSecret)
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   217
2248
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   218
2220
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   219
def SetConfiguration(WampClientConf):
2218
7a4deed94eb2 Fixed a bit of everything in WAMP, and added web settings for that same extension.
Edouard Tisserant
parents: 2215
diff changeset
   220
    global lastKnownConfig
7a4deed94eb2 Fixed a bit of everything in WAMP, and added web settings for that same extension.
Edouard Tisserant
parents: 2215
diff changeset
   221
2220
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   222
    CheckConfiguration(WampClientConf)
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   223
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   224
    lastKnownConfig = WampClientConf.copy()
2248
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   225
2218
7a4deed94eb2 Fixed a bit of everything in WAMP, and added web settings for that same extension.
Edouard Tisserant
parents: 2215
diff changeset
   226
    with open(os.path.realpath(_WampConf), 'w') as f:
2220
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   227
        json.dump(WampClientConf, f, sort_keys=True, indent=4)
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   228
    if 'active' in WampClientConf and WampClientConf['active']:
2218
7a4deed94eb2 Fixed a bit of everything in WAMP, and added web settings for that same extension.
Edouard Tisserant
parents: 2215
diff changeset
   229
        if _transportFactory and _WampSession:
2212
cf1718962567 WampClient : Simplified, removed dead code, use exception for handling failures and misconfiguration, check existence of mandatory parameters.
Edouard Tisserant
parents: 2207
diff changeset
   230
            StopReconnectWampClient()
2218
7a4deed94eb2 Fixed a bit of everything in WAMP, and added web settings for that same extension.
Edouard Tisserant
parents: 2215
diff changeset
   231
        StartReconnectWampClient()
7a4deed94eb2 Fixed a bit of everything in WAMP, and added web settings for that same extension.
Edouard Tisserant
parents: 2215
diff changeset
   232
    else:
7a4deed94eb2 Fixed a bit of everything in WAMP, and added web settings for that same extension.
Edouard Tisserant
parents: 2215
diff changeset
   233
        StopReconnectWampClient()
7a4deed94eb2 Fixed a bit of everything in WAMP, and added web settings for that same extension.
Edouard Tisserant
parents: 2215
diff changeset
   234
2220
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   235
    return WampClientConf
1901
e8cf68d69447 Enforced check_source.sh pep8 and pylint rules.
Edouard Tisserant
parents: 1900
diff changeset
   236
2212
cf1718962567 WampClient : Simplified, removed dead code, use exception for handling failures and misconfiguration, check existence of mandatory parameters.
Edouard Tisserant
parents: 2207
diff changeset
   237
1893
971de876b1af WAMP runtime : changes from dporopat and agregorcic, adding CRA (-s) and changed way to load WAMP conf (-c)
Edouard Tisserant
parents: 1892
diff changeset
   238
def LoadWampSecret(secretfname):
2218
7a4deed94eb2 Fixed a bit of everything in WAMP, and added web settings for that same extension.
Edouard Tisserant
parents: 2215
diff changeset
   239
    WSClientWampSecret = open(secretfname, 'rb').read()
2248
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   240
    if len(WSClientWampSecret) == 0:
2218
7a4deed94eb2 Fixed a bit of everything in WAMP, and added web settings for that same extension.
Edouard Tisserant
parents: 2215
diff changeset
   241
        raise Exception(_("WAMP secret empty"))
7a4deed94eb2 Fixed a bit of everything in WAMP, and added web settings for that same extension.
Edouard Tisserant
parents: 2215
diff changeset
   242
    return WSClientWampSecret
1446
4963e3816641 Split runtime's twisted modules import and setup to ease runtime extensions hotpatching
Edouard Tisserant
parents: 1445
diff changeset
   243
1736
7e61baa047f0 clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1667
diff changeset
   244
2201
4e511f5aad19 #2486 Added global TransportFactory, needed in WebInterface reconnecting function.
dporopat <denis.poropat@smarteh.si>
parents: 2199
diff changeset
   245
def IsCorrectUri(uri):
2218
7a4deed94eb2 Fixed a bit of everything in WAMP, and added web settings for that same extension.
Edouard Tisserant
parents: 2215
diff changeset
   246
    return re.match(r'wss?://[^\s?:#-]+(:[0-9]+)?(/[^\s]*)?$', uri) is not None
2201
4e511f5aad19 #2486 Added global TransportFactory, needed in WebInterface reconnecting function.
dporopat <denis.poropat@smarteh.si>
parents: 2199
diff changeset
   247
4e511f5aad19 #2486 Added global TransportFactory, needed in WebInterface reconnecting function.
dporopat <denis.poropat@smarteh.si>
parents: 2199
diff changeset
   248
2212
cf1718962567 WampClient : Simplified, removed dead code, use exception for handling failures and misconfiguration, check existence of mandatory parameters.
Edouard Tisserant
parents: 2207
diff changeset
   249
def RegisterWampClient(wampconf=None, wampsecret=None):
cf1718962567 WampClient : Simplified, removed dead code, use exception for handling failures and misconfiguration, check existence of mandatory parameters.
Edouard Tisserant
parents: 2207
diff changeset
   250
    global _WampConf, _WampSecret
2220
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   251
    _WampConfDefault = os.path.join(WorkingDir, "wampconf.json")
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   252
    _WampSecretDefault = os.path.join(WorkingDir, "wamp.secret")
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   253
2221
e03f7649bfb3 WAMP: now config and secret given in project files always override those given in commandline. Also made extensions web customisations happen before registration of web interface.
Edouard Tisserant
parents: 2220
diff changeset
   254
    # set config file path only if not already set
e03f7649bfb3 WAMP: now config and secret given in project files always override those given in commandline. Also made extensions web customisations happen before registration of web interface.
Edouard Tisserant
parents: 2220
diff changeset
   255
    if _WampConf is None:
e03f7649bfb3 WAMP: now config and secret given in project files always override those given in commandline. Also made extensions web customisations happen before registration of web interface.
Edouard Tisserant
parents: 2220
diff changeset
   256
        # default project's wampconf has precedance over commandline given
e03f7649bfb3 WAMP: now config and secret given in project files always override those given in commandline. Also made extensions web customisations happen before registration of web interface.
Edouard Tisserant
parents: 2220
diff changeset
   257
        if os.path.exists(_WampConfDefault) or wampconf is None:
e03f7649bfb3 WAMP: now config and secret given in project files always override those given in commandline. Also made extensions web customisations happen before registration of web interface.
Edouard Tisserant
parents: 2220
diff changeset
   258
            _WampConf = _WampConfDefault
e03f7649bfb3 WAMP: now config and secret given in project files always override those given in commandline. Also made extensions web customisations happen before registration of web interface.
Edouard Tisserant
parents: 2220
diff changeset
   259
        else:
e03f7649bfb3 WAMP: now config and secret given in project files always override those given in commandline. Also made extensions web customisations happen before registration of web interface.
Edouard Tisserant
parents: 2220
diff changeset
   260
            _WampConf = wampconf
e03f7649bfb3 WAMP: now config and secret given in project files always override those given in commandline. Also made extensions web customisations happen before registration of web interface.
Edouard Tisserant
parents: 2220
diff changeset
   261
e03f7649bfb3 WAMP: now config and secret given in project files always override those given in commandline. Also made extensions web customisations happen before registration of web interface.
Edouard Tisserant
parents: 2220
diff changeset
   262
    WampClientConf = GetConfiguration()
e03f7649bfb3 WAMP: now config and secret given in project files always override those given in commandline. Also made extensions web customisations happen before registration of web interface.
Edouard Tisserant
parents: 2220
diff changeset
   263
e03f7649bfb3 WAMP: now config and secret given in project files always override those given in commandline. Also made extensions web customisations happen before registration of web interface.
Edouard Tisserant
parents: 2220
diff changeset
   264
    # set secret file path only if not already set
e03f7649bfb3 WAMP: now config and secret given in project files always override those given in commandline. Also made extensions web customisations happen before registration of web interface.
Edouard Tisserant
parents: 2220
diff changeset
   265
    if _WampSecret is None:
2248
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   266
        # default project's wamp secret also
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   267
        # has precedance over commandline given
2221
e03f7649bfb3 WAMP: now config and secret given in project files always override those given in commandline. Also made extensions web customisations happen before registration of web interface.
Edouard Tisserant
parents: 2220
diff changeset
   268
        if os.path.exists(_WampSecretDefault):
e03f7649bfb3 WAMP: now config and secret given in project files always override those given in commandline. Also made extensions web customisations happen before registration of web interface.
Edouard Tisserant
parents: 2220
diff changeset
   269
            _WampSecret = _WampSecretDefault
e03f7649bfb3 WAMP: now config and secret given in project files always override those given in commandline. Also made extensions web customisations happen before registration of web interface.
Edouard Tisserant
parents: 2220
diff changeset
   270
        else:
e03f7649bfb3 WAMP: now config and secret given in project files always override those given in commandline. Also made extensions web customisations happen before registration of web interface.
Edouard Tisserant
parents: 2220
diff changeset
   271
            _WampSecret = wampsecret
e03f7649bfb3 WAMP: now config and secret given in project files always override those given in commandline. Also made extensions web customisations happen before registration of web interface.
Edouard Tisserant
parents: 2220
diff changeset
   272
e03f7649bfb3 WAMP: now config and secret given in project files always override those given in commandline. Also made extensions web customisations happen before registration of web interface.
Edouard Tisserant
parents: 2220
diff changeset
   273
    if _WampSecret is not None:
e03f7649bfb3 WAMP: now config and secret given in project files always override those given in commandline. Also made extensions web customisations happen before registration of web interface.
Edouard Tisserant
parents: 2220
diff changeset
   274
        WampClientConf["secret"] = LoadWampSecret(_WampSecret)
2248
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   275
    else:
2221
e03f7649bfb3 WAMP: now config and secret given in project files always override those given in commandline. Also made extensions web customisations happen before registration of web interface.
Edouard Tisserant
parents: 2220
diff changeset
   276
        print(_("WAMP authentication has no secret configured"))
2220
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   277
        _WampSecret = _WampSecretDefault
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   278
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   279
    if not WampClientConf["active"]:
2212
cf1718962567 WampClient : Simplified, removed dead code, use exception for handling failures and misconfiguration, check existence of mandatory parameters.
Edouard Tisserant
parents: 2207
diff changeset
   280
        print(_("WAMP deactivated in configuration"))
cf1718962567 WampClient : Simplified, removed dead code, use exception for handling failures and misconfiguration, check existence of mandatory parameters.
Edouard Tisserant
parents: 2207
diff changeset
   281
        return
cf1718962567 WampClient : Simplified, removed dead code, use exception for handling failures and misconfiguration, check existence of mandatory parameters.
Edouard Tisserant
parents: 2207
diff changeset
   282
1440
e8daabf2c438 Runtime : Added PLCobject methods registring. IDE : Added WAMP connector. Still need some fixes
Edouard Tisserant
parents: 1439
diff changeset
   283
    # create a WAMP application session factory
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:
diff changeset
   284
    component_config = types.ComponentConfig(
2220
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   285
        realm=WampClientConf["realm"],
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   286
        extra=WampClientConf)
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:
diff changeset
   287
    session_factory = wamp.ApplicationSessionFactory(
1744
69dfdb26f600 clean-up: fix PEP8 E251 unexpected spaces around keyword / parameter equals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1740
diff changeset
   288
        config=component_config)
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:
diff changeset
   289
    session_factory.session = WampSession
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:
diff changeset
   290
1440
e8daabf2c438 Runtime : Added PLCobject methods registring. IDE : Added WAMP connector. Still need some fixes
Edouard Tisserant
parents: 1439
diff changeset
   291
    # create a WAMP-over-WebSocket transport client factory
2207
c27b820cb96b #2486 Exception if custom protocol options are wrong.
dporopat <denis.poropat@smarteh.si>
parents: 2206
diff changeset
   292
    ReconnectingWampWebSocketClientFactory(
2195
2cef75d036c2 #2486 Added option to use websocket protocol options.
dporopat <denis.poropat@smarteh.si>
parents: 2194
diff changeset
   293
        component_config,
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:
diff changeset
   294
        session_factory,
2220
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   295
        url=WampClientConf["url"],
1893
971de876b1af WAMP runtime : changes from dporopat and agregorcic, adding CRA (-s) and changed way to load WAMP conf (-c)
Edouard Tisserant
parents: 1892
diff changeset
   296
        serializers=[MsgPackSerializer()])
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:
diff changeset
   297
1440
e8daabf2c438 Runtime : Added PLCobject methods registring. IDE : Added WAMP connector. Still need some fixes
Edouard Tisserant
parents: 1439
diff changeset
   298
    # start the client from a Twisted endpoint
2207
c27b820cb96b #2486 Exception if custom protocol options are wrong.
dporopat <denis.poropat@smarteh.si>
parents: 2206
diff changeset
   299
    if _transportFactory:
2248
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   300
        connectWS(_transportFactory)
2220
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   301
        print(_("WAMP client connecting to :"), WampClientConf["url"])
2207
c27b820cb96b #2486 Exception if custom protocol options are wrong.
dporopat <denis.poropat@smarteh.si>
parents: 2206
diff changeset
   302
        return True
c27b820cb96b #2486 Exception if custom protocol options are wrong.
dporopat <denis.poropat@smarteh.si>
parents: 2206
diff changeset
   303
    else:
2220
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   304
        print(_("WAMP client can not connect to :"), WampClientConf["url"])
2207
c27b820cb96b #2486 Exception if custom protocol options are wrong.
dporopat <denis.poropat@smarteh.si>
parents: 2206
diff changeset
   305
        return False
2204
25dafeb98b55 #2486 Reconnect funtion in SaveWampClientConf function.
dporopat <denis.poropat@smarteh.si>
parents: 2203
diff changeset
   306
2201
4e511f5aad19 #2486 Added global TransportFactory, needed in WebInterface reconnecting function.
dporopat <denis.poropat@smarteh.si>
parents: 2199
diff changeset
   307
2203
c8a32ad27c0a #2486 Modified reconnect function. Added 'active' parameter to wampconf.json file.
dporopat <denis.poropat@smarteh.si>
parents: 2202
diff changeset
   308
def StopReconnectWampClient():
2248
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   309
    if _transportFactory is not None:
2218
7a4deed94eb2 Fixed a bit of everything in WAMP, and added web settings for that same extension.
Edouard Tisserant
parents: 2215
diff changeset
   310
        _transportFactory.stopTrying()
2248
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   311
    if _WampSession is not None:
2218
7a4deed94eb2 Fixed a bit of everything in WAMP, and added web settings for that same extension.
Edouard Tisserant
parents: 2215
diff changeset
   312
        _WampSession.leave()
2203
c8a32ad27c0a #2486 Modified reconnect function. Added 'active' parameter to wampconf.json file.
dporopat <denis.poropat@smarteh.si>
parents: 2202
diff changeset
   313
2204
25dafeb98b55 #2486 Reconnect funtion in SaveWampClientConf function.
dporopat <denis.poropat@smarteh.si>
parents: 2203
diff changeset
   314
2203
c8a32ad27c0a #2486 Modified reconnect function. Added 'active' parameter to wampconf.json file.
dporopat <denis.poropat@smarteh.si>
parents: 2202
diff changeset
   315
def StartReconnectWampClient():
c8a32ad27c0a #2486 Modified reconnect function. Added 'active' parameter to wampconf.json file.
dporopat <denis.poropat@smarteh.si>
parents: 2202
diff changeset
   316
    if _WampSession:
c8a32ad27c0a #2486 Modified reconnect function. Added 'active' parameter to wampconf.json file.
dporopat <denis.poropat@smarteh.si>
parents: 2202
diff changeset
   317
        # do reconnect
2202
237c1a2de1c8 #2486 Adding reconnect funtion to WampClient. Global TransportFactory not needed anymore.
dporopat <denis.poropat@smarteh.si>
parents: 2201
diff changeset
   318
        _WampSession.disconnect()
237c1a2de1c8 #2486 Adding reconnect funtion to WampClient. Global TransportFactory not needed anymore.
dporopat <denis.poropat@smarteh.si>
parents: 2201
diff changeset
   319
        return True
2204
25dafeb98b55 #2486 Reconnect funtion in SaveWampClientConf function.
dporopat <denis.poropat@smarteh.si>
parents: 2203
diff changeset
   320
    else:
2203
c8a32ad27c0a #2486 Modified reconnect function. Added 'active' parameter to wampconf.json file.
dporopat <denis.poropat@smarteh.si>
parents: 2202
diff changeset
   321
        # do connect
2202
237c1a2de1c8 #2486 Adding reconnect funtion to WampClient. Global TransportFactory not needed anymore.
dporopat <denis.poropat@smarteh.si>
parents: 2201
diff changeset
   322
        RegisterWampClient()
237c1a2de1c8 #2486 Adding reconnect funtion to WampClient. Global TransportFactory not needed anymore.
dporopat <denis.poropat@smarteh.si>
parents: 2201
diff changeset
   323
        return True
2203
c8a32ad27c0a #2486 Modified reconnect function. Added 'active' parameter to wampconf.json file.
dporopat <denis.poropat@smarteh.si>
parents: 2202
diff changeset
   324
1736
7e61baa047f0 clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1667
diff changeset
   325
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:
diff changeset
   326
def GetSession():
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:
diff changeset
   327
    return _WampSession
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:
diff changeset
   328
2248
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   329
2218
7a4deed94eb2 Fixed a bit of everything in WAMP, and added web settings for that same extension.
Edouard Tisserant
parents: 2215
diff changeset
   330
def getWampStatus():
2248
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   331
    if _transportFactory is not None:
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   332
        if _WampSession is not None:
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   333
            if _WampSession.is_attached():
2218
7a4deed94eb2 Fixed a bit of everything in WAMP, and added web settings for that same extension.
Edouard Tisserant
parents: 2215
diff changeset
   334
                return "Attached"
7a4deed94eb2 Fixed a bit of everything in WAMP, and added web settings for that same extension.
Edouard Tisserant
parents: 2215
diff changeset
   335
            return "Established"
7a4deed94eb2 Fixed a bit of everything in WAMP, and added web settings for that same extension.
Edouard Tisserant
parents: 2215
diff changeset
   336
        return "Connecting"
7a4deed94eb2 Fixed a bit of everything in WAMP, and added web settings for that same extension.
Edouard Tisserant
parents: 2215
diff changeset
   337
    return "Disconnected"
2202
237c1a2de1c8 #2486 Adding reconnect funtion to WampClient. Global TransportFactory not needed anymore.
dporopat <denis.poropat@smarteh.si>
parents: 2201
diff changeset
   338
2204
25dafeb98b55 #2486 Reconnect funtion in SaveWampClientConf function.
dporopat <denis.poropat@smarteh.si>
parents: 2203
diff changeset
   339
2212
cf1718962567 WampClient : Simplified, removed dead code, use exception for handling failures and misconfiguration, check existence of mandatory parameters.
Edouard Tisserant
parents: 2207
diff changeset
   340
def SetServer(pysrv):
2287
f09f31602ba6 Fix SetServer method in WAMP
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 2286
diff changeset
   341
    global _PySrv
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:
diff changeset
   342
    _PySrv = pysrv
2218
7a4deed94eb2 Fixed a bit of everything in WAMP, and added web settings for that same extension.
Edouard Tisserant
parents: 2215
diff changeset
   343
7a4deed94eb2 Fixed a bit of everything in WAMP, and added web settings for that same extension.
Edouard Tisserant
parents: 2215
diff changeset
   344
2248
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   345
# WEB CONFIGURATION INTERFACE
2220
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   346
WAMP_SECRET_URL = "secret"
2218
7a4deed94eb2 Fixed a bit of everything in WAMP, and added web settings for that same extension.
Edouard Tisserant
parents: 2215
diff changeset
   347
webExposedConfigItems = ['active', 'url', 'ID']
7a4deed94eb2 Fixed a bit of everything in WAMP, and added web settings for that same extension.
Edouard Tisserant
parents: 2215
diff changeset
   348
2248
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   349
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   350
def wampConfigDefault(ctx, argument):
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   351
    if lastKnownConfig is not None:
2218
7a4deed94eb2 Fixed a bit of everything in WAMP, and added web settings for that same extension.
Edouard Tisserant
parents: 2215
diff changeset
   352
        return lastKnownConfig.get(argument.name, None)
7a4deed94eb2 Fixed a bit of everything in WAMP, and added web settings for that same extension.
Edouard Tisserant
parents: 2215
diff changeset
   353
2248
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   354
2218
7a4deed94eb2 Fixed a bit of everything in WAMP, and added web settings for that same extension.
Edouard Tisserant
parents: 2215
diff changeset
   355
def wampConfig(**kwargs):
2220
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   356
    secretfile_field = kwargs["secretfile"]
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   357
    if secretfile_field is not None:
2221
e03f7649bfb3 WAMP: now config and secret given in project files always override those given in commandline. Also made extensions web customisations happen before registration of web interface.
Edouard Tisserant
parents: 2220
diff changeset
   358
        secretfile = getattr(secretfile_field, "file", None)
e03f7649bfb3 WAMP: now config and secret given in project files always override those given in commandline. Also made extensions web customisations happen before registration of web interface.
Edouard Tisserant
parents: 2220
diff changeset
   359
        if secretfile is not None:
e03f7649bfb3 WAMP: now config and secret given in project files always override those given in commandline. Also made extensions web customisations happen before registration of web interface.
Edouard Tisserant
parents: 2220
diff changeset
   360
            secret = secretfile_field.file.read()
e03f7649bfb3 WAMP: now config and secret given in project files always override those given in commandline. Also made extensions web customisations happen before registration of web interface.
Edouard Tisserant
parents: 2220
diff changeset
   361
            SetWampSecret(secret)
2220
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   362
2218
7a4deed94eb2 Fixed a bit of everything in WAMP, and added web settings for that same extension.
Edouard Tisserant
parents: 2215
diff changeset
   363
    newConfig = lastKnownConfig.copy()
7a4deed94eb2 Fixed a bit of everything in WAMP, and added web settings for that same extension.
Edouard Tisserant
parents: 2215
diff changeset
   364
    for argname in webExposedConfigItems:
2221
e03f7649bfb3 WAMP: now config and secret given in project files always override those given in commandline. Also made extensions web customisations happen before registration of web interface.
Edouard Tisserant
parents: 2220
diff changeset
   365
        arg = kwargs.get(argname, None)
2248
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   366
        if arg is not None:
2221
e03f7649bfb3 WAMP: now config and secret given in project files always override those given in commandline. Also made extensions web customisations happen before registration of web interface.
Edouard Tisserant
parents: 2220
diff changeset
   367
            newConfig[argname] = arg
2218
7a4deed94eb2 Fixed a bit of everything in WAMP, and added web settings for that same extension.
Edouard Tisserant
parents: 2215
diff changeset
   368
7a4deed94eb2 Fixed a bit of everything in WAMP, and added web settings for that same extension.
Edouard Tisserant
parents: 2215
diff changeset
   369
    SetConfiguration(newConfig)
7a4deed94eb2 Fixed a bit of everything in WAMP, and added web settings for that same extension.
Edouard Tisserant
parents: 2215
diff changeset
   370
2248
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   371
2220
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   372
class FileUploadDownload(annotate.FileUpload):
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   373
    pass
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   374
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   375
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   376
class FileUploadDownloadRenderer(webform.FileUploadRenderer):
2248
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   377
2220
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   378
    def input(self, context, slot, data, name, value):
2248
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   379
        # pylint: disable=expression-not-assigned
2220
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   380
        slot[_("Upload:")]
2248
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   381
        slot = webform.FileUploadRenderer.input(
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   382
            self, context, slot, data, name, value)
2220
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   383
        download_url = data.typedValue.getAttribute('download_url')
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   384
        return slot[tags.a(href=download_url)[_("Download")]]
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   385
2260
74205edac761 Some blank lines to make bitbucket's PEP8 2.2.0 happy
Edouard Tisserant
parents: 2248
diff changeset
   386
2248
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   387
registerAdapter(FileUploadDownloadRenderer, FileUploadDownload,
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   388
                formless.iformless.ITypedRenderer)
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   389
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   390
2220
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   391
def getDownloadUrl(ctx, argument):
2248
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   392
    if lastKnownConfig is not None:
2220
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   393
        return url.URL.fromContext(ctx).\
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   394
            child(WAMP_SECRET_URL).\
2248
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   395
            child(lastKnownConfig["ID"] + ".secret")
2220
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   396
2260
74205edac761 Some blank lines to make bitbucket's PEP8 2.2.0 happy
Edouard Tisserant
parents: 2248
diff changeset
   397
2218
7a4deed94eb2 Fixed a bit of everything in WAMP, and added web settings for that same extension.
Edouard Tisserant
parents: 2215
diff changeset
   398
webFormInterface = [
7a4deed94eb2 Fixed a bit of everything in WAMP, and added web settings for that same extension.
Edouard Tisserant
parents: 2215
diff changeset
   399
    ("status",
2248
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   400
     annotate.String(label=_("Current status"),
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   401
                     immutable=True,
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   402
                     default=lambda *k:getWampStatus())),
2218
7a4deed94eb2 Fixed a bit of everything in WAMP, and added web settings for that same extension.
Edouard Tisserant
parents: 2215
diff changeset
   403
    ("ID",
2248
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   404
     annotate.String(label=_("ID"),
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   405
                     default=wampConfigDefault)),
2220
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   406
    ("secretfile",
2248
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   407
     FileUploadDownload(label=_("File containing secret for that ID"),
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   408
                        download_url=getDownloadUrl)),
2218
7a4deed94eb2 Fixed a bit of everything in WAMP, and added web settings for that same extension.
Edouard Tisserant
parents: 2215
diff changeset
   409
    ("active",
2248
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   410
     annotate.Boolean(label=_("Enable WAMP connection"),
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   411
                      default=wampConfigDefault)),
2218
7a4deed94eb2 Fixed a bit of everything in WAMP, and added web settings for that same extension.
Edouard Tisserant
parents: 2215
diff changeset
   412
    ("url",
2248
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   413
     annotate.String(label=_("WAMP Server URL"),
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   414
                     default=wampConfigDefault))]
2218
7a4deed94eb2 Fixed a bit of everything in WAMP, and added web settings for that same extension.
Edouard Tisserant
parents: 2215
diff changeset
   415
7a4deed94eb2 Fixed a bit of everything in WAMP, and added web settings for that same extension.
Edouard Tisserant
parents: 2215
diff changeset
   416
2220
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   417
def deliverWampSecret(ctx, segments):
2248
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   418
    # filename = segments[1].decode('utf-8')
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   419
2221
e03f7649bfb3 WAMP: now config and secret given in project files always override those given in commandline. Also made extensions web customisations happen before registration of web interface.
Edouard Tisserant
parents: 2220
diff changeset
   420
    # FIXME: compare filename to ID+".secret"
e03f7649bfb3 WAMP: now config and secret given in project files always override those given in commandline. Also made extensions web customisations happen before registration of web interface.
Edouard Tisserant
parents: 2220
diff changeset
   421
    # for now all url under /secret returns the secret
e03f7649bfb3 WAMP: now config and secret given in project files always override those given in commandline. Also made extensions web customisations happen before registration of web interface.
Edouard Tisserant
parents: 2220
diff changeset
   422
2248
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   423
    # TODO: make beautifull message in case of exception
2221
e03f7649bfb3 WAMP: now config and secret given in project files always override those given in commandline. Also made extensions web customisations happen before registration of web interface.
Edouard Tisserant
parents: 2220
diff changeset
   424
    # while loading secret (if empty or dont exist)
2220
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   425
    secret = LoadWampSecret(_WampSecret)
2248
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   426
    return static.Data(secret, 'application/octet-stream'), ()
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   427
2220
985f234b0d09 Moved Wamp configuration file selection logic into runtime/wampclient.py. Added Wamp CRA secret file upload and download. Slightly reworked code for config and secret file loading and saving.
Edouard Tisserant
parents: 2218
diff changeset
   428
2221
e03f7649bfb3 WAMP: now config and secret given in project files always override those given in commandline. Also made extensions web customisations happen before registration of web interface.
Edouard Tisserant
parents: 2220
diff changeset
   429
def RegisterWebSettings(NS):
e03f7649bfb3 WAMP: now config and secret given in project files always override those given in commandline. Also made extensions web customisations happen before registration of web interface.
Edouard Tisserant
parents: 2220
diff changeset
   430
    NS.ConfigurableSettings.addExtension(
2248
d9353e440887 autopep8 + hand made fixes on ProjectController.py runtime/WampClient.py wxglade_hmi/wxglade_hmi.py
Edouard Tisserant
parents: 2223
diff changeset
   431
        "wamp",
2221
e03f7649bfb3 WAMP: now config and secret given in project files always override those given in commandline. Also made extensions web customisations happen before registration of web interface.
Edouard Tisserant
parents: 2220
diff changeset
   432
        _("Wamp Settings"),
e03f7649bfb3 WAMP: now config and secret given in project files always override those given in commandline. Also made extensions web customisations happen before registration of web interface.
Edouard Tisserant
parents: 2220
diff changeset
   433
        webFormInterface,
e03f7649bfb3 WAMP: now config and secret given in project files always override those given in commandline. Also made extensions web customisations happen before registration of web interface.
Edouard Tisserant
parents: 2220
diff changeset
   434
        _("Set"),
e03f7649bfb3 WAMP: now config and secret given in project files always override those given in commandline. Also made extensions web customisations happen before registration of web interface.
Edouard Tisserant
parents: 2220
diff changeset
   435
        wampConfig)
e03f7649bfb3 WAMP: now config and secret given in project files always override those given in commandline. Also made extensions web customisations happen before registration of web interface.
Edouard Tisserant
parents: 2220
diff changeset
   436
e03f7649bfb3 WAMP: now config and secret given in project files always override those given in commandline. Also made extensions web customisations happen before registration of web interface.
Edouard Tisserant
parents: 2220
diff changeset
   437
    NS.customSettingsURLs[WAMP_SECRET_URL] = deliverWampSecret