renamed sfa/plc into sfa/planetlab
[sfa.git] / sfa / plc / plshell.py
diff --git a/sfa/plc/plshell.py b/sfa/plc/plshell.py
deleted file mode 100644 (file)
index d2cd9cd..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-import sys
-import xmlrpclib
-import socket
-from urlparse import urlparse
-
-from sfa.util.sfalogging import logger
-
-class PlShell:
-    """
-    A simple xmlrpc shell to a myplc instance
-    This class can receive all PLCAPI calls to the underlying testbed
-    For safety this is limited to a set of hard-coded calls
-    """
-    
-    direct_calls = ['AddNode', 'AddPerson', 'AddPersonKey', 'AddPersonToSite',
-                    'AddPersonToSlice', 'AddRoleToPerson', 'AddSite', 'AddSiteTag', 'AddSlice',
-                    'AddSliceTag', 'AddSliceToNodes', 'BindObjectToPeer', 'DeleteKey',
-                    'DeleteNode', 'DeletePerson', 'DeletePersonFromSlice', 'DeleteSite',
-                    'DeleteSlice', 'DeleteSliceFromNodes', 'DeleteSliceTag', 'GetInitScripts',
-                    'GetInterfaces', 'GetKeys', 'GetNodeTags', 'GetPeers',
-                    'GetPersons', 'GetSlices', 'GetSliceTags', 'GetTagTypes',
-                    'UnBindObjectFromPeer', 'UpdateNode', 'UpdatePerson', 'UpdateSite',
-                    'UpdateSlice', 'UpdateSliceTag',
-                    # also used as-is in importer
-                    'GetSites','GetNodes',
-                    ]
-    # support for other names - this is experimental
-    alias_calls = { 'get_authorities':'GetSites',
-                    'get_nodes':'GetNodes',
-                    }
-
-
-    # use the 'capability' auth mechanism for higher performance when the PLC db is local    
-    def __init__ ( self, config ) :
-        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)
-
-    def __getattr__(self, name):
-        def func(*args, **kwds):
-            actual_name=None
-            if name in PlShell.direct_calls: actual_name=name
-            if name in PlShell.alias_calls: actual_name=PlShell.alias_calls[name]
-            if not actual_name:
-                raise Exception, "Illegal method call %s for PL driver"%(name)
-            result=getattr(self.proxy, actual_name)(self.plauth, *args, **kwds)
-            logger.debug('PlShell %s (%s) returned ... '%(name,actual_name))
-            return result
-        return func