source: doc/announcements.txt @ 1969:9d48041ad00f

Last change on this file since 1969:9d48041ad00f was 1969:9d48041ad00f, checked in by Stefan Schwarzer <sschwarzer@…>, 16 months ago
Fix documentation link
File size: 44.5 KB
Line 
1ftputil 4.0.0 is now available from
2https://ftputil.sschwarzer.net/download .
3
4
5Changes since the last stable release 3.4
6-----------------------------------------
7
8Backward-incompatible changes
9~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
10
11This ftputil version isn't fully backward-compatible with the previous
12version. The backward-incompatible changes are:
13
14- Python 2 is no longer supported.
15
16- The minimum supported Python 3 version is 3.6.
17
18- By default, time stamps in directory listings coming from the server
19  are now assumed to be in UTC. Previously, listings were assumed to
20  use the local time of the client. [1]
21
22  Correspondingly, the definition of "time shift" has changed. The
23  time shift is now defined as the time zone used in server listings
24  (say, UTC+02:00) and UTC, in other words, the time shift now is the
25  time zone offset applied in the server listings. In earlier ftputil
26  versions, the time shift was defined as "time used in server
27  listings" minus "local client time."
28
29- The flag `use_list_a_option` of `FTPHost` instances is now set to
30  `False` by default. This option was intended to make life easier for
31  users, but turned out to be problematic [2].
32
33- As in `os.makedirs`, `FTPHost.makedirs` now supports the `exist_ok`
34  flag and uses the default of `False`. You can get the behavior of
35  ftputil 3.x by passing `exist_ok=True`. [3]
36
37If you need to use Python versions before 3.6, please use the previous
38stable ftputil version 3.4.
39
40
41Other changes
42~~~~~~~~~~~~~
43
44- Functions and methods which used to accept only `str` or `bytes`
45  paths now _also_ accept `PathLike` objects [4, 5].
46
47- Clear the stat cache when setting a new time shift value. [6]
48
49- ftputil now officially follows semantic versioning (SemVer) [7].
50  Actually ftputil has been following semantic versioning since a long
51  time (probably since version 2.0 in 2004), but it was never
52  explicitly guaranteed and new major versions were named x.0 instead
53  of x.0.0 and new minor versions x.y instead of x.y.0.
54
55- Internal changes: The tests were moved to pytest. The old mocking
56  approach was replaced by a "scripted session" approach.
57
58
59What is ftputil?
60----------------
61
62ftputil is a high-level FTP client library for the Python programming
63language. ftputil implements a virtual file system for accessing FTP
64servers, that is, it can generate file-like objects for remote files.
65The library supports many functions similar to those in the `os`,
66`os.path` and `shutil` modules. ftputil has convenience functions for
67conditional uploads and downloads, and handles FTP clients and servers
68in different timezones.
69
70See the documentation for details:
71https://ftputil.sschwarzer.net/trac/wiki/Documentation
72https://ftputil.sschwarzer.net/trac/wiki/WhatsNewInFtputil4.0.0
73
74
75License
76-------
77
78ftputil is open source software, released under the 3-clause BSD
79license (see https://opensource.org/licenses/BSD-3-Clause ).
80
81
82[1] https://ftputil.sschwarzer.net/trac/ticket/134
83[2] https://ftputil.sschwarzer.net/trac/ticket/110
84[3] https://ftputil.sschwarzer.net/trac/ticket/117
85[4] https://docs.python.org/3/library/os.html#os.PathLike
86[5] https://ftputil.sschwarzer.net/trac/ticket/119
87[6] https://ftputil.sschwarzer.net/trac/ticket/136
88[7] https://semver.org/
89
90
91Best regards,
92Stefan
93
94----------------------------------------------------------------------
95ftputil 3.4 is now available from
96http://ftputil.sschwarzer.net/download .
97
98
99Changes since version 3.3.1
100---------------------------
101
102- Several bugs were fixed [1-5].
103
104- Added deprecation warnings for backward incompatibilities in the
105  upcoming ftputil 4.0.0.
106
107
108Important note
109--------------
110
111The next version of ftputil will be 4.0.0 (apart from small fixes in
112possible 3.4.x versions).
113
114ftputil 4.0.0 will make some backward-incompatible changes:
115
116- Support for Python 2 will be removed. There are several reasons for
117  this, which are explained in [6].
118
119- The flag `use_list_a_option` will be set to `False` by default. This
120  option was intended to make life easier for users, but turned out to
121  be problematic (see [7]).
122
123
124What is ftputil?
125----------------
126
127ftputil is a high-level FTP client library for the Python programming
128language. ftputil implements a virtual file system for accessing FTP
129servers, that is, it can generate file-like objects for remote files.
130The library supports many functions similar to those in the os,
131os.path and shutil modules. ftputil has convenience functions for
132conditional uploads and downloads, and handles FTP clients and servers
133in different timezones.
134
135See the documentation for details:
136http://ftputil.sschwarzer.net/trac/wiki/Documentation
137
138
139License
140-------
141
142ftputil is open source software, released under the revised BSD
143license (see http://opensource.org/licenses/BSD-3-Clause ).
144
145
146[1] http://ftputil.sschwarzer.net/trac/ticket/107
147[2] http://ftputil.sschwarzer.net/trac/ticket/109
148[3] http://ftputil.sschwarzer.net/trac/ticket/112
149[4] http://ftputil.sschwarzer.net/trac/ticket/113
150[5] http://ftputil.sschwarzer.net/trac/ticket/114
151[6] http://lists.sschwarzer.net/pipermail/ftputil/2017q3/000465.html
152[7] http://ftputil.sschwarzer.net/trac/ticket/110
153
154
155Best regards,
156Stefan
157
158----------------------------------------------------------------------
159ftputil 3.3.1 is now available from
160http://ftputil.sschwarzer.net/download .
161
162Changes since version 3.3
163-------------------------
164
165- Fixed a bug where a 226 reply after a remote file close would only
166  show up later when doing a `pwd` call on the session. [1] This
167  resulted in an `ftplib.error_reply` exception when opening a remote
168  file.
169
170Note that ftputil 3.0 broke backward compatibility with ftputil 2.8
171and before. The differences are described here:
172http://ftputil.sschwarzer.net/trac/wiki/WhatsNewInFtputil3.0
173
174What is ftputil?
175----------------
176
177ftputil is a high-level FTP client library for the Python programming
178language. ftputil implements a virtual file system for accessing FTP
179servers, that is, it can generate file-like objects for remote files.
180The library supports many functions similar to those in the os,
181os.path and shutil modules. ftputil has convenience functions for
182conditional uploads and downloads, and handles FTP clients and servers
183in different timezones.
184
185See the documentation for details:
186http://ftputil.sschwarzer.net/trac/wiki/Documentation
187
188License
189-------
190
191ftputil is open source software, released under the revised BSD
192license (see http://opensource.org/licenses/BSD-3-Clause ).
193
194[1] http://ftputil.sschwarzer.net/trac/ticket/102
195
196Stefan
197
198----------------------------------------------------------------------
199ftputil 3.3 is now available from
200http://ftputil.sschwarzer.net/download .
201
202Changes since version 3.2
203-------------------------
204
205- Added `rest` argument to `FTPHost.open` for recovery after
206  interrupted transfers [1].
207
208- Fixed handling of non-ASCII directory and file names under
209  Python 2 [2]. Under Python 3, the directory and file names could
210  already contain any characters from the ISO 5589-1 (latin-1)
211  character set. Under Python 2, non-ASCII characters (even out
212  of the latin-1 character set) resulted in a `UnicodeEncodeError`.
213  Now Python 2 behaves like Python 3, supporting all latin-1
214  characters.
215
216  Note that for interoperability between servers and clients it's
217  still usually safest to use only ASCII characters for directory and
218  file names.
219
220- Changed `FTPHost.makedirs` for better handling of "virtual
221  directories" [3, 4]. Thanks to Roger Demetrescu for the
222  implementation.
223
224- Small improvements [5, 6, 7]
225
226Upgrading is recommended.
227
228Note that ftputil 3.0 broke backward compatibility with ftputil 2.8
229and before. The differences are described here:
230http://ftputil.sschwarzer.net/trac/wiki/WhatsNewInFtputil3.0
231
232What is ftputil?
233----------------
234
235ftputil is a high-level FTP client library for the Python programming
236language. ftputil implements a virtual file system for accessing FTP
237servers, that is, it can generate file-like objects for remote files.
238The library supports many functions similar to those in the os,
239os.path and shutil modules. ftputil has convenience functions for
240conditional uploads and downloads, and handles FTP clients and servers
241in different timezones.
242
243See the documentation for details:
244http://ftputil.sschwarzer.net/trac/wiki/Documentation
245
246License
247-------
248
249ftputil is open source software, released under the revised BSD
250license (see http://opensource.org/licenses/BSD-3-Clause ).
251
252[1] http://ftputil.sschwarzer.net/trac/ticket/61
253[2] http://ftputil.sschwarzer.net/trac/ticket/100
254[3] http://ftputil.sschwarzer.net/trac/ticket/86
255[4] https://support.microsoft.com/en-us/kb/142853
256[5] http://ftputil.sschwarzer.net/trac/ticket/89
257[6] http://ftputil.sschwarzer.net/trac/ticket/91
258[7] http://ftputil.sschwarzer.net/trac/ticket/92
259
260Have fun! :-)
261
262Stefan
263
264----------------------------------------------------------------------
265ftputil 3.2 is now available from
266http://ftputil.sschwarzer.net/download .
267
268Changes since version 3.1
269-------------------------
270
271- For some platforms (notably Windows) modification datetimes before
272  the epoch would cause an `OverflowError` [1]. Other platforms could
273  return negative values. Since the Python documentation for the
274  `time` module [2] points out that values before the epoch might
275  cause problems, ftputil now sets the float value for such datetimes
276  to 0.0.
277
278  In theory, this might cause backward compatibility problems, but
279  it's very unlikely since pre-epoch timestamps in directory listings
280  should be very rare.
281
282- On some platforms, the `time.mktime` implementation could behave
283  strange and accept invalid date/time values. For example, a day
284  value of 32 would be accepted and implicitly cause a "wrap" to the
285  next month. Such invalid values now result in a `ParserError`.
286
287- Make error handling more robust where the underlying FTP session
288  factory (for example, `ftplib.FTP`) uses byte strings for exception
289  messages. [3]
290
291- Improved error handling for directory listings. As just one example,
292  previously a non-integer value for a day would unintentionally cause
293  a `ValueError`. Now this causes a `ParserError`.
294
295- Extracted socket file adapter module [4] so that it can be used
296  by other projects.
297
298Note that ftputil 3.0 broke backward compatibility with ftputil 2.8
299and before. The differences are described here:
300http://ftputil.sschwarzer.net/trac/wiki/WhatsNewInFtputil3.0
301
302What is ftputil?
303----------------
304
305ftputil is a high-level FTP client library for the Python programming
306language. ftputil implements a virtual file system for accessing FTP
307servers, that is, it can generate file-like objects for remote files.
308The library supports many functions similar to those in the os,
309os.path and shutil modules. ftputil has convenience functions for
310conditional uploads and downloads, and handles FTP clients and servers
311in different timezones.
312
313See the documentation for details:
314http://ftputil.sschwarzer.net/trac/wiki/Documentation
315
316License
317-------
318
319ftputil is open source software, released under the revised BSD
320license (see http://opensource.org/licenses/BSD-3-Clause ).
321
322[1] http://ftputil.sschwarzer.net/trac/ticket/83
323[2] https://docs.python.org/3/library/time.html
324[3] http://ftputil.sschwarzer.net/trac/ticket/85
325[4] http://ftputil.sschwarzer.net/trac/wiki/SocketFileAdapter
326
327Have fun! :-)
328
329Stefan
330
331----------------------------------------------------------------------
332ftputil 3.1 is now available from
333http://ftputil.sschwarzer.net/download .
334
335Changes since version 3.0
336-------------------------
337
338- Added support for `followlinks` parameter in `FTPHost.walk`. [1]
339
340- Trying to pickle `FTPHost` and `FTPFile` objects now raises explicit
341  `TypeError`s to make clear that not being able to pickle these
342  objects is intentional. [2]
343
344- Improved exception messages for socket errors [3].
345
346- Fixed handling of server error messages with non-ASCII characters
347  when running under Python 2.x. [4]
348
349- Added a generic "session factory factory" to make creation of
350  session factories easier for common use cases (encrypted
351  connections, non-default port, active/passive mode, FTP session
352  debug level and combination of these). [5] This includes a
353  workaround for `M2Crypto.ftpslib.FTP_TLS`; this class won't be
354  usable with ftputil 3.0 and up with just the session factory recipe
355  described in the documentation. [6]
356
357- Don't assume time zone differences to always be full hours, but
358  rather 15-minute units. [7] For example, according to [8], Nepal's
359  time zone is UTC+05:45.
360
361- Improved documentation on timeout handling. This includes
362  information on internal creation of additional FTP connections (for
363  remote files, including uploads and downloads). This may help
364  understand better why the `keep_alive` method is limited.
365
366Note that ftputil 3.0 broke backward compatibility with ftputil 2.8
367and before. The differences are described here:
368http://ftputil.sschwarzer.net/trac/wiki/WhatsNewInFtputil3.0
369
370What is ftputil?
371----------------
372
373ftputil is a high-level FTP client library for the Python programming
374language. ftputil implements a virtual file system for accessing FTP
375servers, that is, it can generate file-like objects for remote files.
376The library supports many functions similar to those in the os,
377os.path and shutil modules. ftputil has convenience functions for
378conditional uploads and downloads, and handles FTP clients and servers
379in different timezones.
380
381See the documentation for details:
382http://ftputil.sschwarzer.net/trac/wiki/Documentation
383
384License
385-------
386
387ftputil is open source software, released under the revised BSD
388license (see http://opensource.org/licenses/BSD-3-Clause ).
389
390[1] http://ftputil.sschwarzer.net/trac/ticket/73
391[2] http://ftputil.sschwarzer.net/trac/ticket/75
392[3] http://ftputil.sschwarzer.net/trac/ticket/76
393[4] http://ftputil.sschwarzer.net/trac/ticket/77
394[5] http://ftputil.sschwarzer.net/trac/ticket/78
395[6] http://ftputil.sschwarzer.net/trac/wiki/Documentation#session-factories
396[7] http://ftputil.sschwarzer.net/trac/ticket/81
397[8] http://en.wikipedia.org/wiki/Timezone#List_of_UTC_offsets
398
399Have fun! :-)
400
401Stefan
402
403----------------------------------------------------------------------
404ftputil 3.0 is now available from
405http://ftputil.sschwarzer.net/download .
406
407Changes since version 2.8
408-------------------------
409
410Note: This version of ftputil is _not_ backward-compatible
411with earlier versions.See the links below for information
412on adapting existing client code.
413
414- This version adds Python 3 compatibility! :-)
415
416  The same source is used for Python 2.x and Python 3.x.
417
418  I had to change the API to find a good compromise for
419  both Python versions.
420
421- ftputil now requires at least Python 2.6.
422
423- Remote file-like objects use the same semantics as Python's
424  `io` module. (This is the same as for the built-in `open`
425  function in Python 3.)
426
427- `ftputil.ftp_error` was renamed to `ftputil.error`.
428
429- For custom parsers, import `ftputil.parser` instead of
430  `ftputil.stat`.
431
432For more information please read
433http://ftputil.sschwarzer.net/trac/wiki/Documentation
434http://ftputil.sschwarzer.net/trac/wiki/WhatsNewInFtputil3.0
435
436What is ftputil?
437----------------
438
439ftputil is a high-level FTP client library for the Python programming
440language. ftputil implements a virtual file system for accessing FTP
441servers, that is, it can generate file-like objects for remote files.
442The library supports many functions similar to those in the os,
443os.path and shutil modules. ftputil has convenience functions for
444conditional uploads and downloads, and handles FTP clients and servers
445in different timezones.
446
447License
448-------
449
450ftputil is Open Source software, released under the revised BSD
451license (see http://opensource.org/licenses/BSD-3-Clause ).
452
453Stefan
454
455----------------------------------------------------------------------
456ftputil 2.8 is now available from
457http://ftputil.sschwarzer.net/download .
458
459Changes since version 2.7.1
460---------------------------
461
462- After some discussion [1] I decided to remove the auto-probing
463  before using the `-a` option for `LIST` [2] to find "hidden" files
464  and directories. The option is used by default now, without probing
465  for exceptions. If this new approach causes problems, you can use
466
467    ftp_host = ftputil.FTPHost(...)
468    ftp_host.use_list_a_option = False
469
470- Several bugs were fixed. [3]
471
472- The mailing lists have moved to
473
474    ftputil@lists.sschwarzer.net
475    ftputil-tickets@lists.sschwarzer.net
476
477  The ftputil list [4] requires a subscription before you can post.
478  The ftputil-tickets list [5] is read-only anyway.
479
480  Thanks to Codespeak.net for having hosted the lists for almost
481  ten years. :-)
482
483What is ftputil?
484----------------
485
486ftputil is a high-level FTP client library for the Python programming
487language. ftputil implements a virtual file system for accessing FTP
488servers, that is, it can generate file-like objects for remote files.
489The library supports many functions similar to those in the os,
490os.path and shutil modules. ftputil has convenience functions for
491conditional uploads and downloads, and handles FTP clients and servers
492in different timezones.
493
494Read the documentation at
495http://ftputil.sschwarzer.net/documentation .
496
497License
498-------
499
500ftputil is Open Source software, released under the revised BSD
501license (see http://opensource.org/licenses/BSD-3-Clause ).
502
503[1] http://ftputil.sschwarzer.net/trac/ticket/65
504[2] http://lists.sschwarzer.net/pipermail/ftputil/2012q3/000350.html
505[3] http://ftputil.sschwarzer.net/trac/ticket/39
506    http://ftputil.sschwarzer.net/trac/ticket/65
507    http://ftputil.sschwarzer.net/trac/ticket/66
508    http://ftputil.sschwarzer.net/trac/ticket/67
509    http://ftputil.sschwarzer.net/trac/ticket/69
510[4] http://lists.sschwarzer.net/listinfo/ftputil
511    http://lists.sschwarzer.net/listinfo/ftputil-tickets
512
513Stefan
514
515----------------------------------------------------------------------
516ftputil 2.7 is now available from
517http://ftputil.sschwarzer.net/download .
518
519Changes since version 2.6
520-------------------------
521
522- ftputil now explicitly tries to get hidden directory and file
523  names (names starting with a dot) from the FTP server. [1]
524
525  Before, ftputil used a `LIST` command to get directory listings, now
526  it uses `LIST -a` if the server doesn't explicitly reject its usage
527  upon login. Note that the server is free to ignore the `-a` option,
528  so "hidden" directories and files may still not be visible. Please
529  see [2] for details.
530
531  If you have code that _relies_ on "hidden" directory or file names
532  _not_ being visible, please update the code as necessary. If that's
533  presumably not possible, please send feedback to the mailing list [3]
534  or in private mail [4].
535
536- A bug in the experimental synchronization code was fixed [5]. Thanks
537  to Zhuo Qiang for his help. :-)
538
539What is ftputil?
540----------------
541
542ftputil is a high-level FTP client library for the Python programming
543language. ftputil implements a virtual file system for accessing FTP
544servers, that is, it can generate file-like objects for remote files.
545The library supports many functions similar to those in the os,
546os.path and shutil modules. ftputil has convenience functions for
547conditional uploads and downloads, and handles FTP clients and servers
548in different timezones.
549
550Read the documentation at
551http://ftputil.sschwarzer.net/documentation .
552
553License
554-------
555
556ftputil is Open Source software, released under the revised BSD
557license (see http://www.opensource.org/licenses/bsd-license.php ).
558
559[1] http://ftputil.sschwarzer.net/trac/ticket/23
560[2] http://ftputil.sschwarzer.net/trac/ticket/23#comment:4
561[3] http://codespeak.net/mailman/listinfo/ftputil
562    (note that you need to subscribe to the list to be able to post there)
563[4] sschwarzer@sschwarzer.net
564[5] http://ftputil.sschwarzer.net/trac/ticket/62
565
566Stefan
567
568----------------------------------------------------------------------
569ftputil 2.6 is now available from
570http://ftputil.sschwarzer.net/download .
571
572Changes since version 2.5
573-------------------------
574
575- The stat caching has been improved. There's now an "auto-grow"
576  feature for `FTPHost.listdir` which in turn applies to
577  `FTPHost.walk`. Moreover, there were several performance
578  optimizations.
579
580- A few bugs were fixed [1-3].
581
582What is ftputil?
583----------------
584
585ftputil is a high-level FTP client library for the Python programming
586language. ftputil implements a virtual file system for accessing FTP
587servers, that is, it can generate file-like objects for remote files.
588The library supports many functions similar to those in the os,
589os.path and shutil modules. ftputil has convenience functions for
590conditional uploads and downloads, and handles FTP clients and servers
591in different timezones.
592
593Read the documentation at
594http://ftputil.sschwarzer.net/documentation .
595
596License
597-------
598
599ftputil is Open Source software, released under the revised BSD
600license (see http://www.opensource.org/licenses/bsd-license.php ).
601
602[1] http://ftputil.sschwarzer.net/trac/ticket/53
603[2] http://ftputil.sschwarzer.net/trac/ticket/55
604[3] http://ftputil.sschwarzer.net/trac/ticket/56
605
606Stefan
607
608----------------------------------------------------------------------
609ftputil 2.5 is now available from
610http://ftputil.sschwarzer.net/download .
611
612Changes since version 2.4.2
613---------------------------
614
615- As announced over a year ago [1], the `xreadlines` method for
616  FTP file objects has been removed, and exceptions can no longer be
617  accessed via the `ftputil` namespace. Only use `ftp_error` to access
618  the exceptions.
619
620  The distribution contains a small tool `find_deprecated_code.py` to
621  scan a directory tree for the deprecated uses. Invoke the program
622  with the `--help` option to see a description.
623
624- Upload and download methods now accept a `callback` argument to do
625  things during a transfer. Modification time comparisons in
626  `upload_if_newer` and `download_if_newer` now consider the timestamp
627  precision of the remote file which may lead to some unnecessary
628  transfers. These can be avoided by waiting at least a minute between
629  calls of `upload_if_newer` (or `download_if_newer`) for the same
630  file. See the documentation for details [2].
631
632- The `FTPHost` class got a `keep_alive` method. It should be used
633  carefully though, not routinely. Please read the description [3] in
634  the documentation.
635
636- Several bugs were fixed [4-7].
637
638- The source code was restructured. The tests are now in a `test`
639  subdirectory and are no longer part of the release archive. You can
640  still get them via the source repository. Licensing matters have
641  been moved to a common `LICENSE` file.
642
643What is ftputil?
644----------------
645
646ftputil is a high-level FTP client library for the Python programming
647language. ftputil implements a virtual file system for accessing FTP
648servers, that is, it can generate file-like objects for remote files.
649The library supports many functions similar to those in the os,
650os.path and shutil modules. ftputil has convenience functions for
651conditional uploads and downloads, and handles FTP clients and servers
652in different timezones.
653
654Read the documentation at
655http://ftputil.sschwarzer.net/documentation .
656
657License
658-------
659
660ftputil is Open Source software, released under the revised BSD
661license (see http://www.opensource.org/licenses/bsd-license.php ).
662
663[1] http://codespeak.net/pipermail/ftputil/2009q1/000256.html
664[2] http://ftputil.sschwarzer.net/trac/wiki/Documentation#uploading-and-downloading-files
665[3] http://ftputil.sschwarzer.net/trac/wiki/Documentation#keep-alive
666[4] http://ftputil.sschwarzer.net/trac/ticket/44
667[5] http://ftputil.sschwarzer.net/trac/ticket/46
668[6] http://ftputil.sschwarzer.net/trac/ticket/47
669[7] http://ftputil.sschwarzer.net/trac/ticket/51
670
671Stefan
672
673----------------------------------------------------------------------
674ftputil 2.4.2 is now available from
675http://ftputil.sschwarzer.net/download .
676
677Changes since version 2.4.1
678---------------------------
679
680- Some FTP servers seem to have problems using *any* directory
681  argument which contains slashes. The new default for FTP commands
682  now is to change into the directory before actually invoking the
683  command on a relative path (report and fix suggestion by Nicola
684  Murino).
685
686- Calling the method ``FTPHost.stat_cache.resize`` with an argument 0
687  caused an exception. This has been fixed; a zero cache size now
688  of course doesn't cache anything but doesn't lead to a traceback
689  either.
690
691- The installation script ``setup.py`` didn't work with the ``--home``
692  option because it still tried to install the documentation in a
693  system directory (report by Albrecht Mühlenschulte).
694
695  As a side effect, when using the *global* installation, the
696  documentation is no longer installed in the ftputil package
697  directory but in a subdirectory ``doc`` of a directory determined by
698  Distutils. For example, on my system (Ubuntu 9.04) the documentation
699  files are put into ``/usr/local/doc``.
700
701Upgrading is recommended.
702
703What is ftputil?
704----------------
705
706ftputil is a high-level FTP client library for the Python programming
707language. ftputil implements a virtual file system for accessing FTP
708servers, that is, it can generate file-like objects for remote files.
709The library supports many functions similar to those in the os,
710os.path and shutil modules. ftputil has convenience functions for
711conditional uploads and downloads, and handles FTP clients and servers
712in different timezones.
713
714Read the documentation at
715http://ftputil.sschwarzer.net/documentation .
716
717License
718-------
719
720ftputil is Open Source software, released under the revised BSD
721license (see http://www.opensource.org/licenses/bsd-license.php ).
722
723Stefan
724
725----------------------------------------------------------------------
726ftputil 2.4.1 is now available from
727http://ftputil.sschwarzer.net/download .
728
729Changes since version 2.4
730-------------------------
731
732Several bugs were fixed:
733
734- On Windows, some accesses to the stat cache caused it to become
735  inconsistent, which could also trigger exceptions (report and patch
736  by Peter Stirling).
737
738- In ftputil 2.4, the use of ``super`` in the exception base class
739  caused ftputil to fail on Python <2.5 (reported by Nicola Murino).
740  ftputil is supposed to run with Python 2.3+.
741
742- The conversion of 12-hour clock times to 24-hour clock in the MS
743  format parser was wrong for 12 AM and 12 PM.
744
745Upgrading is strongly recommended.
746
747What is ftputil?
748----------------
749
750ftputil is a high-level FTP client library for the Python programming
751language. ftputil implements a virtual file system for accessing FTP
752servers, that is, it can generate file-like objects for remote files.
753The library supports many functions similar to those in the os,
754os.path and shutil modules. ftputil has convenience functions for
755conditional uploads and downloads, and handles FTP clients and servers
756in different timezones.
757
758Read the documentation at
759http://ftputil.sschwarzer.net/documentation .
760
761License
762-------
763
764ftputil is Open Source software, released under the revised BSD
765license (see http://www.opensource.org/licenses/bsd-license.php ).
766
767Stefan
768
769----------------------------------------------------------------------
770ftputil 2.4 is now available from
771http://ftputil.sschwarzer.net/download .
772
773Changes since version 2.3
774-------------------------
775
776The ``FTPHost`` class got a new method ``chmod``, similar to
777``os.chmod``, to act on remote files. Thanks go to Tom Parker for
778the review.
779
780There's a new exception ``CommandNotImplementedError``, derived from
781``PermanentError``, to denote commands not implemented by the FTP
782server or disabled by its administrator.
783
784Using the ``xreadlines`` method of FTP file objects causes a warning
785through Python's warnings framework.
786
787Upgrading is recommended.
788
789Incompatibility notice
790----------------------
791
792The ``xreadlines`` method will be removed in ftputil *2.5* as well as
793the direct access of exception classes via the ftputil module (e. g.
794``ftputil.PermanentError``). However, the deprecated access causes no
795warning because that would be rather difficult to implement.
796
797The distribution contains a small tool find_deprecated_code.py to scan
798a directory tree for the deprecated uses. Invoke the program with the
799``--help`` option to see a description.
800
801What is ftputil?
802----------------
803
804ftputil is a high-level FTP client library for the Python programming
805language. ftputil implements a virtual file system for accessing FTP
806servers, that is, it can generate file-like objects for remote files.
807The library supports many functions similar to those in the os,
808os.path and shutil modules. ftputil has convenience functions for
809conditional uploads and downloads, and handles FTP clients and servers
810in different timezones.
811
812Read the documentation at
813http://ftputil.sschwarzer.net/documentation .
814
815License
816-------
817
818ftputil is Open Source software, released under the revised BSD
819license (see http://www.opensource.org/licenses/bsd-license.php ).
820
821Stefan
822
823----------------------------------------------------------------------
824ftputil 2.3 is now available from
825http://ftputil.sschwarzer.net/download .
826
827Changes since version 2.2.4
828---------------------------
829
830ftputil has got support for the ``with`` statement which was introduced
831by Python 2.5. You can now construct host and remote file objects in
832``with`` statements and have them closed automatically (contributed
833by Roger Demetrescu). See the documentation for examples.
834
835What is ftputil?
836----------------
837
838ftputil is a high-level FTP client library for the Python programming
839language. ftputil implements a virtual file system for accessing FTP
840servers, that is, it can generate file-like objects for remote files.
841The library supports many functions similar to those in the os,
842os.path and shutil modules. ftputil has convenience functions for
843conditional uploads and downloads, and handles FTP clients and servers
844in different timezones.
845
846Read the documentation at
847http://ftputil.sschwarzer.net/documentation .
848
849License
850-------
851
852ftputil is Open Source software, released under the revised BSD
853license (see http://www.opensource.org/licenses/bsd-license.php ).
854
855Stefan
856
857----------------------------------------------------------------------
858ftputil 2.2.4 is now available from
859http://ftputil.sschwarzer.net/download .
860
861Changes since version 2.2.3
862---------------------------
863
864This release fixes a bug in the ``makedirs`` call (report and fix by
865Richard Holden). Upgrading is recommended.
866
867What is ftputil?
868----------------
869
870ftputil is a high-level FTP client library for the Python programming
871language. ftputil implements a virtual file system for accessing FTP
872servers, that is, it can generate file-like objects for remote files.
873The library supports many functions similar to those in the os,
874os.path and shutil modules. ftputil has convenience functions for
875conditional uploads and downloads, and handles FTP clients and servers
876in different timezones.
877
878Read the documentation at
879http://ftputil.sschwarzer.net/documentation .
880
881License
882-------
883
884ftputil is Open Source software, released under the revised BSD
885license (see http://www.opensource.org/licenses/bsd-license.php ).
886
887Stefan
888
889----------------------------------------------------------------------
890ftputil 2.2.3 is now available from
891http://ftputil.sschwarzer.net/download .
892
893Changes since version 2.2.2
894---------------------------
895
896This release fixes a bug in the ``makedirs`` call (report and fix by
897Julian, whose last name I don't know ;-) ). Upgrading is recommended.
898
899What is ftputil?
900----------------
901
902ftputil is a high-level FTP client library for the Python programming
903language. ftputil implements a virtual file system for accessing FTP
904servers, that is, it can generate file-like objects for remote files.
905The library supports many functions similar to those in the os,
906os.path and shutil modules. ftputil has convenience functions for
907conditional uploads and downloads, and handles FTP clients and servers
908in different timezones.
909
910Read the documentation at
911http://ftputil.sschwarzer.net/documentation .
912
913License
914-------
915
916ftputil is Open Source software, released under the revised BSD
917license (see http://www.opensource.org/licenses/bsd-license.php ).
918
919Stefan
920
921----------------------------------------------------------------------
922ftputil 2.2.2 is now available from
923http://ftputil.sschwarzer.net/download .
924
925Changes since version 2.2.1
926---------------------------
927
928This bugfix release handles whitespace in path names more reliably
929(thanks to Johannes Strömberg). Upgrading is recommended.
930
931What is ftputil?
932----------------
933
934ftputil is a high-level FTP client library for the Python programming
935language. ftputil implements a virtual file system for accessing FTP
936servers, that is, it can generate file-like objects for remote files.
937The library supports many functions similar to those in the os,
938os.path and shutil modules. ftputil has convenience functions for
939conditional uploads and downloads, and handles FTP clients and servers
940in different timezones.
941
942Read the documentation at
943http://ftputil.sschwarzer.net/documentation .
944
945License
946-------
947
948ftputil is Open Source software, released under the revised BSD
949license (see http://www.opensource.org/licenses/bsd-license.php ).
950
951Stefan
952
953----------------------------------------------------------------------
954ftputil 2.2.1 is now available from
955http://ftputil.sschwarzer.net/download .
956
957Changes since version 2.2
958-------------------------
959
960This bugfix release checks (and ignores) status code 451 when FTPFiles
961are closed (thanks go to Alexander Holyapin). Upgrading is recommended.
962
963What is ftputil?
964----------------
965
966ftputil is a high-level FTP client library for the Python programming
967language. ftputil implements a virtual file system for accessing FTP
968servers, that is, it can generate file-like objects for remote files.
969The library supports many functions similar to those in the os,
970os.path and shutil modules. ftputil has convenience functions for
971conditional uploads and downloads, and handles FTP clients and servers
972in different timezones.
973
974Read the documentation at
975http://ftputil.sschwarzer.net/trac/wiki/Documentation .
976
977License
978-------
979
980ftputil is Open Source software, released under the revised BSD
981license (see http://www.opensource.org/licenses/bsd-license.php ).
982
983Stefan
984
985----------------------------------------------------------------------
986ftputil 2.2 is now available from
987http://ftputil.sschwarzer.net/download .
988
989Changes since version 2.1
990-------------------------
991
992- Results of stat calls (also indirect calls, i. e. listdir,
993  isdir/isfile/islink, exists, getmtime etc.) are now cached and
994  reused. This results in remarkable speedups for many use cases.
995  Thanks to Evan Prodromou for his permission to add his lrucache
996  module under ftputil's license.
997
998- The current directory is also locally cached, resulting in further
999  speedups.
1000
1001- It's now possible to write and plug in custom parsers for directory
1002  formats which ftputil doesn't support natively.
1003
1004- File-like objects generated via ``FTPHost.file`` now support the
1005  iterator protocol (for line in some_file: ...).
1006
1007- The documentation has been updated accordingly. Read it under
1008  http://ftputil.sschwarzer.net/trac/wiki/Documentation .
1009
1010Possible incompatibilities:
1011
1012- This release requires at least Python 2.3. (Previous releases
1013  worked with Python versions from 2.1 up.)
1014
1015- The method ``FTPHost.set_directory_format`` has been removed,
1016  since the directory format (Unix or MS) is set automatically. (The
1017  new method ``set_parser`` is a different animal since it takes
1018  a parser object to parse "foreign" formats, not a string.)
1019
1020What is ftputil?
1021----------------
1022
1023ftputil is a high-level FTP client library for the Python programming
1024language. ftputil implements a virtual file system for accessing FTP
1025servers, that is, it can generate file-like objects for remote files.
1026The library supports many functions similar to those in the os,
1027os.path and shutil modules. ftputil has convenience functions for
1028conditional uploads and downloads, and handles FTP clients and servers
1029in different timezones.
1030
1031License
1032-------
1033
1034ftputil 2.2 is Open Source software, released under the revised BSD
1035license (see http://www.opensource.org/licenses/bsd-license.php ).
1036
1037Stefan
1038
1039----------------------------------------------------------------------
1040The second beta version of ftputil 2.2 is available. You can download
1041it from http://ftputil.sschwarzer.net/download .
1042
1043With respect to the first beta release, it's now possible to write
1044and plug in custom parsers for FTP directory formats that ftputil
1045doesn't know natively. The documentation has been updated accordingly.
1046
1047The documentation for this release is online at
1048http://ftputil.sschwarzer.net/trac/wiki/Documentation#Documentationforftputil2.2b2 ,
1049so you can read about the extensions in more detail.
1050
1051Please download and test the release. Do you miss something which
1052should be in this release? Are there any bugs?
1053
1054Stefan
1055
1056----------------------------------------------------------------------
1057The first beta version of ftputil 2.2 is available. You can download
1058it from http://ftputil.sschwarzer.net/download .
1059
1060With respect to the previous alpha release, the cache now uses the
1061lrucache module by Evan Prodromou which is bundled with the ftputil
1062distribution. (Evan also gave his permission to include the module
1063under ftputil's modified BSD license instead of the Academic License.)
1064The documentation for the cache and its control have been added to
1065ftputil.txt / ftputil.html .
1066
1067File objects generated with FTPHost.file now support the iterator
1068protocol (for line in some_file: ...).
1069
1070Please download and test the release. Do you miss something which
1071should be in this release? Are there any bugs?
1072
1073Stefan
1074
1075----------------------------------------------------------------------
1076Welcome to the first alpha release of ftputil 2.2, ftputil 2.2a1.
1077Please download it from http://ftputil.sschwarzer.net/download .
1078
1079This version adds caching of stat results to ftputil. This also
1080affects indirect calls via FTPHost.path, e. g. methods isfile,
1081exists, getmtime, getsize. The test script at
1082http://ftputil.sschwarzer.net/trac/browser/tags/release2_2a1/sandbox/list_dir_test.py
1083runs about 20 times as fast as before adding caching! :-)
1084
1085As the "alpha" part implies, this release is not production-ready,
1086it's even kind of experimental: The caching works but there's no
1087cache entry expiration yet. (I plan to implement an LRU expiration
1088strategy or something similar.) Apart from that, the release is
1089tested as any production release. I suggest using the --prefix
1090option for installing alpha releases.
1091
1092That said, it would be helpful if you tested this release and
1093report your findings. When testing the code, please make sure
1094that your code uses the ftputil version you intend (alpha vs.
1095production version), e. g. by setting the PYTHONPATH environment
1096variable. I'm very interested in the speedups - and any problems
1097you encounter.
1098
1099Stefan
1100
1101----------------------------------------------------------------------
1102ftputil 2.1.1 is now available from
1103http://ftputil.sschwarzer.net/download .
1104
1105This release fixes a bug which happened when a client opened
1106a large file on the server as a file-like object and read
1107only a part of it. For details, see
1108http://ftputil.sschwarzer.net/trac/ticket/17 .
1109
1110Stefan
1111
1112----------------------------------------------------------------------
1113Changes since version 2.0
1114-------------------------
1115
1116- Added new methods to the FTPHost class, namely makedirs, walk,
1117  rmtree.
1118
1119- The FTP server directory format ("Unix" vs. "Windows") is now set
1120  automatically (thanks to Andrew Ittner for testing it).
1121
1122- Border cases like inaccessible login directories and whitespace in
1123  directory names, are now handled more gracefully (based on input
1124  from Valeriy Pogrebitskiy, Tommy Sundström and H. Y. Chu).
1125
1126- The documentation was updated.
1127
1128- A Russian translation of the documentation (currently slightly
1129  behind) was contributed by Anton Stepanov. It's also on the website
1130  at http://ftputil.sschwarzer.net/trac/wiki/RussianDocumentation .
1131
1132- New website, http://ftputil.sschwarzer.net/ with wiki, issue tracker
1133  and Subversion repository (thanks to Trac!)
1134
1135  Please enter not only bugs but also enhancement request into
1136  the issue tracker!
1137
1138Possible incompatibilities:
1139
1140- The exception hierarchy was changed slightly, which might break
1141  client code. See http://ftputil.sschwarzer.net/trac/changeset/489
1142  for the change details and the possibly necessary code changes.
1143
1144- FTPHost.rmdir no longer removes non-empty directories. Use the new
1145  method FTPHost.rmtree for this.
1146
1147What is ftputil?
1148----------------
1149
1150ftputil is a high-level FTP client library for the Python programming
1151language. ftputil implements a virtual file system for accessing FTP
1152servers, that is, it can generate file-like objects for remote files.
1153The library supports many functions similar to those in the os,
1154os.path and shutil modules. ftputil has convenience functions for
1155conditional uploads and downloads, and handles FTP clients and servers
1156in different timezones.
1157
1158License
1159-------
1160
1161ftputil 2.1 is Open Source software, released under the revised BSD
1162license (see http://www.opensource.org/licenses/bsd-license.php ).
1163
1164Stefan
1165
1166----------------------------------------------------------------------
1167ftputil 2.0.3 is now available at
1168http://www.sschwarzer.net/python/python_software.html#ftputil .
1169
1170This release fixes (for most cases) some problems when logging into an
1171FTP server with an inaccessible login directory, i. e. `getcwd()`
1172returns "/some/login/dir" but `chdir("/some/login/dir")` fails.
1173
1174Thanks go to Valeriy Pogrebitskiy for investigating and reporting
1175these problems.
1176
1177Stefan
1178
1179----------------------------------------------------------------------
1180Here's ftputil 2.0 !
1181
1182ftputil is a high-level alternative to Python's ftplib module. With
1183ftputil, you can access directories and files on remote FTP servers
1184almost as if they were in your local file system. This includes using
1185file-like objects representing remote files.
1186
1187For future releases see
1188http://www.sschwarzer.net/python/python_software.html
1189or subscribe to the mailing list at
1190http://codespeak.net/mailman/listinfo/ftputil
1191
1192What's new?
1193-----------
1194
1195From version 1.1 to 2.0, the following has changed:
1196
1197- ftputil has been re-organized and is now a Python package (the
1198  import statement is still the same)
1199
1200- installation via Python distutils
1201
1202- stat, upload_if_newer, download_if_newer etc. work correctly if the
1203  server is in another time zone than the client running ftputil (with
1204  help from Andrew Ittner); see section "Time zone correction" in the
1205  documentation
1206
1207- it's possible to set the directory listing format "manually" (though
1208  in most cases it's recognized automatically); see section "Stat'ing
1209  files and directories"
1210
1211- added a workaround regarding whitespace in directory names (thanks
1212  to Tommy Sundström and H. Y. Chu)
1213
1214- extended documentation and converted it to HTML format (now
1215  generated from reStructured Text)
1216
1217- several bugfixes
1218
1219- there's now a mailing list at http://codespeak.net/mailman/listinfo/ftputil
1220  (thanks to Holger Krekel)
1221
1222Documentation
1223-------------
1224
1225The documentation for ftputil can be found in the file ftputil.txt
1226(reStructured Text format) or ftputil.html (recommended, generated
1227from ftputil.txt).
1228
1229License
1230-------
1231
1232ftputil is Open Source Software. It is distributed under a BSD-style
1233license (see the top of ftputil.py).
1234
1235Stefan
1236
1237----------------------------------------------------------------------
1238ftputil 1.1 is released. You can find it at
1239http://www.ndh.net/home/sschwarzer/python/python_software.html .
1240
1241ftputil provides a higher-level interface for FTP sessions than the
1242ftplib module. FTP servers can be accessed via an interface similar to
1243os and os.path. Remote files are accessible as file-like objects.
1244
1245New since version 1.0:
1246
1247- ftputil now runs under Python 2.1+ (not only 2.2+).
1248- documentation
1249- conditional upload/download (depending on local and remote file
1250  timestamps)
1251- FTPHost.stat follows links
1252- a session factory other than the default, ftplib.FTP, can be given
1253  in the FTPHost constructor; this allows to use classes derived from
1254  ftplib.FTP (like ftpslib.FTP_TLS from the M2Crypto package)
1255- several bugfixes (mostly regarding byte count in text mode
1256  transfers)
1257- unit test
1258
1259Stefan
1260----------------------------------------------------------------------
1261Hello Pythoneers :)
1262
1263I would like to announce ftputil.py, a module which provides a
1264more friendly interface for FTP sessions than the ftplib module.
1265
1266The FTPHost objects generated from it allow many operations similar
1267to those of os and os.path. Examples:
1268
1269  # download some files from the login directory
1270  import ftputil
1271  host = ftputil.FTPHost('ftp.domain.com', 'user', 'secret')
1272  names = host.listdir(host.curdir)
1273  for name in names:
1274      if host.path.isreg(name):
1275          host.download(name, name, 'b')  # remote, local, binary mode
1276
1277  # make a new directory and copy a remote file into it
1278  host.mkdir('newdir')
1279  source = host.file('index.html', 'r')  # file-like object
1280  target = host.file('newdir/index.html', 'w')  # file-like object
1281  host.copyfileobj(source, target)  # mimics shutil.copyfileobj
1282  source.close()
1283  target.close()
1284
1285Even host.path.walk works. :-) But slow. ;-)
1286
1287ftputil.py can be downloaded from
1288http://www.ndh.net/home/sschwarzer/download/ftputil.py
1289
1290I would like to get your suggestions and comments. :-)
1291
1292Stefan
1293
1294
1295P.S.: Thanks to Pedro Rodriguez for his helpful answer to my question
1296in comp.lang.python :-)
1297----------------------------------------------------------------------
Note: See TracBrowser for help on using the repository browser.