"""
FtpCube
Copyright (C) Michael Gilfix
This file is part of FtpCube.
You should have received a file COPYING containing license terms
along with this program; if not, write to Michael Gilfix
(mgilfix@eecs.tufts.edu) for a copy.
This version of FtpCube is open source; you can redistribute it and/or
modify it under the terms listed in the file COPYING.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
"""
# Loaded transport modules by named constant
transport_modules = [ ]
transport_default_ports = { }
transport_classes = { }
def listLoadedTransports():
"""Returns a list of loaded transport modules by their constant names."""
return transport_modules
def isProtocolEnabled(protocol):
"""Returns true if this protocol has been enabled (loaded)."""
try:
transport_classes[protocol]
return True
except KeyError:
return False
def createProtocolInstance(protocol, **kwargs):
"""Creates an instance of a protocol class.
The protocol should be specified by the protocol constant module name. The keyword
arguments are passed into the class during initialization. If the specified protocol
instance has not been loaded, this method returns None."""
instance = None
try:
klass = transport_classes[protocol]
if klass:
instance = klass(**kwargs)
except KeyError:
pass
return instance
def getDefaultPortForProtocol(protocol):
"""Returns the default port for the protocol or None if the protocol isn't registered."""
port = None
try:
port = transport_default_ports[protocol]
except KeyError:
pass
return port
# Try to load the FTP module
FTP_TRANSPORT = 'FTP'
try:
import libftpcube.transports.ftp
transport_modules.append(FTP_TRANSPORT)
transport_classes[FTP_TRANSPORT] = libftpcube.transports.ftp.FTP
transport_default_ports[FTP_TRANSPORT] = 21
except ImportError, strerror:
if __debug__:
print _("Unable to load FTP transport module: %(err)s") %{ 'err' : strerror }
# FTP is critical, so throw an error
raise
# Try to load the sftp module
SFTP_TRANSPORT = 'SFTP'
try:
import libftpcube.transports.sftp
transport_modules.append(SFTP_TRANSPORT)
transport_classes[SFTP_TRANSPORT] = libftpcube.transports.sftp.SFTP
transport_default_ports[SFTP_TRANSPORT] = 22
except ImportError, strerror:
if __debug__:
print _("Unable to load SFTP transport module: %(err)s") %{ 'err' : strerror }
|