- self.plauth = {'Username': config.SFA_PLC_USER,
- 'AuthMethod': 'password',
- 'AuthString': config.SFA_PLC_PASSWORD}
-
- self.url = config.SFA_PLC_URL
- self.plauth = {'Username': 'root@test.onelab.eu',
- 'AuthMethod': 'password',
- 'AuthString': 'test++'}
- self.proxy_server = xmlrpclib.Server(self.url, verbose = 0, allow_none = True)
+ url = config.SFA_PLC_URL
+ # try to figure if the url is local
+ hostname=urlparse(url).hostname
+ is_local=False
+ if hostname == 'localhost': is_local=True
+ # otherwise compare IP addresses;
+ # this might fail for any number of reasons, so let's harden that
+ try:
+ # xxx todo this seems to result in a DNS request for each incoming request to the AM
+ # should be cached or improved
+ url_ip=socket.gethostbyname(hostname)
+ local_ip=socket.gethostbyname(socket.gethostname())
+ if url_ip==local_ip: is_local=True
+ except:
+ pass
+
+ if is_local:
+ try:
+ # too bad this is not installed properly
+ plcapi_path="/usr/share/plc_api"
+ if plcapi_path not in sys.path: sys.path.append(plcapi_path)
+ import PLC.Shell
+ plc_direct_access=True
+ except:
+ plc_direct_access=False
+ if is_local and plc_direct_access:
+ logger.debug('plshell access - capability')
+ self.plauth = { 'AuthMethod': 'capability',
+ 'Username': config.SFA_PLC_USER,
+ 'AuthString': config.SFA_PLC_PASSWORD,
+ }
+ self.proxy = PLC.Shell.Shell ()
+
+ else:
+ logger.debug('plshell access - xmlrpc')
+ self.plauth = { 'AuthMethod': 'password',
+ 'Username': config.SFA_PLC_USER,
+ 'AuthString': config.SFA_PLC_PASSWORD,
+ }
+ self.proxy = xmlrpclib.Server(url, verbose = False, allow_none = True)