[CalendarServer-changes] [14750] CalDAVClientLibrary/trunk
source_changes at macosforge.org
source_changes at macosforge.org
Tue May 5 07:11:40 PDT 2015
Revision: 14750
http://trac.calendarserver.org//changeset/14750
Author: cdaboo at apple.com
Date: 2015-05-05 07:11:40 -0700 (Tue, 05 May 2015)
Log Message:
-----------
Allow connecting to a server via a unix socket (use --unix <<path>>).
Modified Paths:
--------------
CalDAVClientLibrary/trunk/caldavclientlibrary/browser/shell.py
CalDAVClientLibrary/trunk/caldavclientlibrary/client/account.py
CalDAVClientLibrary/trunk/caldavclientlibrary/client/clientsession.py
CalDAVClientLibrary/trunk/caldavclientlibrary/client/httpshandler.py
CalDAVClientLibrary/trunk/caldavclientlibrary/client/simple.py
CalDAVClientLibrary/trunk/caldavclientlibrary/protocol/http/session.py
CalDAVClientLibrary/trunk/caldavclientlibrary/protocol/webdav/session.py
CalDAVClientLibrary/trunk/setup.py
Modified: CalDAVClientLibrary/trunk/caldavclientlibrary/browser/shell.py
===================================================================
--- CalDAVClientLibrary/trunk/caldavclientlibrary/browser/shell.py 2015-05-05 03:35:07 UTC (rev 14749)
+++ CalDAVClientLibrary/trunk/caldavclientlibrary/browser/shell.py 2015-05-05 14:11:40 UTC (rev 14750)
@@ -27,7 +27,7 @@
class Shell(BaseShell):
- def __init__(self, server, path, user, pswd, logging):
+ def __init__(self, server, path, user, pswd, logging, afunix=None):
super(Shell, self).__init__("caldav_client")
self.prefix = self.wd = "/"
@@ -40,7 +40,7 @@
# Create the account
ssl = server.startswith("https://")
server = server[8:] if ssl else server[7:]
- self.account = CalDAVAccount(server, ssl=ssl, user=self.user, pswd=self.pswd, root=path, principal=None, logging=logging)
+ self.account = CalDAVAccount(server, ssl=ssl, afunix=afunix, user=self.user, pswd=self.pswd, root=path, principal=None, logging=logging)
atexit.register(self.saveHistory)
@@ -78,6 +78,7 @@
Options:
-l start with HTTP logging on.
--server=HOST url of the server include http/https scheme and port [REQUIRED].
+--unix=PATH path to unix socket to connect to server [OPTIONAL]
--user=USER user name to login as - will be prompted if not prsent [OPTIONAL].
--pswd=PSWD password for user - will be prompted if not prsent [OPTIONAL].
"""
@@ -87,10 +88,11 @@
def runit():
logging = False
server = None
+ afunix = None
user = None
pswd = None
- opts, _ignore_args = getopt.getopt(sys.argv[1:], 'lh', ["help", "server=", "user=", "pswd="])
+ opts, _ignore_args = getopt.getopt(sys.argv[1:], 'lh', ["help", "server=", "unix=", "user=", "pswd="])
for name, value in opts:
@@ -98,6 +100,8 @@
logging = True
elif name == "--server":
server = value
+ elif name == "--unix":
+ afunix = value
elif name == "--user":
user = value
elif name == "--pswd":
@@ -120,7 +124,7 @@
if not pswd:
pswd = getpass("Password: ")
- shell = Shell(server, path, user, pswd, logging)
+ shell = Shell(server, path, user, pswd, logging, afunix=afunix)
shell.run()
Modified: CalDAVClientLibrary/trunk/caldavclientlibrary/client/account.py
===================================================================
--- CalDAVClientLibrary/trunk/caldavclientlibrary/client/account.py 2015-05-05 03:35:07 UTC (rev 14749)
+++ CalDAVClientLibrary/trunk/caldavclientlibrary/client/account.py 2015-05-05 14:11:40 UTC (rev 14750)
@@ -19,8 +19,8 @@
class CalDAVAccount(object):
- def __init__(self, server, port=None, ssl=False, user="", pswd="", principal=None, root=None, logging=False):
- self.session = CalDAVSession(server, port, ssl, user, pswd, principal, root, logging)
+ def __init__(self, server, port=None, ssl=False, afunix=None, user="", pswd="", principal=None, root=None, logging=False):
+ self.session = CalDAVSession(server, port, ssl, afunix, user, pswd, principal, root, logging)
self.principal = principalCache.getPrincipal(self.session, self.session.principalPath)
Modified: CalDAVClientLibrary/trunk/caldavclientlibrary/client/clientsession.py
===================================================================
--- CalDAVClientLibrary/trunk/caldavclientlibrary/client/clientsession.py 2015-05-05 03:35:07 UTC (rev 14749)
+++ CalDAVClientLibrary/trunk/caldavclientlibrary/client/clientsession.py 2015-05-05 14:11:40 UTC (rev 14750)
@@ -62,8 +62,8 @@
print data.replace("\r\n", "\n"),
- def __init__(self, server, port=None, ssl=False, user="", pswd="", principal=None, root=None, logging=False):
- super(CalDAVSession, self).__init__(server, port, ssl, log=CalDAVSession.logger())
+ def __init__(self, server, port=None, ssl=False, afunix=None, user="", pswd="", principal=None, root=None, logging=False):
+ super(CalDAVSession, self).__init__(server, port, ssl, afunix, log=CalDAVSession.logger())
self.loghttp = logging
@@ -960,7 +960,7 @@
def openSession(self):
# Create connection
- self.connect = SmartHTTPConnection(self.server, self.port, self.ssl)
+ self.connect = SmartHTTPConnection(self.server, self.port, self.ssl, self.afunix)
# Write to log file
if self.loghttp and self.log:
Modified: CalDAVClientLibrary/trunk/caldavclientlibrary/client/httpshandler.py
===================================================================
--- CalDAVClientLibrary/trunk/caldavclientlibrary/client/httpshandler.py 2015-05-05 03:35:07 UTC (rev 14749)
+++ CalDAVClientLibrary/trunk/caldavclientlibrary/client/httpshandler.py 2015-05-05 14:11:40 UTC (rev 14750)
@@ -19,7 +19,9 @@
import ssl as sslmodule
class HTTPSVersionConnection(httplib.HTTPSConnection):
- "This class allows communication via SSL."
+ """
+ An L{httplib.HTTPSConnection} class that allows the TLS protocol version to be set.
+ """
def __init__(self, host, port, ssl_version=sslmodule.PROTOCOL_TLSv1):
httplib.HTTPSConnection.__init__(self, host, port)
@@ -39,14 +41,46 @@
(set(), sslmodule.PROTOCOL_SSLv23),
)
-def SmartHTTPConnection(host, port, ssl):
+class UnixSocketHTTPConnection(httplib.HTTPConnection):
+ """
+ An L{httplib.HTTPConnection} class that uses a unix socket rather than TCP.
+ """
+ def __init__(self, path):
+ httplib.HTTPConnection.__init__(self, "http.sock", port=None)
+ self.path = path
+
+
+ def connect(self):
+ """
+ Connect using the supplied unix socket file path
+ """
+ self.sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
+ self.sock.connect(self.path)
+
+
+
+def SmartHTTPConnection(host, port, ssl, afunix):
+ """
+ Create the appropriate L{httplib.HTTPConnection} derived class for the supplied arguments.
+
+ @param host: TCP host name
+ @type host: L{str}
+ @param port: TCP port number
+ @type port: L{int}
+ @param ssl: indicates if SSL is to be used
+ @type ssl: L{bool}
+ @param afunix: unix socket to use or L{None}
+ @type afunix: L{str}
+ """
+
def trySSL(version):
connect = HTTPSVersionConnection(host, port, ssl_version=version)
connect.connect()
return connect
if ssl:
+ # Iterate over the TL:S versions and find one that works and cache it for future use.
for cached, connection_type in cached_types:
if (host, port) in cached:
try:
@@ -62,7 +96,9 @@
cached.remove((host, port))
raise RuntimeError("Cannot connect via with TLSv1, SSLv3 or SSLv23")
+ elif afunix is None:
+ connect = httplib.HTTPConnection(host, port)
else:
- connect = httplib.HTTPConnection(host, port)
- connect.connect()
- return connect
+ connect = UnixSocketHTTPConnection(afunix)
+ connect.connect()
+ return connect
Modified: CalDAVClientLibrary/trunk/caldavclientlibrary/client/simple.py
===================================================================
--- CalDAVClientLibrary/trunk/caldavclientlibrary/client/simple.py 2015-05-05 03:35:07 UTC (rev 14749)
+++ CalDAVClientLibrary/trunk/caldavclientlibrary/client/simple.py 2015-05-05 14:11:40 UTC (rev 14750)
@@ -21,7 +21,7 @@
def run(session, request):
# Create connection
- connect = SmartHTTPConnection(session.server, session.port, session.ssl)
+ connect = SmartHTTPConnection(session.server, session.port, session.ssl, session.afunix)
connect.set_debuglevel(1)
# Do headers
Modified: CalDAVClientLibrary/trunk/caldavclientlibrary/protocol/http/session.py
===================================================================
--- CalDAVClientLibrary/trunk/caldavclientlibrary/protocol/http/session.py 2015-05-05 03:35:07 UTC (rev 14749)
+++ CalDAVClientLibrary/trunk/caldavclientlibrary/protocol/http/session.py 2015-05-05 14:11:40 UTC (rev 14750)
@@ -22,11 +22,12 @@
STATE_OPEN = 0
STATE_CLOSED = 1
- def __init__(self, server, port=None, ssl=False, log=None):
+ def __init__(self, server, port=None, ssl=False, afunix=None, log=None):
self.server = server
self.port = port
self.ssl = ssl
+ self.afunix = afunix
if not self.port:
self.port = httplib.HTTPS_PORT if ssl else httplib.HTTP_PORT
self.authorization = None
Modified: CalDAVClientLibrary/trunk/caldavclientlibrary/protocol/webdav/session.py
===================================================================
--- CalDAVClientLibrary/trunk/caldavclientlibrary/protocol/webdav/session.py 2015-05-05 03:35:07 UTC (rev 14749)
+++ CalDAVClientLibrary/trunk/caldavclientlibrary/protocol/webdav/session.py 2015-05-05 14:11:40 UTC (rev 14750)
@@ -23,8 +23,8 @@
class Session(HTTPSession):
- def __init__(self, server, port=None, ssl=False, log=None):
- super(Session, self).__init__(server, port, ssl, log)
+ def __init__(self, server, port=None, ssl=False, afunix=None, log=None):
+ super(Session, self).__init__(server, port, ssl, afunix, log)
self.initialised = False
self.version = ()
Modified: CalDAVClientLibrary/trunk/setup.py
===================================================================
--- CalDAVClientLibrary/trunk/setup.py 2015-05-05 03:35:07 UTC (rev 14749)
+++ CalDAVClientLibrary/trunk/setup.py 2015-05-05 14:11:40 UTC (rev 14750)
@@ -33,7 +33,7 @@
data_files.append("caldavclientlibrary/ui/WebDAVBrowser.nib")
package_data['caldavclientlibrary'] = [
'ui/WebDAVBrowser.nib/*',
- ]
+ ]
packages = []
for dirpath, dirnames, filenames in os.walk('caldavclientlibrary'):
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20150505/ad084582/attachment-0001.html>
More information about the calendarserver-changes
mailing list