From trac at ftputil.sschwarzer.net Wed Apr 7 04:41:08 2010 From: trac at ftputil.sschwarzer.net (ftputil) Date: Wed, 07 Apr 2010 02:41:08 -0000 Subject: [ftputil] #46: synchronize_times() throws ftputil.ftp_error.PermanentError on failed file creation Message-ID: <049.b828f22d1d64644e85649e21e3a5242b@ftputil.sschwarzer.net> #46: synchronize_times() throws ftputil.ftp_error.PermanentError on failed file creation ----------------------+----------------------------------------------------- Reporter: ssteiner | Owner: schwa Type: defect | Status: new Priority: major | Milestone: 2.5 Component: Library | Version: 2.4.2b2 Keywords: | ----------------------+----------------------------------------------------- The docs say it throws a TimeShiftError but, if the login dir is not writable, the finally clause on line 453 actually throws a different error trying to unlink the file. The unlink should be wrapped in its own try...except and raise the correct error if the unlink raises an exception trying to delete the file it couldn't create in the first place. -- Ticket URL: ftputil Python FTP client library From trac at ftputil.sschwarzer.net Wed Apr 7 14:25:55 2010 From: trac at ftputil.sschwarzer.net (ftputil) Date: Wed, 07 Apr 2010 12:25:55 -0000 Subject: [ftputil] #47: makefile has python 2.4 hardcoded, should default to system python Message-ID: <049.c4a6201e7742dc4556fed202dcf086fd@ftputil.sschwarzer.net> #47: makefile has python 2.4 hardcoded, should default to system python ----------------------+----------------------------------------------------- Reporter: ssteiner | Owner: schwa Type: defect | Status: new Priority: major | Milestone: 2.5 Component: Library | Version: 2.4.2 Keywords: | ----------------------+----------------------------------------------------- The makefile attempts to run the tests with python2.4 regardless of the python in the environment. So...doing a python setup.py install will install to the system python and, if that's not 2.4, the tests can't possibly pass since ftputil is not installed in python2.4. The makefile should be modified to use the system python by default and possibly take a specific interpreter name to use on the command line. -- Ticket URL: ftputil Python FTP client library From trac at ftputil.sschwarzer.net Wed Apr 7 14:48:13 2010 From: trac at ftputil.sschwarzer.net (ftputil) Date: Wed, 07 Apr 2010 12:48:13 -0000 Subject: [ftputil] #48: Instructions for running "real FTP access" test are unclear Message-ID: <049.a6060a6e478da29a08f21c23836ae634@ftputil.sschwarzer.net> #48: Instructions for running "real FTP access" test are unclear ------------------------+--------------------------------------------------- Reporter: ssteiner | Owner: schwa Type: defect | Status: new Priority: major | Milestone: 2.5 Component: Library | Version: 2.4.2 Keywords: tests docs | ------------------------+--------------------------------------------------- _test_real_ftp.py Test for real FTP access. This test writes some files and directories on the local client and the remote server. Thus, you may want to skip this test by pressing [Ctrl-C]. **If the test should run, enter the login data for the remote server.** This is not clear -- enter the login data how and where? -- Ticket URL: ftputil Python FTP client library From trac at ftputil.sschwarzer.net Wed Apr 7 15:13:00 2010 From: trac at ftputil.sschwarzer.net (ftputil) Date: Wed, 07 Apr 2010 13:13:00 -0000 Subject: [ftputil] #49: Drop 2.3 support, make 2.5 for Python 2.5 + Message-ID: <049.d383a7b59bc6808786bc82b0a1ca4ffc@ftputil.sschwarzer.net> #49: Drop 2.3 support, make 2.5 for Python 2.5 + ----------------------+----------------------------------------------------- Reporter: ssteiner | Owner: schwa Type: defect | Status: new Priority: major | Milestone: 2.5 Component: Library | Version: 2.4.2 Keywords: | ----------------------+----------------------------------------------------- At this point, 2.3 is long gone so claiming 2.3 support, but having no tests (or systems with 2.3 to run them on!) seems counter-productive. Maybe flag 2.4.2 as "last version compatible with 2.3" and bump ftputil 2.5 up to (gasp) Python 2.5. 2.7 is just around the corner and leaving out all the improvements of later versions of Python (and not testing older version compatibility) just seems cruel to anyone stuck on ancient versions of Python (as if that weren't cruel enough). -- Ticket URL: ftputil Python FTP client library From trac at ftputil.sschwarzer.net Wed Apr 7 16:18:17 2010 From: trac at ftputil.sschwarzer.net (ftputil) Date: Wed, 07 Apr 2010 14:18:17 -0000 Subject: [ftputil] #50: Possible to remove 30 lines of copyright from top of every file? Message-ID: <049.dd8b4cb196bda6da52ccde795418a405@ftputil.sschwarzer.net> #50: Possible to remove 30 lines of copyright from top of every file? ----------------------+----------------------------------------------------- Reporter: ssteiner | Owner: schwa Type: defect | Status: new Priority: major | Milestone: 2.5 Component: Library | Version: 2.4.2 Keywords: | ----------------------+----------------------------------------------------- Would it be possible to have this "by inclusion" somehow, or at the end of the file? The first page of code is never the code, very annoying to edit, how about: # Copyright (C) 2007, Stefan Schwarzer # All rights reserved. # # Lee LICENSE for additional terms. then put all that disclaimer stuff in a single LICENSE file. Much neater and I don't think it protects the code less, though I'm not a lawyer. -- Ticket URL: ftputil Python FTP client library From trac at ftputil.sschwarzer.net Wed Apr 7 17:56:45 2010 From: trac at ftputil.sschwarzer.net (ftputil) Date: Wed, 07 Apr 2010 15:56:45 -0000 Subject: [ftputil] #47: makefile has python 2.4 hardcoded, should default to system python In-Reply-To: <049.c4a6201e7742dc4556fed202dcf086fd@ftputil.sschwarzer.net> References: <049.c4a6201e7742dc4556fed202dcf086fd@ftputil.sschwarzer.net> Message-ID: <058.55bb4d76db25669fdc544a54c3ab5e41@ftputil.sschwarzer.net> #47: makefile has python 2.4 hardcoded, should default to system python -----------------------+---------------------------------------------------- Reporter: ssteiner | Owner: schwa Type: defect | Status: assigned Priority: major | Milestone: 2.5 Component: Library | Version: 2.4.2 Resolution: | Keywords: -----------------------+---------------------------------------------------- Changes (by schwa): * status: new => assigned Comment: There's just one test which is specifically for Python 2.4, the other tests are run with the default Python interpreter. From the makefile: {{{ test: @echo "Tests for ftputil ${VERSION}\n" python2.4 _test_python2_4.py for file in $(TEST_FILES); \ do \ echo $$file ; \ python $$file ; \ done }}} In fact when you run the tests, the one test mentioned explicitly tries to use `python2.4`. It seems that when I coded this, I only thought about myself and forgot other developers who might want to run the tests without having Python 2.4 installed. To make a long story short: I think Python 2.4 is only used for one test, not all of them, but still the `test` target should be changed to only run this test if Python 2.4 is installed (and maybe print a warning otherwise). -- Ticket URL: ftputil Python FTP client library From trac at ftputil.sschwarzer.net Wed Apr 7 17:59:06 2010 From: trac at ftputil.sschwarzer.net (ftputil) Date: Wed, 07 Apr 2010 15:59:06 -0000 Subject: [ftputil] #47: makefile has python 2.4 hardcoded, should default to system python In-Reply-To: <049.c4a6201e7742dc4556fed202dcf086fd@ftputil.sschwarzer.net> References: <049.c4a6201e7742dc4556fed202dcf086fd@ftputil.sschwarzer.net> Message-ID: <058.4b68669708d022c8e9dc16533ea37505@ftputil.sschwarzer.net> #47: makefile has python 2.4 hardcoded, should default to system python -----------------------+---------------------------------------------------- Reporter: ssteiner | Owner: schwa Type: defect | Status: assigned Priority: major | Milestone: 2.5 Component: Library | Version: 2.4.2 Resolution: | Keywords: -----------------------+---------------------------------------------------- Comment(by ssteiner): Yes, I just moved it to a different target; test_24 in the makefile, and I printed out the current system python. You can see what I did when you pull my changes off BitBucket. -- Ticket URL: ftputil Python FTP client library From trac at ftputil.sschwarzer.net Wed Apr 7 18:00:28 2010 From: trac at ftputil.sschwarzer.net (ftputil) Date: Wed, 07 Apr 2010 16:00:28 -0000 Subject: [ftputil] #50: Possible to remove 30 lines of copyright from top of every file? In-Reply-To: <049.dd8b4cb196bda6da52ccde795418a405@ftputil.sschwarzer.net> References: <049.dd8b4cb196bda6da52ccde795418a405@ftputil.sschwarzer.net> Message-ID: <058.8d75bab84f90ebff0fd33b5adf4a7a91@ftputil.sschwarzer.net> #50: Possible to remove 30 lines of copyright from top of every file? --------------------------+------------------------------------------------- Reporter: ssteiner | Owner: schwa Type: enhancement | Status: new Priority: major | Milestone: 2.5 Component: Library | Version: 2.4.2 Resolution: | Keywords: --------------------------+------------------------------------------------- Changes (by ssteiner): * type: defect => enhancement -- Ticket URL: ftputil Python FTP client library From trac at ftputil.sschwarzer.net Wed Apr 7 18:34:15 2010 From: trac at ftputil.sschwarzer.net (ftputil) Date: Wed, 07 Apr 2010 16:34:15 -0000 Subject: [ftputil] #46: synchronize_times() throws ftputil.ftp_error.PermanentError on failed file creation In-Reply-To: <049.b828f22d1d64644e85649e21e3a5242b@ftputil.sschwarzer.net> References: <049.b828f22d1d64644e85649e21e3a5242b@ftputil.sschwarzer.net> Message-ID: <058.b646160bb3b77c1ccd2a96f58407da73@ftputil.sschwarzer.net> #46: synchronize_times() throws ftputil.ftp_error.PermanentError on failed file creation -----------------------+---------------------------------------------------- Reporter: ssteiner | Owner: schwa Type: defect | Status: assigned Priority: major | Milestone: 2.5 Component: Library | Version: 2.4.2b2 Resolution: | Keywords: -----------------------+---------------------------------------------------- Changes (by schwa): * status: new => assigned Old description: > The docs say it throws a TimeShiftError but, if the login dir is not > writable, the finally clause on line 453 actually throws a different > error trying to unlink the file. > > The unlink should be wrapped in its own try...except and raise the > correct error if the unlink raises an exception trying to delete the file > it couldn't create in the first place. New description: The docs say it throws a !TimeShiftError but, if the login dir is not writable, the finally clause on line 453 actually throws a different error trying to unlink the file. The unlink should be wrapped in its own `try...except` and raise the correct error if the unlink raises an exception trying to delete the file it couldn't create in the first place. -- Comment: Thanks for the report, Steve! I've checked in changeset [39a3da8880a7] which should fix the issue. Can you please pull and test it? -- Ticket URL: ftputil Python FTP client library From trac at ftputil.sschwarzer.net Wed Apr 7 18:52:01 2010 From: trac at ftputil.sschwarzer.net (ftputil) Date: Wed, 07 Apr 2010 16:52:01 -0000 Subject: [ftputil] #48: Instructions for running "real FTP access" test are unclear In-Reply-To: <049.a6060a6e478da29a08f21c23836ae634@ftputil.sschwarzer.net> References: <049.a6060a6e478da29a08f21c23836ae634@ftputil.sschwarzer.net> Message-ID: <058.c4795f3cd9d20cb54152aa81abfa54dd@ftputil.sschwarzer.net> #48: Instructions for running "real FTP access" test are unclear -----------------------+---------------------------------------------------- Reporter: ssteiner | Owner: schwa Type: defect | Status: assigned Priority: major | Milestone: 2.5 Component: Library | Version: 2.4.2 Resolution: | Keywords: tests docs -----------------------+---------------------------------------------------- Changes (by schwa): * status: new => assigned Comment: Yes, that's not so great. Please look at function `get_login_data` near the top of `_test_real_ftp.py` and adapt it. A longer-term approach might be to take the credentials from a file which is only readable by the user running the tests. Using environment variables for userid and password is dangerous because the environment of a user can be inspected by other users, so they're able to see the password. At least the text output by `_test_real_ftp.py` should be fixed to tell to change `get_login_data`. -- Ticket URL: ftputil Python FTP client library From trac at ftputil.sschwarzer.net Wed Apr 7 18:55:38 2010 From: trac at ftputil.sschwarzer.net (ftputil) Date: Wed, 07 Apr 2010 16:55:38 -0000 Subject: [ftputil] #46: synchronize_times() throws ftputil.ftp_error.PermanentError on failed file creation In-Reply-To: <049.b828f22d1d64644e85649e21e3a5242b@ftputil.sschwarzer.net> References: <049.b828f22d1d64644e85649e21e3a5242b@ftputil.sschwarzer.net> Message-ID: <058.95ae0cddd1863caa42e484a3dd88a398@ftputil.sschwarzer.net> #46: synchronize_times() throws ftputil.ftp_error.PermanentError on failed file creation -----------------------+---------------------------------------------------- Reporter: ssteiner | Owner: schwa Type: defect | Status: assigned Priority: major | Milestone: 2.5 Component: Library | Version: 2.4.2b2 Resolution: | Keywords: -----------------------+---------------------------------------------------- Comment(by ssteiner): See my changes on BitBucket, maybe a combined approach. I was more explicit about where, exactly, it failed though you may know more about other places that raise the TimeShiftError; I just assumed it was all local to this function (which it probably should be). -- Ticket URL: ftputil Python FTP client library From trac at ftputil.sschwarzer.net Wed Apr 7 18:57:39 2010 From: trac at ftputil.sschwarzer.net (ftputil) Date: Wed, 07 Apr 2010 16:57:39 -0000 Subject: [ftputil] #50: Possible to remove 30 lines of copyright from top of every file? In-Reply-To: <049.dd8b4cb196bda6da52ccde795418a405@ftputil.sschwarzer.net> References: <049.dd8b4cb196bda6da52ccde795418a405@ftputil.sschwarzer.net> Message-ID: <058.f332eb51cebf89e78bd4f1ab55a0d9e6@ftputil.sschwarzer.net> #50: Possible to remove 30 lines of copyright from top of every file? --------------------------+------------------------------------------------- Reporter: ssteiner | Owner: schwa Type: enhancement | Status: assigned Priority: major | Milestone: 2.5 Component: Library | Version: 2.4.2 Resolution: | Keywords: --------------------------+------------------------------------------------- Changes (by schwa): * status: new => assigned Comment: Right, the copyright notice should probably go into an extra file. We have to make sure though that `lrucache.py` is handled specially. Ok, the author allowed it to put the file under the modified BSD license but originally it's licensed under the Academic Free License. Probably that should be pointed out somewhere. -- Ticket URL: ftputil Python FTP client library From trac at ftputil.sschwarzer.net Wed Apr 7 18:58:52 2010 From: trac at ftputil.sschwarzer.net (ftputil) Date: Wed, 07 Apr 2010 16:58:52 -0000 Subject: [ftputil] #50: Possible to remove 30 lines of copyright from top of every file? In-Reply-To: <049.dd8b4cb196bda6da52ccde795418a405@ftputil.sschwarzer.net> References: <049.dd8b4cb196bda6da52ccde795418a405@ftputil.sschwarzer.net> Message-ID: <058.7cfb03c2aff7feca78b4649ac08aaf34@ftputil.sschwarzer.net> #50: Possible to remove 30 lines of copyright from top of every file? --------------------------+------------------------------------------------- Reporter: ssteiner | Owner: schwa Type: enhancement | Status: assigned Priority: major | Milestone: 2.5 Component: Library | Version: 2.4.2 Resolution: | Keywords: --------------------------+------------------------------------------------- Comment(by ssteiner): Ok, let's get synched so my BitBucket is exactly like the main repo and I'll do these if you'll give me exact approved text for the top of each file. S -- Ticket URL: ftputil Python FTP client library From trac at ftputil.sschwarzer.net Wed Apr 7 20:05:17 2010 From: trac at ftputil.sschwarzer.net (ftputil) Date: Wed, 07 Apr 2010 18:05:17 -0000 Subject: [ftputil] #48: Instructions for running "real FTP access" test are unclear In-Reply-To: <049.a6060a6e478da29a08f21c23836ae634@ftputil.sschwarzer.net> References: <049.a6060a6e478da29a08f21c23836ae634@ftputil.sschwarzer.net> Message-ID: <058.ef4e8a8889a2a7b8c3b2a3e1f7469f04@ftputil.sschwarzer.net> #48: Instructions for running "real FTP access" test are unclear -----------------------+---------------------------------------------------- Reporter: ssteiner | Owner: schwa Type: defect | Status: assigned Priority: major | Milestone: 2.5 Component: Library | Version: 2.4.2 Resolution: | Keywords: tests docs -----------------------+---------------------------------------------------- Comment(by ssteiner): There's always .netrc, we could just tell them to add an entry, and prompt for the server name to connect to. -- Ticket URL: ftputil Python FTP client library From trac at ftputil.sschwarzer.net Fri Apr 9 07:49:33 2010 From: trac at ftputil.sschwarzer.net (ftputil) Date: Fri, 09 Apr 2010 05:49:33 -0000 Subject: [ftputil] #46: synchronize_times() throws ftputil.ftp_error.PermanentError on failed file creation In-Reply-To: <049.b828f22d1d64644e85649e21e3a5242b@ftputil.sschwarzer.net> References: <049.b828f22d1d64644e85649e21e3a5242b@ftputil.sschwarzer.net> Message-ID: <058.1ee9dd40b6e42eb3392314098525077e@ftputil.sschwarzer.net> #46: synchronize_times() throws ftputil.ftp_error.PermanentError on failed file creation -----------------------+---------------------------------------------------- Reporter: ssteiner | Owner: schwa Type: defect | Status: closed Priority: major | Milestone: 2.5 Component: Library | Version: 2.4.2b2 Resolution: fixed | Keywords: -----------------------+---------------------------------------------------- Changes (by schwa): * status: assigned => closed * resolution: => fixed Comment: That's a good idea. I included the directory in changeset [2fdba7fd42ba]. -- Ticket URL: ftputil Python FTP client library From trac at ftputil.sschwarzer.net Tue Jun 15 09:34:12 2010 From: trac at ftputil.sschwarzer.net (ftputil) Date: Tue, 15 Jun 2010 07:34:12 -0000 Subject: [ftputil] #51: _FTPFile.close() blocks after reading only a part of a file Message-ID: <046.5465cad2d2073205b6e4d928b8ca40c8@ftputil.sschwarzer.net> #51: _FTPFile.close() blocks after reading only a part of a file -------------------------------------+-------------------------------------- Reporter: schwa | Owner: schwa Type: defect | Status: new Priority: major | Milestone: 2.5 Component: Library | Version: 2.4.2 Keywords: FTPFile, file, blocking | -------------------------------------+-------------------------------------- After opening a remote file for reading, a subsequent call of the file's `close` method blocks: {{{ >>> h = ftputil.FTPHost("localhost", 'ftptest', password) >>> f = h.file("debian-keyring.tar.gz", 'rb') >>> data = f.read(100) >>> f.close() # blocks ^CTraceback (most recent call last): File "", line 1, in File "ftp_file.py", line 280, in close ftp_error._try_with_ioerror(self._session.voidresp) File "ftp_error.py", line 168, in _try_with_ioerror return callee(*args, **kwargs) File "/usr/lib/python2.6/ftplib.py", line 223, in voidresp resp = self.getresp() File "/usr/lib/python2.6/ftplib.py", line 209, in getresp resp = self.getmultiline() File "/usr/lib/python2.6/ftplib.py", line 195, in getmultiline line = self.getline() File "/usr/lib/python2.6/ftplib.py", line 182, in getline line = self.file.readline() File "/usr/lib/python2.6/socket.py", line 406, in readline data = self._sock.recv(self._rbufsize) KeyboardInterrupt >>> h.close() >>> h = ftputil.FTPHost("localhost", 'ftptest', password) >>> f = h.file("debian-keyring.tar.gz", 'rb') >>> data = f.read() >>> f.close() # succeeds >>> h.close() }}} Reading an incomplete file with a following close operation ''used to work''; I noticed the problem through a failing unit test (`_test_real_ftp.RealFTPTest.test_open_for_reading`) which opens the above test file and immediately after that closes it. -- Ticket URL: ftputil Python FTP client library From trac at ftputil.sschwarzer.net Tue Jun 15 09:37:57 2010 From: trac at ftputil.sschwarzer.net (ftputil) Date: Tue, 15 Jun 2010 07:37:57 -0000 Subject: [ftputil] #51: _FTPFile.close() blocks after reading only a part of a file In-Reply-To: <046.5465cad2d2073205b6e4d928b8ca40c8@ftputil.sschwarzer.net> References: <046.5465cad2d2073205b6e4d928b8ca40c8@ftputil.sschwarzer.net> Message-ID: <055.7c0a9fcca586501551903f6a4d008c31@ftputil.sschwarzer.net> #51: _FTPFile.close() blocks after reading only a part of a file ----------------------+----------------------------------------------------- Reporter: schwa | Owner: schwa Type: defect | Status: assigned Priority: major | Milestone: 2.5 Component: Library | Version: 2.4.2 Resolution: | Keywords: FTPFile, file, blocking ----------------------+----------------------------------------------------- Changes (by schwa): * status: new => assigned Comment: Since my last work on ftputil, I updated my desktop system from Ubuntu 9.10 to 10.04. The version changes of Python and the local FTP server, PureFTPd, and maybe other components might have something to do with the bug. -- Ticket URL: ftputil Python FTP client library From trac at ftputil.sschwarzer.net Tue Jun 15 09:49:58 2010 From: trac at ftputil.sschwarzer.net (ftputil) Date: Tue, 15 Jun 2010 07:49:58 -0000 Subject: [ftputil] #51: _FTPFile.close() blocks after reading only a part of a file In-Reply-To: <046.5465cad2d2073205b6e4d928b8ca40c8@ftputil.sschwarzer.net> References: <046.5465cad2d2073205b6e4d928b8ca40c8@ftputil.sschwarzer.net> Message-ID: <055.227f3d77f9d6d5b3690fe7d48832b871@ftputil.sschwarzer.net> #51: _FTPFile.close() blocks after reading only a part of a file ----------------------+----------------------------------------------------- Reporter: schwa | Owner: schwa Type: defect | Status: assigned Priority: major | Milestone: 2.5 Component: Library | Version: 2.4.2 Resolution: | Keywords: FTPFile, file, blocking ----------------------+----------------------------------------------------- Comment(by schwa): All these tests succeed without blocking: {{{ >>> import ftputil >>> h = ftputil.FTPHost("ftp.gnome.org", "anonymous", "") >>> h.listdir(h.curdir) ['HEADER.html', ...] >>> h.path.isfile("HEADER.html") True >>> h.download("HEADER.html", "HEADER.html", "b") >>> f = h.file("HEADER.html") >>> data = f.read() >>> f.close() >>> data[:20] '
\n           '

 >>> f = h.file("HEADER.html")
 >>> data = f.read(10)
 >>> f.close()
 >>> h.close()

 >>> h = ftputil.FTPHost("ftp.gnome.org", "anonymous", "")
 >>> f = h.file("HEADER.html")
 >>> data = f.read(10)
 >>> f.close()
 >>> h.close()

 >>> h = ftputil.FTPHost("ftp.gnome.org", "anonymous", "")
 >>> f = h.file("HEADER.html")
 >>> f.close()
 >>> h.close()

 >>> h = ftputil.FTPHost("ftp.gnome.org", "anonymous", "")
 >>> f = h.file("HEADER.html", "rb")
 >>> f.close()
 >>> h.close()
 }}}
 This ''indicates'' (I won't say "prove" yet) a problematic change
 regarding the local FTP test server or its configuration.

-- 
Ticket URL: 
ftputil 
Python FTP client library

From trac at ftputil.sschwarzer.net  Tue Jun 15 10:02:13 2010
From: trac at ftputil.sschwarzer.net (ftputil)
Date: Tue, 15 Jun 2010 08:02:13 -0000
Subject: [ftputil] #51: _FTPFile.close() blocks after reading only a
	part of a file
In-Reply-To: <046.5465cad2d2073205b6e4d928b8ca40c8@ftputil.sschwarzer.net>
References: <046.5465cad2d2073205b6e4d928b8ca40c8@ftputil.sschwarzer.net>
Message-ID: <055.9d9077c2c743919deb85afbe3579a7db@ftputil.sschwarzer.net>

#51: _FTPFile.close() blocks after reading only a part of a file
----------------------+-----------------------------------------------------
  Reporter:  schwa    |       Owner:  schwa                  
      Type:  defect   |      Status:  assigned               
  Priority:  major    |   Milestone:  2.5                    
 Component:  Library  |     Version:  2.4.2                  
Resolution:           |    Keywords:  FTPFile, file, blocking
----------------------+-----------------------------------------------------

Comment(by schwa):

 As I have my local `/etc` directory under version control I just checked
 and didn't find changes from the Ubuntu upgrade in `/etc/default/pure-
 ftpd-common` (the only PureFTPd-related file in the directory) or in the
 directory `/etc/pure-ftpd`.

 There are also no signs of a problem in the log file of the local
 firewall.

-- 
Ticket URL: 
ftputil 
Python FTP client library

From trac at ftputil.sschwarzer.net  Tue Jun 15 10:11:51 2010
From: trac at ftputil.sschwarzer.net (ftputil)
Date: Tue, 15 Jun 2010 08:11:51 -0000
Subject: [ftputil] #51: _FTPFile.close() blocks after reading only a
	part of a file
In-Reply-To: <046.5465cad2d2073205b6e4d928b8ca40c8@ftputil.sschwarzer.net>
References: <046.5465cad2d2073205b6e4d928b8ca40c8@ftputil.sschwarzer.net>
Message-ID: <055.b53524ef37ca50dde1946b16800b4b9a@ftputil.sschwarzer.net>

#51: _FTPFile.close() blocks after reading only a part of a file
----------------------+-----------------------------------------------------
  Reporter:  schwa    |       Owner:  schwa                  
      Type:  defect   |      Status:  assigned               
  Priority:  major    |   Milestone:  2.5                    
 Component:  Library  |     Version:  2.4.2                  
Resolution:           |    Keywords:  FTPFile, file, blocking
----------------------+-----------------------------------------------------

Comment(by schwa):

 I tried to access a file of several MB from `ftp.debian.org` and the test
 succeeded without blocking:
 {{{
 >>> h = ftputil.FTPHost("ftp.debian.org", "anonymous", "")
 >>> f = h.file("debian/dists/Debian5.0.4/Contents-i386.gz", "rb")
 >>> f.close()
 >>> h.path.getsize("debian/dists/Debian5.0.4/Contents-i386.gz")
 13824603
 >>> h.close()
 }}}

-- 
Ticket URL: 
ftputil 
Python FTP client library

From trac at ftputil.sschwarzer.net  Tue Jun 15 14:11:34 2010
From: trac at ftputil.sschwarzer.net (ftputil)
Date: Tue, 15 Jun 2010 12:11:34 -0000
Subject: [ftputil] #51: _FTPFile.close() blocks after reading only a
	part of a file
In-Reply-To: <046.5465cad2d2073205b6e4d928b8ca40c8@ftputil.sschwarzer.net>
References: <046.5465cad2d2073205b6e4d928b8ca40c8@ftputil.sschwarzer.net>
Message-ID: <055.efc90f17a4af3a70affe60ab2786d8bc@ftputil.sschwarzer.net>

#51: _FTPFile.close() blocks after reading only a part of a file
----------------------+-----------------------------------------------------
  Reporter:  schwa    |       Owner:  schwa                  
      Type:  defect   |      Status:  assigned               
  Priority:  major    |   Milestone:  2.5                    
 Component:  Library  |     Version:  2.4.2                  
Resolution:           |    Keywords:  FTPFile, file, blocking
----------------------+-----------------------------------------------------

Comment(by schwa):

 Here are two sessions which show the bug or not. The debugging info comes
 from an additional line
 {{{
 self._session.debug(1)
 }}}
 in `ftputil.FTPHost.__init__` after
 {{{
 self._session = self._make_session()
 }}}
 (`_session` is an `ftplib.FTP` object.)

 ''Session 1 (local, with bug):''
 {{{
 >>> h = ftputil.FTPHost("localhost", 'ftptest', password)
 *cmd* 'PWD'
 *resp* '257 "/" is your current location'
 >>> f = h.file("debian-keyring.tar.gz", 'rb')
 *cmd* 'PWD'
 *resp* '257 "/" is your current location'
 *cmd* 'CWD /'
 *resp* '250 OK. Current directory is /'
 *cmd* 'TYPE I'
 *resp* '200 TYPE is now 8-bit binary'
 *cmd* 'PASV'
 *resp* '227 Entering Passive Mode (127,0,0,1,18,172)'
 *cmd* 'RETR debian-keyring.tar.gz'
 *resp* '150-Accepted data connection\n150 13384.7 kbytes to download'
 >>> f.close()
 ^C
 }}}

 ''Session 2 (remote, without bug):''
 {{{
 >>> h = ftputil.FTPHost("ftp.debian.org", "anonymous", "")
 *cmd* 'PWD'
 *resp* '257 "/"'
 >>> f = h.file("debian/dists/Debian5.0.4/Contents-i386.gz", "rb")
 *cmd* 'PWD'
 *resp* '257 "/"'
 *cmd* 'CWD /debian/dists/Debian5.0.4'
 *resp* '250 Directory successfully changed.'
 *cmd* 'TYPE I'
 *resp* '200 Switching to Binary mode.'
 *cmd* 'PASV'
 *resp* '227 Entering Passive Mode (130,89,149,226,177,188)'
 *cmd* 'RETR Contents-i386.gz'
 *resp* '150 Opening BINARY mode data connection for Contents-i386.gz
 (13824603 bytes).'
 >>> f.close()
 *resp* '426 Failure writing network stream.'
 >>> h.close()
 }}}

 Both sessions look very similar; they share the same commands and return
 status codes. The last message from the local FTP server contains an
 hyphen after the status code ("150-Accepted data connection\n150 13384.7
 kbytes to download") which might confuse `ftplib` or `ftputil`. Moreover,
 there's a line break in the message which might cause problems.

-- 
Ticket URL: 
ftputil 
Python FTP client library

From trac at ftputil.sschwarzer.net  Tue Jun 15 14:18:18 2010
From: trac at ftputil.sschwarzer.net (ftputil)
Date: Tue, 15 Jun 2010 12:18:18 -0000
Subject: [ftputil] #51: _FTPFile.close() blocks after reading only a
	part of a file
In-Reply-To: <046.5465cad2d2073205b6e4d928b8ca40c8@ftputil.sschwarzer.net>
References: <046.5465cad2d2073205b6e4d928b8ca40c8@ftputil.sschwarzer.net>
Message-ID: <055.3b8c6dd2696fd53ab9d3a0732bae3021@ftputil.sschwarzer.net>

#51: _FTPFile.close() blocks after reading only a part of a file
----------------------+-----------------------------------------------------
  Reporter:  schwa    |       Owner:  schwa                  
      Type:  defect   |      Status:  assigned               
  Priority:  major    |   Milestone:  2.5                    
 Component:  Library  |     Version:  2.4.2                  
Resolution:           |    Keywords:  FTPFile, file, blocking
----------------------+-----------------------------------------------------

Comment(by schwa):

 Here are two sessions with the data completely transferred before the
 remote file is closed.

 ''Session 1, local:''
 {{{
 >>> h = ftputil.FTPHost("localhost", 'ftptest', password)
 *cmd* 'PWD'
 *resp* '257 "/" is your current location'
 >>> f = h.file("debian-keyring.tar.gz", 'rb')
 *cmd* 'PWD'
 *resp* '257 "/" is your current location'
 *cmd* 'CWD /'
 *resp* '250 OK. Current directory is /'
 *cmd* 'TYPE I'
 *resp* '200 TYPE is now 8-bit binary'
 *cmd* 'PASV'
 *resp* '227 Entering Passive Mode (127,0,0,1,154,160)'
 *cmd* 'RETR debian-keyring.tar.gz'
 *resp* '150-Accepted data connection\n150 13384.7 kbytes to download'
 >>> data = f.read()
 >>> f.close()
 *resp* '226-File successfully transferred\n226 10.700 seconds (measured
 here), 1.22 Mbytes per second'
 >>> h.close()
 >>>
 }}}

 ''Session 2, remote:''
 {{{
 >>> h = ftputil.FTPHost("ftp.debian.org", "anonymous", "")
 *cmd* 'PWD'
 *resp* '257 "/"'
 >>> f = h.file("debian/dists/Debian5.0.4/Contents-i386.gz", "rb")
 *cmd* 'PWD'
 *resp* '257 "/"'
 *cmd* 'CWD /debian/dists/Debian5.0.4'
 *resp* '250 Directory successfully changed.'
 *cmd* 'TYPE I'
 *resp* '200 Switching to Binary mode.'
 *cmd* 'PASV'
 *resp* '227 Entering Passive Mode (130,89,149,226,29,216)'
 *cmd* 'RETR Contents-i386.gz'
 *resp* '150 Opening BINARY mode data connection for Contents-i386.gz
 (13824603 bytes).'
 >>> data = f.read()
 >>> f.close()
 *resp* '226 File send OK.'
 >>> h.close()
 >>>
 }}}

 Again, both sessions look very similar.

-- 
Ticket URL: 
ftputil 
Python FTP client library

From trac at ftputil.sschwarzer.net  Wed Jun 16 13:50:37 2010
From: trac at ftputil.sschwarzer.net (ftputil)
Date: Wed, 16 Jun 2010 11:50:37 -0000
Subject: [ftputil] #51: _FTPFile.close() blocks after reading only a
	part of a file
In-Reply-To: <046.5465cad2d2073205b6e4d928b8ca40c8@ftputil.sschwarzer.net>
References: <046.5465cad2d2073205b6e4d928b8ca40c8@ftputil.sschwarzer.net>
Message-ID: <055.b613c433455a0a9acb0d9805664be2bb@ftputil.sschwarzer.net>

#51: _FTPFile.close() blocks after reading only a part of a file
----------------------+-----------------------------------------------------
  Reporter:  schwa    |       Owner:  schwa                  
      Type:  defect   |      Status:  assigned               
  Priority:  major    |   Milestone:  2.5                    
 Component:  Library  |     Version:  2.4.2                  
Resolution:           |    Keywords:  FTPFile, file, blocking
----------------------+-----------------------------------------------------

Comment(by schwa):

 I used the attached helper script `test_ticket_51.py` to find a threshold
 above which closing a file blocks with my local FTP server.

 I find that a file of size 65536 (2**16) is opened for reading and is
 closed successfully whereas closing a file with 65537 bytes fails. For
 comparison, the value `_rbufsize` from the above traceback, aka
 `_FTPFile._fo._rbufsize`, is 8192 (2**13). I had assumed the size
 threshold to be `_rbufsize`. Maybe all files with a size a multiple of
 8192 are closed fine; I'll look at that next.

-- 
Ticket URL: 
ftputil 
Python FTP client library

From trac at ftputil.sschwarzer.net  Wed Jun 16 13:54:39 2010
From: trac at ftputil.sschwarzer.net (ftputil)
Date: Wed, 16 Jun 2010 11:54:39 -0000
Subject: [ftputil] #51: _FTPFile.close() blocks after reading only a
	part of a file
In-Reply-To: <046.5465cad2d2073205b6e4d928b8ca40c8@ftputil.sschwarzer.net>
References: <046.5465cad2d2073205b6e4d928b8ca40c8@ftputil.sschwarzer.net>
Message-ID: <055.547c408ad1bf5473f9404a51fdb9854b@ftputil.sschwarzer.net>

#51: _FTPFile.close() blocks after reading only a part of a file
----------------------+-----------------------------------------------------
  Reporter:  schwa    |       Owner:  schwa                  
      Type:  defect   |      Status:  assigned               
  Priority:  major    |   Milestone:  2.5                    
 Component:  Library  |     Version:  2.4.2                  
Resolution:           |    Keywords:  FTPFile, file, blocking
----------------------+-----------------------------------------------------

Comment(by schwa):

 Here's the output from the test script with a slightly changed size
 calculation:
 {{{
 Testing testdata_0
 Testing testdata_8192
 Testing testdata_16384
 Testing testdata_24576
 Testing testdata_32768
 Testing testdata_40960
 Testing testdata_49152
 Testing testdata_57344
 Testing testdata_65536
 Testing testdata_73728
 }}}
 So seemingly there's in fact a limit at 65536 as indicated in comment
 [comment:7].

-- 
Ticket URL: 
ftputil 
Python FTP client library

From trac at ftputil.sschwarzer.net  Wed Jun 16 13:57:20 2010
From: trac at ftputil.sschwarzer.net (ftputil)
Date: Wed, 16 Jun 2010 11:57:20 -0000
Subject: [ftputil] #51: _FTPFile.close() blocks after reading only a
	part of a file
In-Reply-To: <046.5465cad2d2073205b6e4d928b8ca40c8@ftputil.sschwarzer.net>
References: <046.5465cad2d2073205b6e4d928b8ca40c8@ftputil.sschwarzer.net>
Message-ID: <055.26c1a9b36c169f36f328bdb21ba44c58@ftputil.sschwarzer.net>

#51: _FTPFile.close() blocks after reading only a part of a file
----------------------+-----------------------------------------------------
  Reporter:  schwa    |       Owner:  schwa                  
      Type:  defect   |      Status:  assigned               
  Priority:  major    |   Milestone:  2.5                    
 Component:  Library  |     Version:  2.4.2                  
Resolution:           |    Keywords:  FTPFile, file, blocking
----------------------+-----------------------------------------------------

Comment(by schwa):

 Note: In the above comment, the output blocked after the last line (saying
 "testdata_73728"). The last size tried would have been 155648 (19 * 8192).

-- 
Ticket URL: 
ftputil 
Python FTP client library

From trac at ftputil.sschwarzer.net  Wed Jun 16 23:28:36 2010
From: trac at ftputil.sschwarzer.net (ftputil)
Date: Wed, 16 Jun 2010 21:28:36 -0000
Subject: [ftputil] #51: _FTPFile.close() blocks after reading only a
	part of a file
In-Reply-To: <046.5465cad2d2073205b6e4d928b8ca40c8@ftputil.sschwarzer.net>
References: <046.5465cad2d2073205b6e4d928b8ca40c8@ftputil.sschwarzer.net>
Message-ID: <055.7488f0bfa2bd615271bc3ead0e4b7c73@ftputil.sschwarzer.net>

#51: _FTPFile.close() blocks after reading only a part of a file
----------------------+-----------------------------------------------------
  Reporter:  schwa    |       Owner:  schwa                  
      Type:  defect   |      Status:  assigned               
  Priority:  major    |   Milestone:  2.5                    
 Component:  Library  |     Version:  2.4.2                  
Resolution:           |    Keywords:  FTPFile, file, blocking
----------------------+-----------------------------------------------------

Comment(by schwa):

 The tests run on the notebook with Ubuntu 9.10 - no blocking.

 The version of PureFTPd on my notebook is 1.0.22-1 whereas on the desktop
 it's 1.0.24-1. I downloaded PureFTPd from http://download.pureftpd.org/pub
 /pure-ftpd/releases/pure-ftpd-1.0.24.tar.bz2 and did
 {{{
 $ ./configure --prefix= --with-puredb
 $ make
 $ make install
 }}}

 After that, I stopped the "native" daemon installed with `aptitude`,
 started the new daemon and entered this test in the Python interpreter:
 {{{
 >>> h = ftputil.FTPHost("localhost", 'ftptest', password)
 >>> f = h.file("debian-keyring.tar.gz", 'rb')
 >>> f.close()
 }}}

 Result: The call `f.close()` blocked. So the blocking appears to be an
 effect of Ubuntu's new(er) version of PureFTPd! For the record, the
 current PureFTPd version is 1.0.29.

-- 
Ticket URL: 
ftputil 
Python FTP client library

From trac at ftputil.sschwarzer.net  Thu Jun 17 11:56:24 2010
From: trac at ftputil.sschwarzer.net (ftputil)
Date: Thu, 17 Jun 2010 09:56:24 -0000
Subject: [ftputil] #51: _FTPFile.close() blocks after reading only a
	part of a file
In-Reply-To: <046.5465cad2d2073205b6e4d928b8ca40c8@ftputil.sschwarzer.net>
References: <046.5465cad2d2073205b6e4d928b8ca40c8@ftputil.sschwarzer.net>
Message-ID: <055.e2f5ad00c4bcd80df0b93ba73bbc5963@ftputil.sschwarzer.net>

#51: _FTPFile.close() blocks after reading only a part of a file
----------------------+-----------------------------------------------------
  Reporter:  schwa    |       Owner:  schwa                  
      Type:  defect   |      Status:  assigned               
  Priority:  major    |   Milestone:  2.5                    
 Component:  Library  |     Version:  2.4.2                  
Resolution:           |    Keywords:  FTPFile, file, blocking
----------------------+-----------------------------------------------------

Comment(by schwa):

 A test with PureFTPd 1.0.29 on my desktop system gives me:
 {{{
 >>> h = ftputil.FTPHost("localhost", 'ftptest', password)
 >>> f = h.file("debian-keyring.tar.gz", 'rb')
 >>> f.close()
 Traceback (most recent call last):
   File "", line 1, in 
   File "ftp_file.py", line 280, in close
     ftp_error._try_with_ioerror(self._session.voidresp)
   File "ftp_error.py", line 173, in _try_with_ioerror
     raise FTPIOError(*exc.args)
 FTPIOError: 150 3.250 seconds (measured here), 39.39 Kbytes per second
 Debugging info: ftputil 2.4.2, Python 2.6.5 (linux2)
 }}}

 A debugging print statement reveals that the exception on the `ftplib`
 side is a `ftplib.error_reply` whose comment says "unexpected ![123]xx
 reply" which makes perfect sense from the view of `ftplib`. Normally, a
 client would expect a complete transfer and then a 226 status code when
 the connection is closed.

-- 
Ticket URL: 
ftputil 
Python FTP client library

From trac at ftputil.sschwarzer.net  Thu Jun 17 14:03:05 2010
From: trac at ftputil.sschwarzer.net (ftputil)
Date: Thu, 17 Jun 2010 12:03:05 -0000
Subject: [ftputil] #51: _FTPFile.close() blocks after reading only a
	part of a file
In-Reply-To: <046.5465cad2d2073205b6e4d928b8ca40c8@ftputil.sschwarzer.net>
References: <046.5465cad2d2073205b6e4d928b8ca40c8@ftputil.sschwarzer.net>
Message-ID: <055.fc2887d5cfa92fdc8cf9c7550a62fbe9@ftputil.sschwarzer.net>

#51: _FTPFile.close() blocks after reading only a part of a file
----------------------+-----------------------------------------------------
  Reporter:  schwa    |       Owner:  schwa                  
      Type:  defect   |      Status:  assigned               
  Priority:  major    |   Milestone:  2.5                    
 Component:  Library  |     Version:  2.4.2                  
Resolution:           |    Keywords:  FTPFile, file, blocking
----------------------+-----------------------------------------------------

Comment(by schwa):

 The traceback with the `FTPIOError` for PureFTPd 1.0.29 (see comment
 [comment:11]) occurs only if there's a pause between opening the file and
 closing it. If the open and close operations follow immediately after each
 other, the connection just blocks and finally results in a timeout from
 the FTP server side.

-- 
Ticket URL: 
ftputil 
Python FTP client library

From trac at ftputil.sschwarzer.net  Thu Jun 17 15:02:38 2010
From: trac at ftputil.sschwarzer.net (ftputil)
Date: Thu, 17 Jun 2010 13:02:38 -0000
Subject: [ftputil] #51: _FTPFile.close() blocks after reading only a
	part of a file
In-Reply-To: <046.5465cad2d2073205b6e4d928b8ca40c8@ftputil.sschwarzer.net>
References: <046.5465cad2d2073205b6e4d928b8ca40c8@ftputil.sschwarzer.net>
Message-ID: <055.9f323b62c2e388d8988f5b5ce5d2974b@ftputil.sschwarzer.net>

#51: _FTPFile.close() blocks after reading only a part of a file
----------------------+-----------------------------------------------------
  Reporter:  schwa    |       Owner:  schwa                  
      Type:  defect   |      Status:  closed                 
  Priority:  major    |   Milestone:  2.5                    
 Component:  Library  |     Version:  2.4.2                  
Resolution:  fixed    |    Keywords:  FTPFile, file, blocking
----------------------+-----------------------------------------------------
Changes (by schwa):

  * status:  assigned => closed
  * resolution:  => fixed


Comment:

 I committed a fix for the 150 status code in changeset [4f4a4541b97a] and
 one for blocking close operations in changeset [dc80d10de7eb].

-- 
Ticket URL: 
ftputil 
Python FTP client library

From trac at ftputil.sschwarzer.net  Thu Jun 17 18:05:22 2010
From: trac at ftputil.sschwarzer.net (ftputil)
Date: Thu, 17 Jun 2010 16:05:22 -0000
Subject: [ftputil] #49: Drop 2.3 support, make 2.5 for Python 2.5 +
In-Reply-To: <049.d383a7b59bc6808786bc82b0a1ca4ffc@ftputil.sschwarzer.net>
References: <049.d383a7b59bc6808786bc82b0a1ca4ffc@ftputil.sschwarzer.net>
Message-ID: <058.e0161f93e5018cd5e71de4eda9204f41@ftputil.sschwarzer.net>

#49: Drop 2.3 support, make 2.5 for Python 2.5 +
-----------------------+----------------------------------------------------
  Reporter:  ssteiner  |       Owner:  schwa 
      Type:  defect    |      Status:  closed
  Priority:  major     |   Milestone:  2.5   
 Component:  Library   |     Version:  2.4.2 
Resolution:  wontfix   |    Keywords:        
-----------------------+----------------------------------------------------
Changes (by schwa):

  * status:  new => closed
  * resolution:  => wontfix


Comment:

 The topic was
 [http://codespeak.net/pipermail/ftputil/2010q2/thread.html#308 discussed
 on the mailing list] and the best approach seems to be to increase the
 minimum Python version for ftputil but to
 [http://codespeak.net/pipermail/ftputil/2010q2/000313.html stick to Python
 2.4] for now.

 At some point, we'll move forward and increase the minimum requirement to
 Python 2.5. When you think the time has come, please reopen the ticket.
 :-)

-- 
Ticket URL: 
ftputil 
Python FTP client library

From trac at ftputil.sschwarzer.net  Thu Jun 17 18:07:54 2010
From: trac at ftputil.sschwarzer.net (ftputil)
Date: Thu, 17 Jun 2010 16:07:54 -0000
Subject: [ftputil] #49: Drop 2.3 support, make 2.5 for Python 2.5 +
In-Reply-To: <049.d383a7b59bc6808786bc82b0a1ca4ffc@ftputil.sschwarzer.net>
References: <049.d383a7b59bc6808786bc82b0a1ca4ffc@ftputil.sschwarzer.net>
Message-ID: <058.96df76e76ce81e700959e825322fb2ff@ftputil.sschwarzer.net>

#49: Drop 2.3 support, make 2.5 for Python 2.5 +
-----------------------+----------------------------------------------------
  Reporter:  ssteiner  |       Owner:  schwa 
      Type:  defect    |      Status:  closed
  Priority:  minor     |   Milestone:  2.5   
 Component:  Library   |     Version:  2.4.2 
Resolution:  wontfix   |    Keywords:        
-----------------------+----------------------------------------------------
Changes (by schwa):

  * priority:  major => minor


Comment:

 I've set the priority to "minor" because this issue only regards people
 working ''on'' ftputil, not just ''using'' it. The library can be used
 with any Python version 2.x where x >= 4.

-- 
Ticket URL: 
ftputil 
Python FTP client library

From trac at ftputil.sschwarzer.net  Thu Jun 17 18:12:05 2010
From: trac at ftputil.sschwarzer.net (ftputil)
Date: Thu, 17 Jun 2010 16:12:05 -0000
Subject: [ftputil] #47: makefile has python 2.4 hardcoded,
	should default to system python
In-Reply-To: <049.c4a6201e7742dc4556fed202dcf086fd@ftputil.sschwarzer.net>
References: <049.c4a6201e7742dc4556fed202dcf086fd@ftputil.sschwarzer.net>
Message-ID: <058.99c4a2e1df87ea7572b1982e4da5cd57@ftputil.sschwarzer.net>

#47: makefile has python 2.4 hardcoded, should default to system python
-----------------------+----------------------------------------------------
  Reporter:  ssteiner  |       Owner:  schwa 
      Type:  defect    |      Status:  closed
  Priority:  major     |   Milestone:  2.5   
 Component:  Library   |     Version:  2.4.2 
Resolution:  fixed     |    Keywords:        
-----------------------+----------------------------------------------------
Changes (by schwa):

  * status:  assigned => closed
  * resolution:  => fixed


Comment:

 Since changeset [bf6c26a5a1fe] the test for Python 2.4 is only run if the
 interpreter is in the execution path.

-- 
Ticket URL: 
ftputil 
Python FTP client library

From trac at ftputil.sschwarzer.net  Thu Jun 17 18:14:05 2010
From: trac at ftputil.sschwarzer.net (ftputil)
Date: Thu, 17 Jun 2010 16:14:05 -0000
Subject: [ftputil] #50: Possible to remove 30 lines of copyright from
	top of every file?
In-Reply-To: <049.dd8b4cb196bda6da52ccde795418a405@ftputil.sschwarzer.net>
References: <049.dd8b4cb196bda6da52ccde795418a405@ftputil.sschwarzer.net>
Message-ID: <058.cf020aaa3a42182b8d252b4ad0ae1df9@ftputil.sschwarzer.net>

#50: Possible to remove 30 lines of copyright from top of every file?
--------------------------+-------------------------------------------------
  Reporter:  ssteiner     |       Owner:  schwa 
      Type:  enhancement  |      Status:  closed
  Priority:  major        |   Milestone:  2.5   
 Component:  Library      |     Version:  2.4.2 
Resolution:  fixed        |    Keywords:        
--------------------------+-------------------------------------------------
Changes (by schwa):

  * status:  assigned => closed
  * resolution:  => fixed


Comment:

 Finished in changeset [808476873684].

-- 
Ticket URL: 
ftputil 
Python FTP client library

From trac at ftputil.sschwarzer.net  Thu Jun 17 18:21:02 2010
From: trac at ftputil.sschwarzer.net (ftputil)
Date: Thu, 17 Jun 2010 16:21:02 -0000
Subject: [ftputil] #48: Instructions for running "real FTP access" test
	are unclear
In-Reply-To: <049.a6060a6e478da29a08f21c23836ae634@ftputil.sschwarzer.net>
References: <049.a6060a6e478da29a08f21c23836ae634@ftputil.sschwarzer.net>
Message-ID: <058.18bc52b03d5cf053ab457bd690cd93d7@ftputil.sschwarzer.net>

#48: Instructions for running "real FTP access" test are unclear
-----------------------+----------------------------------------------------
  Reporter:  ssteiner  |       Owner:  schwa     
      Type:  defect    |      Status:  assigned  
  Priority:  major     |   Milestone:            
 Component:  Library   |     Version:  2.4.2     
Resolution:            |    Keywords:  tests docs
-----------------------+----------------------------------------------------
Changes (by schwa):

  * milestone:  2.5 =>


Comment:

 I did a workaround in changeset [ca06daa965b8]. I agree that there should
 be a cleaner solution.

-- 
Ticket URL: 
ftputil 
Python FTP client library