mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 03:44:55 +00:00 
			
		
		
		
	Added the posibility to pass the timeout to FTP.connect, not only when
instantiating the class. Docs and tests are updated.
This commit is contained in:
		
							parent
							
								
									b6a5c9d605
								
							
						
					
					
						commit
						93c33680a0
					
				
					 3 changed files with 40 additions and 7 deletions
				
			
		| 
						 | 
					@ -104,13 +104,19 @@ debugging output, generally a single line per request.  A value of
 | 
				
			||||||
logging each line sent and received on the control connection.
 | 
					logging each line sent and received on the control connection.
 | 
				
			||||||
\end{methoddesc}
 | 
					\end{methoddesc}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
\begin{methoddesc}{connect}{host\optional{, port}}
 | 
					\begin{methoddesc}{connect}{host\optional{, port\optional{, timeout}}}
 | 
				
			||||||
Connect to the given host and port.  The default port number is \code{21}, as
 | 
					Connect to the given host and port.  The default port number is \code{21}, as
 | 
				
			||||||
specified by the FTP protocol specification.  It is rarely needed to
 | 
					specified by the FTP protocol specification.  It is rarely needed to
 | 
				
			||||||
specify a different port number.  This function should be called only
 | 
					specify a different port number.  This function should be called only
 | 
				
			||||||
once for each instance; it should not be called at all if a host was
 | 
					once for each instance; it should not be called at all if a host was
 | 
				
			||||||
given when the instance was created.  All other methods can only be
 | 
					given when the instance was created.  All other methods can only be
 | 
				
			||||||
used after a connection has been made.
 | 
					used after a connection has been made.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The optional \var{timeout} parameter specifies a timeout in seconds for
 | 
				
			||||||
 | 
					the connection attempt. If is not specified, or passed as None, the 
 | 
				
			||||||
 | 
					object timeout is used (the timeout that you passed when instantiating the
 | 
				
			||||||
 | 
					class); if the object timeout is also None, the global default timeout 
 | 
				
			||||||
 | 
					setting will be used.
 | 
				
			||||||
\end{methoddesc}
 | 
					\end{methoddesc}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
\begin{methoddesc}{getwelcome}{}
 | 
					\begin{methoddesc}{getwelcome}{}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -115,7 +115,7 @@ class FTP:
 | 
				
			||||||
            if user: 
 | 
					            if user: 
 | 
				
			||||||
                self.login(user, passwd, acct)
 | 
					                self.login(user, passwd, acct)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def connect(self, host='', port=0):
 | 
					    def connect(self, host='', port=0, timeout=None):
 | 
				
			||||||
        '''Connect to host.  Arguments are:
 | 
					        '''Connect to host.  Arguments are:
 | 
				
			||||||
         - host: hostname to connect to (string, default previous host)
 | 
					         - host: hostname to connect to (string, default previous host)
 | 
				
			||||||
         - port: port to connect to (integer, default previous port)
 | 
					         - port: port to connect to (integer, default previous port)
 | 
				
			||||||
| 
						 | 
					@ -124,6 +124,8 @@ class FTP:
 | 
				
			||||||
            self.host = host
 | 
					            self.host = host
 | 
				
			||||||
        if port > 0:
 | 
					        if port > 0:
 | 
				
			||||||
            self.port = port
 | 
					            self.port = port
 | 
				
			||||||
 | 
					        if timeout is not None:
 | 
				
			||||||
 | 
					            self.timeout = timeout
 | 
				
			||||||
        self.sock = socket.create_connection((self.host, self.port), self.timeout)
 | 
					        self.sock = socket.create_connection((self.host, self.port), self.timeout)
 | 
				
			||||||
        self.af = self.sock.family
 | 
					        self.af = self.sock.family
 | 
				
			||||||
        self.file = self.sock.makefile('rb')
 | 
					        self.file = self.sock.makefile('rb')
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -8,14 +8,20 @@ from test import test_support
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def server(evt):
 | 
					def server(evt):
 | 
				
			||||||
    serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 | 
					    serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 | 
				
			||||||
 | 
					    serv.settimeout(3)
 | 
				
			||||||
    serv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
 | 
					    serv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
 | 
				
			||||||
    serv.bind(("", 9091))
 | 
					    serv.bind(("", 9091))
 | 
				
			||||||
    serv.listen(5)
 | 
					    serv.listen(5)
 | 
				
			||||||
    conn, addr = serv.accept()
 | 
					    try:
 | 
				
			||||||
    conn.send("1 Hola mundo\n")
 | 
					        conn, addr = serv.accept()
 | 
				
			||||||
    conn.close()
 | 
					    except socket.timeout:
 | 
				
			||||||
    serv.close()
 | 
					        pass
 | 
				
			||||||
    evt.set()
 | 
					    else:
 | 
				
			||||||
 | 
					        conn.send("1 Hola mundo\n")
 | 
				
			||||||
 | 
					        conn.close()
 | 
				
			||||||
 | 
					    finally:
 | 
				
			||||||
 | 
					        serv.close()
 | 
				
			||||||
 | 
					        evt.set()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class GeneralTests(TestCase):
 | 
					class GeneralTests(TestCase):
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
| 
						 | 
					@ -48,6 +54,25 @@ class GeneralTests(TestCase):
 | 
				
			||||||
        self.assertEqual(ftp.sock.gettimeout(), 30)
 | 
					        self.assertEqual(ftp.sock.gettimeout(), 30)
 | 
				
			||||||
        ftp.sock.close()
 | 
					        ftp.sock.close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def testTimeoutConnect(self):
 | 
				
			||||||
 | 
					        ftp = ftplib.FTP()
 | 
				
			||||||
 | 
					        ftp.connect("localhost", timeout=30)
 | 
				
			||||||
 | 
					        self.assertEqual(ftp.sock.gettimeout(), 30)
 | 
				
			||||||
 | 
					        ftp.sock.close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def testTimeoutDifferentOrder(self):
 | 
				
			||||||
 | 
					        ftp = ftplib.FTP(timeout=30)
 | 
				
			||||||
 | 
					        ftp.connect("localhost")
 | 
				
			||||||
 | 
					        self.assertEqual(ftp.sock.gettimeout(), 30)
 | 
				
			||||||
 | 
					        ftp.sock.close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def testTimeoutDirectAccess(self):
 | 
				
			||||||
 | 
					        ftp = ftplib.FTP()
 | 
				
			||||||
 | 
					        ftp.timeout = 30
 | 
				
			||||||
 | 
					        ftp.connect("localhost")
 | 
				
			||||||
 | 
					        self.assertEqual(ftp.sock.gettimeout(), 30)
 | 
				
			||||||
 | 
					        ftp.sock.close()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def testTimeoutNone(self):
 | 
					    def testTimeoutNone(self):
 | 
				
			||||||
        # None, having other default
 | 
					        # None, having other default
 | 
				
			||||||
        previous = socket.getdefaulttimeout()
 | 
					        previous = socket.getdefaulttimeout()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue