runtime/WampClient.py
author dporopat <denis.poropat@smarteh.si>
Tue, 10 Apr 2018 10:44:46 +0200
branch#2486
changeset 2197 bec80ff35282
parent 2196 9017e830ae70
child 2198 4a5ac299f550
permissions -rw-r--r--
#2486 Unnecessary variable removed.
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
2195
2cef75d036c2 #2486 Added option to use websocket protocol options.
dporopat <denis.poropat@smarteh.si>
parents: 2194
diff changeset
    29
import inspect
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
    30
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
    31
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
    32
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
    33
from autobahn.wamp.serializer import MsgPackSerializer
1834
cd42b426028b fix ungrouped imports from package X
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1832
diff changeset
    34
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
    35
from twisted.internet.protocol import ReconnectingClientFactory
1832
0f1081928d65 fix wrong-import-order. first standard modules are imported, then others
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1826
diff changeset
    36
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
    37
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
    38
_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
    39
_PySrv = 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
    40
1878
fb73a6b6622d fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1850
diff changeset
    41
ExposedCalls = [
fb73a6b6622d fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1850
diff changeset
    42
    "StartPLC",
fb73a6b6622d fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1850
diff changeset
    43
    "StopPLC",
fb73a6b6622d fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1850
diff changeset
    44
    "ForceReload",
fb73a6b6622d fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1850
diff changeset
    45
    "GetPLCstatus",
fb73a6b6622d fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1850
diff changeset
    46
    "NewPLC",
fb73a6b6622d fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1850
diff changeset
    47
    "MatchMD5",
fb73a6b6622d fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1850
diff changeset
    48
    "SetTraceVariablesList",
fb73a6b6622d fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1850
diff changeset
    49
    "GetTraceVariables",
fb73a6b6622d fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1850
diff changeset
    50
    "RemoteExec",
fb73a6b6622d fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1850
diff changeset
    51
    "GetLogMessage",
fb73a6b6622d fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1850
diff changeset
    52
    "ResetLogCount",
fb73a6b6622d fix pylint warning '(bad-continuation) Wrong hanging indentation before block'
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1850
diff changeset
    53
]
1440
e8daabf2c438 Runtime : Added PLCobject methods registring. IDE : Added WAMP connector. Still need some fixes
Edouard Tisserant
parents: 1439
diff changeset
    54
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
    55
# 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
    56
# 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
    57
1901
e8cf68d69447 Enforced check_source.sh pep8 and pylint rules.
Edouard Tisserant
parents: 1900
diff changeset
    58
""" 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
    59
SubscribedEvents = []
4963e3816641 Split runtime's twisted modules import and setup to ease runtime extensions hotpatching
Edouard Tisserant
parents: 1445
diff changeset
    60
1901
e8cf68d69447 Enforced check_source.sh pep8 and pylint rules.
Edouard Tisserant
parents: 1900
diff changeset
    61
""" 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
    62
DoOnJoin = []
4963e3816641 Split runtime's twisted modules import and setup to ease runtime extensions hotpatching
Edouard Tisserant
parents: 1445
diff changeset
    63
1736
7e61baa047f0 clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1667
diff changeset
    64
1445
e25479e3fe11 More versatile registering of wamp callees
Edouard Tisserant
parents: 1443
diff changeset
    65
def GetCallee(name):
1446
4963e3816641 Split runtime's twisted modules import and setup to ease runtime extensions hotpatching
Edouard Tisserant
parents: 1445
diff changeset
    66
    """ Get Callee or Subscriber corresponding to '.' spearated object path """
1445
e25479e3fe11 More versatile registering of wamp callees
Edouard Tisserant
parents: 1443
diff changeset
    67
    names = name.split('.')
e25479e3fe11 More versatile registering of wamp callees
Edouard Tisserant
parents: 1443
diff changeset
    68
    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
    69
    while names:
08e4394ff4fb clean-up: fix PEP8 E701 multiple statements on one line (colon)
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1753
diff changeset
    70
        obj = getattr(obj, names.pop(0))
1445
e25479e3fe11 More versatile registering of wamp callees
Edouard Tisserant
parents: 1443
diff changeset
    71
    return obj
1440
e8daabf2c438 Runtime : Added PLCobject methods registring. IDE : Added WAMP connector. Still need some fixes
Edouard Tisserant
parents: 1439
diff changeset
    72
2196
9017e830ae70 #2486 Added option to use websocket register options. Added function getValidOptins to read options from wampconf.json.
dporopat <denis.poropat@smarteh.si>
parents: 2195
diff changeset
    73
def getValidOptins(options, arguments):
9017e830ae70 #2486 Added option to use websocket register options. Added function getValidOptins to read options from wampconf.json.
dporopat <denis.poropat@smarteh.si>
parents: 2195
diff changeset
    74
    validOptions = {}
9017e830ae70 #2486 Added option to use websocket register options. Added function getValidOptins to read options from wampconf.json.
dporopat <denis.poropat@smarteh.si>
parents: 2195
diff changeset
    75
    for key in options:
9017e830ae70 #2486 Added option to use websocket register options. Added function getValidOptins to read options from wampconf.json.
dporopat <denis.poropat@smarteh.si>
parents: 2195
diff changeset
    76
        if key in arguments:
9017e830ae70 #2486 Added option to use websocket register options. Added function getValidOptins to read options from wampconf.json.
dporopat <denis.poropat@smarteh.si>
parents: 2195
diff changeset
    77
            validOptions[key] = options[key]
9017e830ae70 #2486 Added option to use websocket register options. Added function getValidOptins to read options from wampconf.json.
dporopat <denis.poropat@smarteh.si>
parents: 2195
diff changeset
    78
    if len(validOptions) > 0:
9017e830ae70 #2486 Added option to use websocket register options. Added function getValidOptins to read options from wampconf.json.
dporopat <denis.poropat@smarteh.si>
parents: 2195
diff changeset
    79
        return validOptions
9017e830ae70 #2486 Added option to use websocket register options. Added function getValidOptins to read options from wampconf.json.
dporopat <denis.poropat@smarteh.si>
parents: 2195
diff changeset
    80
    else:
9017e830ae70 #2486 Added option to use websocket register options. Added function getValidOptins to read options from wampconf.json.
dporopat <denis.poropat@smarteh.si>
parents: 2195
diff changeset
    81
        return None
1736
7e61baa047f0 clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1667
diff changeset
    82
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
    83
class WampSession(wamp.ApplicationSession):
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
    84
    def onConnect(self):
1901
e8cf68d69447 Enforced check_source.sh pep8 and pylint rules.
Edouard Tisserant
parents: 1900
diff changeset
    85
        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
    86
            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
    87
            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
    88
        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
    89
            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
    90
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
    91
    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
    92
        if challenge.method == u"wampcra":
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
    93
            secret = self.config.extra["secret"].encode('utf8')
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
    94
            signature = auth.compute_wcs(secret, challenge.extra['challenge'].encode('utf8'))
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
    95
            return signature.decode("ascii")
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
    96
        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
    97
            raise Exception("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
    98
e8daabf2c438 Runtime : Added PLCobject methods registring. IDE : Added WAMP connector. Still need some fixes
Edouard Tisserant
parents: 1439
diff changeset
    99
    @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
   100
    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
   101
        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
   102
        _WampSession = self
1901
e8cf68d69447 Enforced check_source.sh pep8 and pylint rules.
Edouard Tisserant
parents: 1900
diff changeset
   103
        ID = self.config.extra["ID"]
2196
9017e830ae70 #2486 Added option to use websocket register options. Added function getValidOptins to read options from wampconf.json.
dporopat <denis.poropat@smarteh.si>
parents: 2195
diff changeset
   104
9017e830ae70 #2486 Added option to use websocket register options. Added function getValidOptins to read options from wampconf.json.
dporopat <denis.poropat@smarteh.si>
parents: 2195
diff changeset
   105
        registerOptions = self.config.extra.get('registerOptions', None)
9017e830ae70 #2486 Added option to use websocket register options. Added function getValidOptins to read options from wampconf.json.
dporopat <denis.poropat@smarteh.si>
parents: 2195
diff changeset
   106
        arguments = inspect.getargspec(types.RegisterOptions.__init__).args
9017e830ae70 #2486 Added option to use websocket register options. Added function getValidOptins to read options from wampconf.json.
dporopat <denis.poropat@smarteh.si>
parents: 2195
diff changeset
   107
        validRegisterOptions = getValidOptins(registerOptions, arguments)
9017e830ae70 #2486 Added option to use websocket register options. Added function getValidOptins to read options from wampconf.json.
dporopat <denis.poropat@smarteh.si>
parents: 2195
diff changeset
   108
        if validRegisterOptions:
2197
bec80ff35282 #2486 Unnecessary variable removed.
dporopat <denis.poropat@smarteh.si>
parents: 2196
diff changeset
   109
            registerOptions = types.RegisterOptions(**validRegisterOptions)
2196
9017e830ae70 #2486 Added option to use websocket register options. Added function getValidOptins to read options from wampconf.json.
dporopat <denis.poropat@smarteh.si>
parents: 2195
diff changeset
   110
            #print(_("Added custom register options"))
9017e830ae70 #2486 Added option to use websocket register options. Added function getValidOptins to read options from wampconf.json.
dporopat <denis.poropat@smarteh.si>
parents: 2195
diff changeset
   111
1440
e8daabf2c438 Runtime : Added PLCobject methods registring. IDE : Added WAMP connector. Still need some fixes
Edouard Tisserant
parents: 1439
diff changeset
   112
        for name in ExposedCalls:
2197
bec80ff35282 #2486 Unnecessary variable removed.
dporopat <denis.poropat@smarteh.si>
parents: 2196
diff changeset
   113
            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
   114
1446
4963e3816641 Split runtime's twisted modules import and setup to ease runtime extensions hotpatching
Edouard Tisserant
parents: 1445
diff changeset
   115
        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
   116
            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
   117
4963e3816641 Split runtime's twisted modules import and setup to ease runtime extensions hotpatching
Edouard Tisserant
parents: 1445
diff changeset
   118
        for func in DoOnJoin:
4963e3816641 Split runtime's twisted modules import and setup to ease runtime extensions hotpatching
Edouard Tisserant
parents: 1445
diff changeset
   119
            yield func(self)
4963e3816641 Split runtime's twisted modules import and setup to ease runtime extensions hotpatching
Edouard Tisserant
parents: 1445
diff changeset
   120
2194
35d6b9321ffd #2486 Updated wamp test project to work with the latest Crossbar version.
dporopat <denis.poropat@smarteh.si>
parents: 2193
diff changeset
   121
        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
   122
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
   123
    def onLeave(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
   124
        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
   125
        _WampSession = None
1890
916099cb8d22 non significant print syntax change. ready for py3.
Edouard Tisserant
parents: 1881
diff changeset
   126
        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
   127
1736
7e61baa047f0 clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1667
diff changeset
   128
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
   129
class ReconnectingWampWebSocketClientFactory(WampWebSocketClientFactory, ReconnectingClientFactory):
2195
2cef75d036c2 #2486 Added option to use websocket protocol options.
dporopat <denis.poropat@smarteh.si>
parents: 2194
diff changeset
   130
    def __init__(self, config, *args, **kwargs):
2cef75d036c2 #2486 Added option to use websocket protocol options.
dporopat <denis.poropat@smarteh.si>
parents: 2194
diff changeset
   131
        WampWebSocketClientFactory.__init__(self, *args, **kwargs)
2cef75d036c2 #2486 Added option to use websocket protocol options.
dporopat <denis.poropat@smarteh.si>
parents: 2194
diff changeset
   132
2196
9017e830ae70 #2486 Added option to use websocket register options. Added function getValidOptins to read options from wampconf.json.
dporopat <denis.poropat@smarteh.si>
parents: 2195
diff changeset
   133
        protocolOptions = config.extra.get('protocolOptions', None)
2195
2cef75d036c2 #2486 Added option to use websocket protocol options.
dporopat <denis.poropat@smarteh.si>
parents: 2194
diff changeset
   134
        arguments = inspect.getargspec(self.setProtocolOptions).args
2196
9017e830ae70 #2486 Added option to use websocket register options. Added function getValidOptins to read options from wampconf.json.
dporopat <denis.poropat@smarteh.si>
parents: 2195
diff changeset
   135
        validProtocolOptions = getValidOptins(protocolOptions, arguments)
9017e830ae70 #2486 Added option to use websocket register options. Added function getValidOptins to read options from wampconf.json.
dporopat <denis.poropat@smarteh.si>
parents: 2195
diff changeset
   136
        if validProtocolOptions:
2195
2cef75d036c2 #2486 Added option to use websocket protocol options.
dporopat <denis.poropat@smarteh.si>
parents: 2194
diff changeset
   137
            self.setProtocolOptions(**validProtocolOptions)
2196
9017e830ae70 #2486 Added option to use websocket register options. Added function getValidOptins to read options from wampconf.json.
dporopat <denis.poropat@smarteh.si>
parents: 2195
diff changeset
   138
            #print(_("Added custom protocol options"))
2195
2cef75d036c2 #2486 Added option to use websocket protocol options.
dporopat <denis.poropat@smarteh.si>
parents: 2194
diff changeset
   139
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
   140
    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
   141
        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
   142
        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
   143
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
   144
    def clientConnectionFailed(self, connector, reason):
1901
e8cf68d69447 Enforced check_source.sh pep8 and pylint rules.
Edouard Tisserant
parents: 1900
diff changeset
   145
        print(_("WAMP Client connection failed (%s) .. retrying .." % time.ctime()))
1891
66043243c246 More canonical overload of ReconnectingClientFactory (according twisted doc)
Edouard Tisserant
parents: 1890
diff changeset
   146
        ReconnectingClientFactory.clientConnectionFailed(self, connector, reason)
1751
c28db6f7616b clean-up: fix PEP8 E301 expected 1 blank line, found 0
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1748
diff changeset
   147
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
   148
    def clientConnectionLost(self, connector, reason):
1901
e8cf68d69447 Enforced check_source.sh pep8 and pylint rules.
Edouard Tisserant
parents: 1900
diff changeset
   149
        print(_("WAMP Client connection lost (%s) .. retrying .." % time.ctime()))
1891
66043243c246 More canonical overload of ReconnectingClientFactory (according twisted doc)
Edouard Tisserant
parents: 1890
diff changeset
   150
        ReconnectingClientFactory.clientConnectionFailed(self, connector, reason)
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
   151
1736
7e61baa047f0 clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1667
diff changeset
   152
1446
4963e3816641 Split runtime's twisted modules import and setup to ease runtime extensions hotpatching
Edouard Tisserant
parents: 1445
diff changeset
   153
def LoadWampClientConf(wampconf):
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
   154
    try:
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
   155
        WSClientConf = json.load(open(wampconf))
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
   156
        return WSClientConf
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
   157
    except ValueError, ve:
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
   158
        print(_("WAMP load error: "), ve)
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
   159
        return None
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
   160
    except Exception:
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
   161
        return None
1446
4963e3816641 Split runtime's twisted modules import and setup to ease runtime extensions hotpatching
Edouard Tisserant
parents: 1445
diff changeset
   162
1901
e8cf68d69447 Enforced check_source.sh pep8 and pylint rules.
Edouard Tisserant
parents: 1900
diff changeset
   163
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
   164
def LoadWampSecret(secretfname):
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
   165
    try:
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
   166
        WSClientWampSecret = open(secretfname, 'rb').read()
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
   167
        return WSClientWampSecret
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
   168
    except ValueError, ve:
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
   169
        print(_("Wamp secret load error:"), ve)
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
   170
        return None
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
   171
    except Exception:
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
   172
        return None
1446
4963e3816641 Split runtime's twisted modules import and setup to ease runtime extensions hotpatching
Edouard Tisserant
parents: 1445
diff changeset
   173
1736
7e61baa047f0 clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1667
diff changeset
   174
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
   175
def RegisterWampClient(wampconf, secretfname):
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
   176
1446
4963e3816641 Split runtime's twisted modules import and setup to ease runtime extensions hotpatching
Edouard Tisserant
parents: 1445
diff changeset
   177
    WSClientConf = LoadWampClientConf(wampconf)
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
   178
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
   179
    if not WSClientConf:
1894
f224383cc883 Fixed changes from dporopat and agregorcic about WAMP CRA and config.
Edouard Tisserant
parents: 1893
diff changeset
   180
        print(_("WAMP client connection not established!"))
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
   181
        return
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
   182
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
   183
    WampSecret = LoadWampSecret(secretfname)
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
   184
1900
9d1547578f55 runtime/WAMP: Fixed secret loading into configuration. Fixed secret commandline switch handling.
Edouard Tisserant
parents: 1899
diff changeset
   185
    if WampSecret is not None:
9d1547578f55 runtime/WAMP: Fixed secret loading into configuration. Fixed secret commandline switch handling.
Edouard Tisserant
parents: 1899
diff changeset
   186
        WSClientConf["secret"] = WampSecret
9d1547578f55 runtime/WAMP: Fixed secret loading into configuration. Fixed secret commandline switch handling.
Edouard Tisserant
parents: 1899
diff changeset
   187
1440
e8daabf2c438 Runtime : Added PLCobject methods registring. IDE : Added WAMP connector. Still need some fixes
Edouard Tisserant
parents: 1439
diff changeset
   188
    # 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
   189
    component_config = types.ComponentConfig(
1744
69dfdb26f600 clean-up: fix PEP8 E251 unexpected spaces around keyword / parameter equals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1740
diff changeset
   190
        realm=WSClientConf["realm"],
1901
e8cf68d69447 Enforced check_source.sh pep8 and pylint rules.
Edouard Tisserant
parents: 1900
diff changeset
   191
        extra=WSClientConf)
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
   192
    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
   193
        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
   194
    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
   195
1440
e8daabf2c438 Runtime : Added PLCobject methods registring. IDE : Added WAMP connector. Still need some fixes
Edouard Tisserant
parents: 1439
diff changeset
   196
    # create a WAMP-over-WebSocket transport client factory
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
   197
    transport_factory = ReconnectingWampWebSocketClientFactory(
2195
2cef75d036c2 #2486 Added option to use websocket protocol options.
dporopat <denis.poropat@smarteh.si>
parents: 2194
diff changeset
   198
        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
   199
        session_factory,
1744
69dfdb26f600 clean-up: fix PEP8 E251 unexpected spaces around keyword / parameter equals
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1740
diff changeset
   200
        url=WSClientConf["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
   201
        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
   202
1440
e8daabf2c438 Runtime : Added PLCobject methods registring. IDE : Added WAMP connector. Still need some fixes
Edouard Tisserant
parents: 1439
diff changeset
   203
    # start the client from a Twisted endpoint
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
   204
    conn = connectWS(transport_factory)
1894
f224383cc883 Fixed changes from dporopat and agregorcic about WAMP CRA and config.
Edouard Tisserant
parents: 1893
diff changeset
   205
    print(_("WAMP client connecting to :"), WSClientConf["url"])
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
   206
    return conn
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
   207
1736
7e61baa047f0 clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1667
diff changeset
   208
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
   209
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
   210
    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
   211
1736
7e61baa047f0 clean-up: fix PEP8 E302 expected 2 blank lines, found 1
Andrey Skvortsov <andrej.skvortzov@gmail.com>
parents: 1667
diff changeset
   212
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
   213
def SetServer(pysrv):
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
   214
    global _PySrv
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
   215
    _PySrv = pysrv