commit python-pyftpdlib for openSUSE:Factory
Hello community, here is the log from the commit of package python-pyftpdlib for openSUSE:Factory checked in at 2019-05-27 08:39:27 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-pyftpdlib (Old) and /work/SRC/openSUSE:Factory/.python-pyftpdlib.new.5148 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "python-pyftpdlib" Mon May 27 08:39:27 2019 rev:7 rq:705393 version:1.5.5 Changes: -------- --- /work/SRC/openSUSE:Factory/python-pyftpdlib/python-pyftpdlib.changes 2018-12-24 11:41:53.661425399 +0100 +++ /work/SRC/openSUSE:Factory/.python-pyftpdlib.new.5148/python-pyftpdlib.changes 2019-05-27 08:39:37.899041824 +0200 @@ -1,0 +2,6 @@ +Sat May 25 09:29:17 UTC 2019 - Tomáš Chvátal <tchvatal@suse.com> + +- Update to 1.5.5: + * Various minor fixes and documentation updates + +------------------------------------------------------------------- Old: ---- pyftpdlib-1.5.4.tar.gz New: ---- pyftpdlib-1.5.5.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-pyftpdlib.spec ++++++ --- /var/tmp/diff_new_pack.TyQtXK/_old 2019-05-27 08:39:38.707041509 +0200 +++ /var/tmp/diff_new_pack.TyQtXK/_new 2019-05-27 08:39:38.711041508 +0200 @@ -1,7 +1,7 @@ # # spec file for package python-pyftpdlib # -# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany. # Copyright (c) 2016 LISA GmbH, Bingen, Germany. # # All modifications and additions to the file contributed by third parties @@ -21,7 +21,7 @@ # Tests randomly fail: https://github.com/giampaolo/pyftpdlib/issues/386 %bcond_with test Name: python-pyftpdlib -Version: 1.5.4 +Version: 1.5.5 Release: 0 Summary: Asynchronous FTP server library for Python License: MIT @@ -57,7 +57,8 @@ %install %python_install -%python_expand %fdupes -s %{buildroot}%{$python_sitelib} +%python_expand rm -r %{buildroot}%{$python_sitelib}/pyftpdlib/test +%python_expand %fdupes %{buildroot}%{$python_sitelib} %if %{with test} %check ++++++ pyftpdlib-1.5.4.tar.gz -> pyftpdlib-1.5.5.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyftpdlib-1.5.4/CREDITS new/pyftpdlib-1.5.5/CREDITS --- old/pyftpdlib-1.5.4/CREDITS 2017-12-30 09:44:57.000000000 +0100 +++ new/pyftpdlib-1.5.5/CREDITS 2019-03-27 17:31:43.000000000 +0100 @@ -48,6 +48,12 @@ D: Inclusion of pyftpdlib in Far Manager, a file and archive manager for Windows http://www.farmanager.com/enforum/viewtopic.php?t=640&highlight=&sid=12d4d90f27f421243bcf7a0e3c516efb. +N: Andrew Shulgin +C: Ukraine +E: andrewshulginua@gmail.com +D: Fixing CR duplication in ASCII mode downloads. + https://github.com/giampaolo/pyftpdlib/pull/492 + N: Arkadiusz Wahlig C: Germany W: http://arkadiusz-wahlig.blogspot.com diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyftpdlib-1.5.4/HISTORY.rst new/pyftpdlib-1.5.5/HISTORY.rst --- old/pyftpdlib-1.5.4/HISTORY.rst 2018-05-04 23:04:49.000000000 +0200 +++ new/pyftpdlib-1.5.5/HISTORY.rst 2019-04-04 11:10:16.000000000 +0200 @@ -1,5 +1,17 @@ Bug tracker at https://github.com/giampaolo/pyftpdlib/issues +Version: 1.5.5 - 2019-04-04 +=========================== + +**Enhancements** + +- #495: colored test output. + +**Bug fixes** + +- #492: CRLF line endings are replaced with CRCRLF in ASCII mode downloads. +- #496: import error due to multiprocessing.Lock() bug. + Version: 1.5.4 - 2018-05-04 =========================== diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyftpdlib-1.5.4/Makefile new/pyftpdlib-1.5.5/Makefile --- old/pyftpdlib-1.5.4/Makefile 2018-04-27 08:26:44.000000000 +0200 +++ new/pyftpdlib-1.5.5/Makefile 2019-03-27 17:32:12.000000000 +0100 @@ -2,7 +2,7 @@ # To use a specific Python version run: # $ make install PYTHON=python3.3 -PYTHON = python +PYTHON = python3 TSCRIPT = pyftpdlib/test/runner.py ARGS = DEV_DEPS = \ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyftpdlib-1.5.4/PKG-INFO new/pyftpdlib-1.5.5/PKG-INFO --- old/pyftpdlib-1.5.4/PKG-INFO 2018-05-04 23:06:51.000000000 +0200 +++ new/pyftpdlib-1.5.5/PKG-INFO 2019-04-04 11:11:03.000000000 +0200 @@ -1,12 +1,16 @@ Metadata-Version: 2.1 Name: pyftpdlib -Version: 1.5.4 +Version: 1.5.5 Summary: Very fast asynchronous FTP server library Home-page: https://github.com/giampaolo/pyftpdlib/ Author: Giampaolo Rodola' Author-email: g.rodola@gmail.com License: MIT -Description: .. image:: https://img.shields.io/travis/giampaolo/pyftpdlib/master.svg?maxAge=3600&label=Linux%20/%20OSX +Description: .. image:: http://pepy.tech/badge/pyftpdlib + :target: http://pepy.tech/project/pyftpdlib + :alt: Downloads + + .. image:: https://img.shields.io/travis/giampaolo/pyftpdlib/master.svg?maxAge=3600&label=Linux%20/%20OSX :target: https://travis-ci.org/giampaolo/pyftpdlib :alt: Linux tests (Travis) @@ -194,67 +198,6 @@ software to the `adoptions list <http://pyftpdlib.readthedocs.io/en/latest/adoptions.html>`__. - Timeline - ======== - - - 2018-05-04: version `1.5.4 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-1.5.4.tar.gz>`__ released. - - 2017-11-04: version `1.5.3 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-1.5.3.tar.gz>`__ released. - - 2017-04-06: version `1.5.2 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-1.5.2.tar.gz>`__ released. - - 2016-05-02: version `1.5.1 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-1.5.1.tar.gz>`__ released. - - 2015-12-13: version `1.5.0 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-1.5.0.tar.gz>`__ released. - - 2014-06-03: version `1.4.0 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-1.4.0.tar.gz>`__ released. - - 2014-04-12: version `1.3.1 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-1.3.1.tar.gz>`__ released. - - 2013-11-07: version `1.3.0 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-1.3.0.tar.gz>`__ released. - - 2013-04-22: version `1.2.0 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-1.2.0.tar.gz>`__ released. - - 2013-04-09: version `1.1.0 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-1.1.0.tar.gz>`__ released. - - 2013-02-22: version `1.0.1 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-1.0.1.tar.gz>`__ released. - - 2013-02-19: version `1.0.0 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-1.0.0.tar.gz>`__ released. - - 2012-05-14: pyftpdlib included in `ftp-cloudfs <https://github.com/chmouel/ftp-cloudfs/>`__ project. - - 2012-01-25: version `0.7.0 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-0.7.0.tar.gz>`__ released. - - 2011-12-01: pyftpdlib included in `feitp-server <http://code.google.com/p/feitp-server/>`__ project. - - 2011-09-26: pyftpdlib included in `ftpmaster <https://github.com/MarkLIC/ftpmaster>`__ project. - - 2011-07-09: pyftpdlib included in `bftpd <http://bftpd.sourceforge.net/>`__ project. - - 2011-07-09: pyftpdlib included in `fastersync <http://code.google.com/p/fastersync/>`__ project. - - 2011-01-31: pyftpdlib included in `put.io FTP connector project <http://code.google.com/p/pyftpdlib/wiki/Adoptions?ts=1296442469&updated=Adoptions#put.io*FTP*connector>`__. - - 2011-01-24: version `0.6.0 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-0.6.0.tar.gz>`__ released. - - 2010-12-14: added `donations <http://code.google.com/p/pyftpdlib/wiki/Donate>`__. - - 2010-08-24: pyftpdlib included in `peerscape <http://www.peerscape.org/>`__ project. - - 2010-07-15: pyftpdlib included in `Faetus <http://tomatohater.com/faetus/>`__ project. - - 2010-07-11: pyftpdlib included in `Pyfilesystem <http://code.google.com/p/pyfilesystem>`__ project. - - 2010-06-28: pyftpdlib has been `packaged for Debian <http://packages.debian.org/sid/python-pyftpdlib>`__ - - 2010-04-28: pyftpdlib included in `sierramodulepos <http://forge.openbravo.com/plugins/mwiki/index.php/MobilePOS>`__ project. - - 2010-03-20: `http://www.smartfile.com <http://www.smartfile.com>`__ uses pyftpdlib. - - 2010-01-13: pyftpdlib included in `zenftp <http://code.irondojo.com/>`__ project. - - 2009-12-26: pyftpdlib included in `Symbian Python FTP server <http://code.google.com/p/sypftp>`__ project. - - 2009-11-04: `www.netplay.it <http://www.netplay.it>`__ uses pyftpdlib. - - 2009-11-04: `www.adcast.tv <http://www.adcast.tv>`__ uses pyftpdlib. - - 2009-11-04: `www.bitsontherun.com <http://www.bitsontherun.com>`__ uses pyftpdlib. - - 2009-11-02: pyftpdlib included in `ftp-cloudfs <http://github.com/chmouel/ftp-cloudfs>`__ project. - - 2009-09-14: version `0.5.2 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-0.5.2.tar.gz>`__ released. - - 2009-08-10: pyftpdlib included in `Imgserve <http://github.com/wuzhe/imgserve/tree/master>`__ project. - - 2009-07-22: pyftpdlib included in `Plumi <http://plumi.org/wiki>`__ project. - - 2009-04-02: pyftpdlib RPM-packaged and ported on `Fedora <https://admin.fedoraproject.org/pkgdb/packages/name/pyftpdlib>`__ to make users can easily install on it via *yum install pyftpdlib*. - - 2009-03-28: pyftpdlib included in `Bazaar <http://bazaar-vcs.org/>`__ project. - - 2009-02-23: pyftpdlib included in `ShareFTP <http://git.logfish.net/shareftp.git/>`__ project. - - 2009-01-21: version `0.5.1 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-0.5.1.tar.gz>`__ released. - - 2008-12-27: pyftpdlib included in `Google Chromium <http://code.google.com/intl/it-IT/chromium/>`__, the open source project behind `Google Chrome <http://www.google.com/chrome>`__. - - 2008-12-27: pyftpdlib ported on `GNU Darwin <http://www.gnu-darwin.org/>`__ systems to make users can easily install on it. - - 2008-11-26: pyftpdlib included in `OpenERP <http://openerp.com>`__. - - 2008-10-26: pyftpdlib included in `Python for OpenVMS <http://www.vmspython.org/>`__ as standard package. - - 2008-10-09: pyftpdlib included in `Shareme <http://bbs.archlinux.org/viewtopic.php?pid=431474>`__ project. - - 2008-09-20: version `0.5.0 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-0.5.0.tar.gz>`__ released. - - 2008-08-10: pyftpdlib included in `Manent <http://trac.manent-backup.com/>`__ project. - - 2008-05-16: version `0.4.0 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-0.4.0.tar.gz>`__ released. - - 2008-04-09: pyftpdlib used as backend for `gpftpd <http://arkadiusz-wahlig.blogspot.com/2008/04/hosting-files-on-google.html>`__, an FTP server for managing files hosted on `Google Pages <http://-ages.google.com>`__. - - 2008-01-17: version `0.3.0 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-0.3.0.tar.gz>`__ released. - - 2007-10-14: pyftpdlib included in `Aksy <http://walco.n--tree.net/projects/aksy/wiki>`__ project. - - 2007-09-17: version `0.2.0 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-0.2.0.tar.gz>`__ released. - - 2007-09-08: pyftpdlib included as `FarManager <http://farmanager.com/>`__ `plug-in <http://www.farmanager.com/enforum/viewtopic.php?t=640&highlight=&sid=12d4d90f27f421243bcf7a0e3c516efb>`__. - - 2007-03-06: pyftpdlib `ported on FreeBSD <http://www.freshports.org/ftp/py-pyftpdlib/>`__ systems to make users can easily install on it. - - 2007-03-07: version `0.1.1 <http://pyftpdlib.googlecode.com/files/pyftpdlib*0.1.1.tar.gz>`__ released. - - 2007-02-26: version `0.1.0 <http://pyftpdlib.googlecode.com/files/pyftpdlib*0.1.tar.gz>`__ released. - - 2006-09-26: initial clunky thread-based progenitor `link <http://billiejoex.altervista.org/Prj_pftpd.htm>`__. - Trademarks ========== @@ -299,5 +242,4 @@ Classifier: Programming Language :: Python :: 3.4 Classifier: Programming Language :: Python :: 3.5 Classifier: Programming Language :: Python :: 3.6 -Provides-Extra: sendfile Provides-Extra: ssl diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyftpdlib-1.5.4/README.rst new/pyftpdlib-1.5.5/README.rst --- old/pyftpdlib-1.5.4/README.rst 2018-05-04 23:06:31.000000000 +0200 +++ new/pyftpdlib-1.5.5/README.rst 2019-04-04 11:10:51.000000000 +0200 @@ -1,3 +1,7 @@ +.. image:: http://pepy.tech/badge/pyftpdlib + :target: http://pepy.tech/project/pyftpdlib + :alt: Downloads + .. image:: https://img.shields.io/travis/giampaolo/pyftpdlib/master.svg?maxAge=3600&label=Linux%20/%20OSX :target: https://travis-ci.org/giampaolo/pyftpdlib :alt: Linux tests (Travis) @@ -186,67 +190,6 @@ software to the `adoptions list <http://pyftpdlib.readthedocs.io/en/latest/adoptions.html>`__. -Timeline -======== - -- 2018-05-04: version `1.5.4 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-1.5.4.tar.gz>`__ released. -- 2017-11-04: version `1.5.3 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-1.5.3.tar.gz>`__ released. -- 2017-04-06: version `1.5.2 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-1.5.2.tar.gz>`__ released. -- 2016-05-02: version `1.5.1 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-1.5.1.tar.gz>`__ released. -- 2015-12-13: version `1.5.0 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-1.5.0.tar.gz>`__ released. -- 2014-06-03: version `1.4.0 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-1.4.0.tar.gz>`__ released. -- 2014-04-12: version `1.3.1 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-1.3.1.tar.gz>`__ released. -- 2013-11-07: version `1.3.0 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-1.3.0.tar.gz>`__ released. -- 2013-04-22: version `1.2.0 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-1.2.0.tar.gz>`__ released. -- 2013-04-09: version `1.1.0 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-1.1.0.tar.gz>`__ released. -- 2013-02-22: version `1.0.1 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-1.0.1.tar.gz>`__ released. -- 2013-02-19: version `1.0.0 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-1.0.0.tar.gz>`__ released. -- 2012-05-14: pyftpdlib included in `ftp-cloudfs <https://github.com/chmouel/ftp-cloudfs/>`__ project. -- 2012-01-25: version `0.7.0 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-0.7.0.tar.gz>`__ released. -- 2011-12-01: pyftpdlib included in `feitp-server <http://code.google.com/p/feitp-server/>`__ project. -- 2011-09-26: pyftpdlib included in `ftpmaster <https://github.com/MarkLIC/ftpmaster>`__ project. -- 2011-07-09: pyftpdlib included in `bftpd <http://bftpd.sourceforge.net/>`__ project. -- 2011-07-09: pyftpdlib included in `fastersync <http://code.google.com/p/fastersync/>`__ project. -- 2011-01-31: pyftpdlib included in `put.io FTP connector project <http://code.google.com/p/pyftpdlib/wiki/Adoptions?ts=1296442469&updated=Adoptions#put.io*FTP*connector>`__. -- 2011-01-24: version `0.6.0 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-0.6.0.tar.gz>`__ released. -- 2010-12-14: added `donations <http://code.google.com/p/pyftpdlib/wiki/Donate>`__. -- 2010-08-24: pyftpdlib included in `peerscape <http://www.peerscape.org/>`__ project. -- 2010-07-15: pyftpdlib included in `Faetus <http://tomatohater.com/faetus/>`__ project. -- 2010-07-11: pyftpdlib included in `Pyfilesystem <http://code.google.com/p/pyfilesystem>`__ project. -- 2010-06-28: pyftpdlib has been `packaged for Debian <http://packages.debian.org/sid/python-pyftpdlib>`__ -- 2010-04-28: pyftpdlib included in `sierramodulepos <http://forge.openbravo.com/plugins/mwiki/index.php/MobilePOS>`__ project. -- 2010-03-20: `http://www.smartfile.com <http://www.smartfile.com>`__ uses pyftpdlib. -- 2010-01-13: pyftpdlib included in `zenftp <http://code.irondojo.com/>`__ project. -- 2009-12-26: pyftpdlib included in `Symbian Python FTP server <http://code.google.com/p/sypftp>`__ project. -- 2009-11-04: `www.netplay.it <http://www.netplay.it>`__ uses pyftpdlib. -- 2009-11-04: `www.adcast.tv <http://www.adcast.tv>`__ uses pyftpdlib. -- 2009-11-04: `www.bitsontherun.com <http://www.bitsontherun.com>`__ uses pyftpdlib. -- 2009-11-02: pyftpdlib included in `ftp-cloudfs <http://github.com/chmouel/ftp-cloudfs>`__ project. -- 2009-09-14: version `0.5.2 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-0.5.2.tar.gz>`__ released. -- 2009-08-10: pyftpdlib included in `Imgserve <http://github.com/wuzhe/imgserve/tree/master>`__ project. -- 2009-07-22: pyftpdlib included in `Plumi <http://plumi.org/wiki>`__ project. -- 2009-04-02: pyftpdlib RPM-packaged and ported on `Fedora <https://admin.fedoraproject.org/pkgdb/packages/name/pyftpdlib>`__ to make users can easily install on it via *yum install pyftpdlib*. -- 2009-03-28: pyftpdlib included in `Bazaar <http://bazaar-vcs.org/>`__ project. -- 2009-02-23: pyftpdlib included in `ShareFTP <http://git.logfish.net/shareftp.git/>`__ project. -- 2009-01-21: version `0.5.1 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-0.5.1.tar.gz>`__ released. -- 2008-12-27: pyftpdlib included in `Google Chromium <http://code.google.com/intl/it-IT/chromium/>`__, the open source project behind `Google Chrome <http://www.google.com/chrome>`__. -- 2008-12-27: pyftpdlib ported on `GNU Darwin <http://www.gnu-darwin.org/>`__ systems to make users can easily install on it. -- 2008-11-26: pyftpdlib included in `OpenERP <http://openerp.com>`__. -- 2008-10-26: pyftpdlib included in `Python for OpenVMS <http://www.vmspython.org/>`__ as standard package. -- 2008-10-09: pyftpdlib included in `Shareme <http://bbs.archlinux.org/viewtopic.php?pid=431474>`__ project. -- 2008-09-20: version `0.5.0 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-0.5.0.tar.gz>`__ released. -- 2008-08-10: pyftpdlib included in `Manent <http://trac.manent-backup.com/>`__ project. -- 2008-05-16: version `0.4.0 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-0.4.0.tar.gz>`__ released. -- 2008-04-09: pyftpdlib used as backend for `gpftpd <http://arkadiusz-wahlig.blogspot.com/2008/04/hosting-files-on-google.html>`__, an FTP server for managing files hosted on `Google Pages <http://-ages.google.com>`__. -- 2008-01-17: version `0.3.0 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-0.3.0.tar.gz>`__ released. -- 2007-10-14: pyftpdlib included in `Aksy <http://walco.n--tree.net/projects/aksy/wiki>`__ project. -- 2007-09-17: version `0.2.0 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-0.2.0.tar.gz>`__ released. -- 2007-09-08: pyftpdlib included as `FarManager <http://farmanager.com/>`__ `plug-in <http://www.farmanager.com/enforum/viewtopic.php?t=640&highlight=&sid=12d4d90f27f421243bcf7a0e3c516efb>`__. -- 2007-03-06: pyftpdlib `ported on FreeBSD <http://www.freshports.org/ftp/py-pyftpdlib/>`__ systems to make users can easily install on it. -- 2007-03-07: version `0.1.1 <http://pyftpdlib.googlecode.com/files/pyftpdlib*0.1.1.tar.gz>`__ released. -- 2007-02-26: version `0.1.0 <http://pyftpdlib.googlecode.com/files/pyftpdlib*0.1.tar.gz>`__ released. -- 2006-09-26: initial clunky thread-based progenitor `link <http://billiejoex.altervista.org/Prj_pftpd.htm>`__. - Trademarks ========== diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyftpdlib-1.5.4/docs/api.rst new/pyftpdlib-1.5.5/docs/api.rst --- old/pyftpdlib-1.5.4/docs/api.rst 2018-04-27 16:47:07.000000000 +0200 +++ new/pyftpdlib-1.5.5/docs/api.rst 2018-05-15 17:45:22.000000000 +0200 @@ -390,12 +390,13 @@ .. method:: close() Stop accepting connections without disconnecting currently connected - clients. + clients. :meth:`server_forever` loop will automatically stop when there are + no more connected clients. .. method:: close_all() - Tell :meth:`server_forever` loop to stop and wait until it does. - Also all connected clients will be closed. + Disconnect all clients, tell :meth:`server_forever` loop to stop and wait + until it does. *Changed in version 1.0.0: 'map' and 'ignore_all' parameters were removed.* diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyftpdlib-1.5.4/docs/benchmarks.rst new/pyftpdlib-1.5.5/docs/benchmarks.rst --- old/pyftpdlib-1.5.4/docs/benchmarks.rst 2017-12-30 09:44:57.000000000 +0100 +++ new/pyftpdlib-1.5.5/docs/benchmarks.rst 2019-03-27 17:31:43.000000000 +0100 @@ -77,8 +77,8 @@ By using *sendfile()* (Twisted *does not* support sendfile()): +-----------------------------------------+----------------+----------------+-------------+ -| *benchmark type* | *pyftpdlib* | *twisted* | *speedup* | -+=========================================+=================+================+============+ +| *benchmark type* | *pyftpdlib* | *twisted* | *speedup* | ++=========================================+================+================+=============+ | STOR (client -> server) | 585.90 MB/sec | 496.44 MB/sec | **+0.01x** | +-----------------------------------------+----------------+----------------+-------------+ | RETR (server -> client) | 1652.72 MB/sec | 283.24 MB/sec | **+4.8x** | @@ -99,7 +99,7 @@ By using plain *send()*: +-----------------------------------------+----------------+---------------+--------------+ -| *benchmark type* |tpdlib* | *twisted* | *speedup* | +| *benchmark type* | *tpdlib* | *twisted* | *speedup* | +=========================================+================+===============+==============+ | RETR (server -> client) | 894.29 MB/sec | 283.24 MB/sec | **+2.1x** | +-----------------------------------------+----------------+---------------+--------------+ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyftpdlib-1.5.4/make.bat new/pyftpdlib-1.5.5/make.bat --- old/pyftpdlib-1.5.4/make.bat 2017-12-30 09:44:57.000000000 +0100 +++ new/pyftpdlib-1.5.5/make.bat 2019-03-27 21:33:09.000000000 +0100 @@ -2,99 +2,36 @@ rem ========================================================================== rem Shortcuts for various tasks, emulating UNIX "make" on Windows. -rem It is primarly intended as a shortcut for installing pyftpdlib and running -rem tests (just run "make.bat test"). +rem It is primarly intended as a shortcut for compiling / installing +rem psutil ("make.bat build", "make.bat install") and running tests +rem ("make.bat test"). +rem +rem This script is modeled after my Windows installation which uses: +rem - Visual studio 2008 for Python 2.6, 2.7 +rem - Visual studio 2010 for Python 3.4+ +rem ...therefore it might not work on your Windows installation. +rem rem By default C:\Python27\python.exe is used. -rem To use another Python version run: -rem set PYTHON=C:\Python24\python.exe & make.bat test +rem To compile for a specific Python version run: +rem set PYTHON=C:\Python34\python.exe & make.bat build +rem +rem To use a different test script: +rem set PYTHON=C:\Python34\python.exe & set TSCRIPT=foo.py & make.bat test rem ========================================================================== - if "%PYTHON%" == "" ( - set PYTHON=C:\Python27\python.exe -) -if "%TSCRIPT%" == "" ( - set TSCRIPT=pyftpdlib\test\runner.py -) - - -if "%1" == "help" ( - :help - echo Run `make ^<target^>` where ^<target^> is one of: - echo clean clean build files - echo install compile and install - echo uninstall uninstall - echo test run tests - echo setup-dev-env install all deps - goto :eof -) - -if "%1" == "clean" ( - :clean - for /r %%R in (__pycache__) do if exist %%R (rmdir /S /Q %%R) - for /r %%R in (*.pyc) do if exist %%R (del /s %%R) - for /r %%R in (*.pyd) do if exist %%R (del /s %%R) - for /r %%R in (*.orig) do if exist %%R (del /s %%R) - for /r %%R in (*.bak) do if exist %%R (del /s %%R) - for /r %%R in (*.rej) do if exist %%R (del /s %%R) - if exist pyftpdlib.egg-info (rmdir /S /Q pyftpdlib.egg-info) - if exist build (rmdir /S /Q build) - if exist dist (rmdir /S /Q dist) - goto :eof -) - -if "%1" == "install" ( - :install - if %PYTHON%==C:\Python24\python.exe ( - %PYTHON% setup.py build -c mingw32 install - ) else if %PYTHON%==C:\Python25\python.exe ( - %PYTHON% setup.py build -c mingw32 install + if exist "C:\Python37\python.exe" ( + set PYTHON=C:\Python37\python.exe ) else ( - %PYTHON% setup.py build install + set PYTHON=C:\Python27\python.exe ) - goto :eof -) - -if "%1" == "uninstall" ( - :uninstall - rmdir /S /Q %PYTHON%\Lib\site-packages\pyftpdlib* - goto :eof -) - -if "%1" == "test" ( - :test - call :install - %PYTHON% %TSCRIPT% - goto :eof ) -if "%1" == "setup-dev-env" ( - :setup-env - if not exist get-pip.py ( - @echo ------------------------------------------------ - @echo downloading pip installer - @echo ------------------------------------------------ - C:\python27\python.exe -c "import urllib2; r = urllib2.urlopen('https://bootstrap.pypa.io/get-pip.py'); open('get-pip.py', 'wb').write(r.read())" - ) - @echo ------------------------------------------------ - @echo installing pip for %PYTHON% - @echo ------------------------------------------------ - %PYTHON% get-pip.py - @echo ------------------------------------------------ - @echo upgrade pip for %PYTHON% - @echo ------------------------------------------------ - %PYTHON% -m pip install pip --upgrade - @echo ------------------------------------------------ - @echo installing deps - @echo ------------------------------------------------ - rem mandatory / for unittests - %PYTHON% -m pip install unittest2 ipaddress mock wmi pypiwin32 pyopenssl --upgrade - goto :eof +if "%TSCRIPT%" == "" ( + set TSCRIPT=psutil\tests\__main__.py ) +rem Needed to locate the .pypirc file and upload exes on PyPI. +set HOME=%USERPROFILE% -goto :help - -:error - echo last command returned an error; exiting - exit /b %errorlevel% +%PYTHON% scripts\winmake.py %1 %2 %3 %4 %5 %6 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyftpdlib-1.5.4/pyftpdlib/__init__.py new/pyftpdlib-1.5.5/pyftpdlib/__init__.py --- old/pyftpdlib-1.5.4/pyftpdlib/__init__.py 2017-12-30 09:44:57.000000000 +0100 +++ new/pyftpdlib-1.5.5/pyftpdlib/__init__.py 2019-03-27 21:53:41.000000000 +0100 @@ -68,6 +68,6 @@ """ -__ver__ = '1.5.4' +__ver__ = '1.5.5' __author__ = "Giampaolo Rodola' <g.rodola@gmail.com>" __web__ = 'https://github.com/giampaolo/pyftpdlib/' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyftpdlib-1.5.4/pyftpdlib/filesystems.py new/pyftpdlib-1.5.5/pyftpdlib/filesystems.py --- old/pyftpdlib-1.5.4/pyftpdlib/filesystems.py 2017-12-30 09:44:57.000000000 +0100 +++ new/pyftpdlib-1.5.5/pyftpdlib/filesystems.py 2018-08-29 12:40:33.000000000 +0200 @@ -237,11 +237,13 @@ # --- Wrapper methods around os.* calls def chdir(self, path): - """Change the current directory.""" + """Change the current directory. If this method is overridden + it is vital that `cwd` attribute gets set. + """ # note: process cwd will be reset by the caller assert isinstance(path, unicode), path os.chdir(path) - self._cwd = self.fs2ftp(path) + self.cwd = self.fs2ftp(path) def mkdir(self, path): """Create the specified directory.""" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyftpdlib-1.5.4/pyftpdlib/handlers.py new/pyftpdlib-1.5.5/pyftpdlib/handlers.py --- old/pyftpdlib-1.5.4/pyftpdlib/handlers.py 2017-12-30 09:44:57.000000000 +0100 +++ new/pyftpdlib-1.5.5/pyftpdlib/handlers.py 2019-04-04 01:41:30.000000000 +0200 @@ -54,6 +54,8 @@ from .log import debug from .log import logger +CR_BYTE = ord('\r') + def _import_sendfile(): # By default attempt to use os.sendfile introduced in Python 3.3: @@ -1028,11 +1030,32 @@ """ self.file = file self.type = type + self._prev_chunk_endswith_cr = False if type == 'a' and os.linesep != '\r\n': - self._data_wrapper = lambda x: x.replace(b(os.linesep), b'\r\n') + self._data_wrapper = self._posix_ascii_data_wrapper else: self._data_wrapper = None + def _posix_ascii_data_wrapper(self, chunk): + """The data wrapper used for sending data in ASCII mode on + systems using a single line terminator, handling those cases + where CRLF ('\r\n') gets delivered in two chunks. + """ + chunk = bytearray(chunk) + pos = 0 + if self._prev_chunk_endswith_cr and chunk.startswith(b'\n'): + pos += 1 + while True: + pos = chunk.find(b'\n', pos) + if pos == -1: + break + if chunk[pos - 1] != CR_BYTE: + chunk.insert(pos, CR_BYTE) + pos += 1 + pos += 1 + self._prev_chunk_endswith_cr = chunk.endswith(b'\r') + return chunk + def more(self): """Attempt a chunk of data of size self.buffer_size.""" try: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyftpdlib-1.5.4/pyftpdlib/servers.py new/pyftpdlib-1.5.5/pyftpdlib/servers.py --- old/pyftpdlib-1.5.4/pyftpdlib/servers.py 2018-04-27 16:35:39.000000000 +0200 +++ new/pyftpdlib-1.5.5/pyftpdlib/servers.py 2019-04-04 01:42:29.000000000 +0200 @@ -122,6 +122,7 @@ @property def address(self): + """The address this server is listening on as a (ip, port) tuple.""" return self.socket.getsockname()[:2] def _map_len(self): @@ -513,16 +514,21 @@ if os.name == 'posix': - import multiprocessing + try: + import multiprocessing + multiprocessing.Lock() + except Exception: + # see https://github.com/giampaolo/pyftpdlib/issues/496 + pass + else: + __all__ += ['MultiprocessFTPServer'] + + class MultiprocessFTPServer(_SpawnerBase): + """A modified version of base FTPServer class which spawns a + process every time a new connection is established. + """ + _lock = multiprocessing.Lock() + _exit = multiprocessing.Event() - __all__ += ['MultiprocessFTPServer'] - - class MultiprocessFTPServer(_SpawnerBase): - """A modified version of base FTPServer class which spawns a - process every time a new connection is established. - """ - _lock = multiprocessing.Lock() - _exit = multiprocessing.Event() - - def _start_task(self, *args, **kwargs): - return multiprocessing.Process(*args, **kwargs) + def _start_task(self, *args, **kwargs): + return multiprocessing.Process(*args, **kwargs) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyftpdlib-1.5.4/pyftpdlib/test/__init__.py new/pyftpdlib-1.5.5/pyftpdlib/test/__init__.py --- old/pyftpdlib-1.5.4/pyftpdlib/test/__init__.py 2018-04-27 16:24:18.000000000 +0200 +++ new/pyftpdlib-1.5.5/pyftpdlib/test/__init__.py 2018-05-15 14:14:07.000000000 +0200 @@ -77,6 +77,22 @@ unittest.TestCase = TestCase +def close_client(session): + """Closes a ftplib.FTP client session.""" + try: + if session.sock is not None: + try: + resp = session.quit() + except Exception: + pass + else: + # ...just to make sure the server isn't replying to some + # pending command. + assert resp.startswith('221'), resp + finally: + session.close() + + def try_address(host, port=0, family=socket.AF_INET): """Try to bind a socket on the given host:port and return True if that has been possible.""" @@ -240,7 +256,8 @@ p = psutil.Process() children = p.children() assert not children, children - cons = p.connections('tcp') + cons = [x for x in p.connections('tcp') + if x.status != psutil.CONN_CLOSE_WAIT] assert not cons, cons diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyftpdlib-1.5.4/pyftpdlib/test/runner.py new/pyftpdlib-1.5.5/pyftpdlib/test/runner.py --- old/pyftpdlib-1.5.4/pyftpdlib/test/runner.py 2018-04-27 08:21:14.000000000 +0200 +++ new/pyftpdlib-1.5.5/pyftpdlib/test/runner.py 2019-03-27 21:53:41.000000000 +0100 @@ -4,8 +4,18 @@ # Use of this source code is governed by MIT license that can be # found in the LICENSE file. + +from __future__ import print_function +import atexit import os import sys +from unittest import TestResult +from unittest import TextTestResult +from unittest import TextTestRunner +try: + import ctypes +except ImportError: + ctypes = None from pyftpdlib.test import configure_logging from pyftpdlib.test import remove_test_files @@ -13,22 +23,136 @@ from pyftpdlib.test import VERBOSITY HERE = os.path.abspath(os.path.dirname(__file__)) +if os.name == 'posix': + GREEN = 1 + RED = 2 + BROWN = 94 +else: + GREEN = 2 + RED = 4 + BROWN = 6 + DEFAULT_COLOR = 7 + + +def term_supports_colors(file=sys.stdout): + if os.name == 'nt': + return ctypes is not None + try: + import curses + assert file.isatty() + curses.setupterm() + assert curses.tigetnum("colors") > 0 + except Exception: + return False + else: + return True + + +def hilite(s, color, bold=False): + """Return an highlighted version of 'string'.""" + attr = [] + if color == GREEN: + attr.append('32') + elif color == RED: + attr.append('91') + elif color == BROWN: + attr.append('33') + else: + raise ValueError("unrecognized color") + if bold: + attr.append('1') + return '\x1b[%sm%s\x1b[0m' % (';'.join(attr), s) + + +def _stderr_handle(): + GetStdHandle = ctypes.windll.Kernel32.GetStdHandle + STD_ERROR_HANDLE_ID = ctypes.c_ulong(0xfffffff4) + GetStdHandle.restype = ctypes.c_ulong + handle = GetStdHandle(STD_ERROR_HANDLE_ID) + atexit.register(ctypes.windll.Kernel32.CloseHandle, handle) + return handle + + +def win_colorprint(printer, s, color, bold=False): + if bold and color <= 7: + color += 8 + handle = _stderr_handle() + SetConsoleTextAttribute = ctypes.windll.Kernel32.SetConsoleTextAttribute + SetConsoleTextAttribute(handle, color) + try: + printer(s) + finally: + SetConsoleTextAttribute(handle, DEFAULT_COLOR) + + +class ColouredResult(TextTestResult): + + def _color_print(self, s, color, bold=False): + if os.name == 'posix': + self.stream.writeln(hilite(s, color, bold=bold)) + else: + win_colorprint(self.stream.writeln, s, color, bold=bold) + + def addSuccess(self, test): + TestResult.addSuccess(self, test) + self._color_print("OK", GREEN) + + def addError(self, test, err): + TestResult.addError(self, test, err) + self._color_print("ERROR", RED, bold=True) + + def addFailure(self, test, err): + TestResult.addFailure(self, test, err) + self._color_print("FAIL", RED) + + def addSkip(self, test, reason): + TestResult.addSkip(self, test, reason) + self._color_print("skipped: %s" % reason, BROWN) + + def printErrorList(self, flavour, errors): + flavour = hilite(flavour, RED, bold=flavour == 'ERROR') + TextTestResult.printErrorList(self, flavour, errors) + + +class ColouredRunner(TextTestRunner): + resultclass = ColouredResult if term_supports_colors() else TextTestResult + + def _makeResult(self): + # Store result instance so that it can be accessed on + # KeyboardInterrupt. + self.result = TextTestRunner._makeResult(self) + return self.result + + +def get_suite(name=None): + suite = unittest.TestSuite() + if name is None: + testmods = [os.path.splitext(x)[0] for x in os.listdir(HERE) + if x.endswith('.py') and x.startswith('test_')] + for tm in testmods: + # ...so that the full test paths are printed on screen + tm = "pyftpdlib.test.%s" % tm + suite.addTest(unittest.defaultTestLoader.loadTestsFromName(tm)) + else: + name = os.path.splitext(os.path.basename(name))[0] + suite.addTest(unittest.defaultTestLoader.loadTestsFromName(name)) + return suite -def main(): - testmodules = [os.path.splitext(x)[0] for x in os.listdir(HERE) - if x.endswith('.py') and x.startswith('test_')] +def main(name=None): configure_logging() remove_test_files() - suite = unittest.TestSuite() - for t in testmodules: - # ...so that "make test" will print the full test paths - t = "pyftpdlib.test.%s" % t - suite.addTest(unittest.defaultTestLoader.loadTestsFromName(t)) - result = unittest.TextTestRunner(verbosity=VERBOSITY).run(suite) - return result.wasSuccessful() + runner = ColouredRunner(verbosity=VERBOSITY) + try: + result = runner.run(get_suite(name)) + except (KeyboardInterrupt, SystemExit) as err: + print("received %s" % err.__class__.__name__, file=sys.stderr) + runner.result.printErrors() + sys.exit(1) + else: + success = result.wasSuccessful() + sys.exit(0 if success else 1) if __name__ == '__main__': - if not main(): - sys.exit(1) + main() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyftpdlib-1.5.4/pyftpdlib/test/test_functional.py new/pyftpdlib-1.5.5/pyftpdlib/test/test_functional.py --- old/pyftpdlib-1.5.4/pyftpdlib/test/test_functional.py 2018-04-27 16:53:45.000000000 +0200 +++ new/pyftpdlib-1.5.5/pyftpdlib/test/test_functional.py 2019-03-27 17:31:43.000000000 +0100 @@ -30,6 +30,7 @@ from pyftpdlib.ioloop import IOLoop from pyftpdlib.servers import FTPServer from pyftpdlib.test import BUFSIZE +from pyftpdlib.test import close_client from pyftpdlib.test import configure_logging from pyftpdlib.test import disable_log_warning from pyftpdlib.test import get_server_handler @@ -86,7 +87,7 @@ self.dummyfile = BytesIO() def tearDown(self): - self.client.close() + close_client(self.client) self.server.stop() if not self.file.closed: self.file.close() @@ -260,7 +261,7 @@ self.client.login(USER, PASSWD) def tearDown(self): - self.client.close() + close_client(self.client) self.server.stop() def test_type(self): @@ -383,7 +384,7 @@ self.client.login(USER, PASSWD) def tearDown(self): - self.client.close() + close_client(self.client) self.server.stop() def test_arg_cmds(self): @@ -448,7 +449,7 @@ self.tempdir = os.path.basename(tempfile.mkdtemp(dir=HOME)) def tearDown(self): - self.client.close() + close_client(self.client) self.server.stop() safe_remove(self.tempfile) if os.path.exists(self.tempdir): @@ -658,7 +659,7 @@ self.dummy_sendfile = BytesIO() def tearDown(self): - self.client.close() + close_client(self.client) self.server.stop() self.dummy_recvfile.close() self.dummy_sendfile.close() @@ -960,12 +961,24 @@ class TestFtpRetrieveData(unittest.TestCase): - - "Test RETR, REST, TYPE" + """Test RETR, REST, TYPE""" server_class = MProcessTestFTPd client_class = ftplib.FTP use_sendfile = None + def retrieve_ascii(self, cmd, callback, blocksize=8192, rest=None): + """Like retrbinary but uses TYPE A instead.""" + self.client.voidcmd('type a') + with contextlib.closing( + self.client.transfercmd(cmd, rest)) as conn: + conn.settimeout(TIMEOUT) + while True: + data = conn.recv(blocksize) + if not data: + break + callback(data) + return self.client.voidresp() + def setUp(self): self.server = self.server_class() if self.use_sendfile is not None: @@ -978,7 +991,7 @@ self.dummyfile = BytesIO() def tearDown(self): - self.client.close() + close_client(self.client) self.server.stop() if not self.file.closed: self.file.close() @@ -1005,31 +1018,30 @@ "retr " + bogus, lambda x: x) def test_retr_ascii(self): - # Test RETR in ASCII mode. - - def retrieve(cmd, callback, blocksize=8192, rest=None): - # like retrbinary but uses TYPE A instead - self.client.voidcmd('type a') - with contextlib.closing( - self.client.transfercmd(cmd, rest)) as conn: - conn.settimeout(TIMEOUT) - while True: - data = conn.recv(blocksize) - if not data: - break - callback(data) - return self.client.voidresp() + """Test RETR in ASCII mode.""" data = (b'abcde12345' + b(os.linesep)) * 100000 self.file.write(data) self.file.close() - retrieve("retr " + TESTFN, self.dummyfile.write) + self.retrieve_ascii("retr " + TESTFN, self.dummyfile.write) expected = data.replace(b(os.linesep), b'\r\n') self.dummyfile.seek(0) datafile = self.dummyfile.read() self.assertEqual(len(expected), len(datafile)) self.assertEqual(hash(expected), hash(datafile)) + def test_retr_ascii_already_crlf(self): + """Test ASCII mode RETR for data with CRLF line endings.""" + + data = b'abcde12345\r\n' * 100000 + self.file.write(data) + self.file.close() + self.retrieve_ascii("retr " + TESTFN, self.dummyfile.write) + self.dummyfile.seek(0) + datafile = self.dummyfile.read() + self.assertEqual(len(data), len(datafile)) + self.assertEqual(hash(data), hash(datafile)) + @retry_on_failure() def test_restore_on_retr(self): data = b'abcde12345' * 1000000 @@ -1096,7 +1108,7 @@ touch(TESTFN) def tearDown(self): - self.client.close() + close_client(self.client) self.server.stop() os.remove(TESTFN) @@ -1257,7 +1269,7 @@ self.client.login(USER, PASSWD) def tearDown(self): - self.client.close() + close_client(self.client) self.server.stop() def test_abor_no_data(self): @@ -1364,7 +1376,7 @@ self.dummyfile = BytesIO() def tearDown(self): - self.client.close() + close_client(self.client) self.server.handler.dtp_handler.read_limit = 0 self.server.handler.dtp_handler.write_limit = 0 self.server.handler.dtp_handler = DTPHandler @@ -1430,7 +1442,7 @@ def tearDown(self): if self.client is not None and self.server is not None: - self.client.close() + close_client(self.client) self.server.handler.timeout = 300 self.server.handler.dtp_handler.timeout = 300 self.server.handler.passive_dtp.timeout = 30 @@ -1580,7 +1592,7 @@ def tearDown(self): if self.client is not None: - self.client.close() + close_client(self.client) # set back options to their original value if self.server is not None: self.server.server.max_cons = 0 @@ -1823,7 +1835,7 @@ self.client.connect(self.server.host, self.server.port) def tearDown(self): - self.client.close() + close_client(self.client) self.server.stop() safe_remove(TESTFN) safe_remove(self.TESTFN_2) @@ -1913,7 +1925,10 @@ if bytes_sent >= INTERRUPTED_TRANSF_SIZE or not chunk: self.client.putcmd('abor') break + # If a data transfer is in progress server is supposed to send + # a 426 reply followed by a 226 reply. self.assertRaises(ftplib.error_temp, self.client.getresp) # 426 + self.assertEqual(self.client.getresp()[:3], "226") self.read_file( 'on_connect,on_login:%s,on_incomplete_file_received:%s,' % (USER, self.TESTFN_2)) @@ -1958,7 +1973,7 @@ self.other_proto = "1" def tearDown(self): - self.client.close() + close_client(self.client) self.server.stop() def cmdresp(self, cmd): @@ -2149,7 +2164,7 @@ def tearDown(self): if self.client is not None: - self.client.close() + close_client(self.client) self.server.stop() def test_port_v4(self): @@ -2225,7 +2240,7 @@ self.client.login(USER, PASSWD) def tearDown(self): - self.client.close() + close_client(self.client) self.server.stop() def test_port_race_condition(self): @@ -2365,7 +2380,7 @@ # warnings.resetwarnings() # def tearDown(self): -# self.client.close() +# close_client(self.client) # self.server.stop() # remove_test_files() @@ -2529,7 +2544,7 @@ self.dummy_sendfile = BytesIO() def tearDown(self): - self.client.close() + close_client(self.client) self.server.stop() self.dummy_recvfile.close() self.dummy_sendfile.close() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyftpdlib-1.5.4/pyftpdlib/test/test_functional_ssl.py new/pyftpdlib-1.5.5/pyftpdlib/test/test_functional_ssl.py --- old/pyftpdlib-1.5.4/pyftpdlib/test/test_functional_ssl.py 2017-12-30 09:44:57.000000000 +0100 +++ new/pyftpdlib-1.5.5/pyftpdlib/test/test_functional_ssl.py 2018-05-15 13:19:21.000000000 +0200 @@ -14,6 +14,7 @@ import OpenSSL # requires "pip install pyopenssl" from pyftpdlib.handlers import TLS_FTPHandler +from pyftpdlib.test import close_client from pyftpdlib.test import configure_logging from pyftpdlib.test import MProcessTestFTPd from pyftpdlib.test import OSX @@ -195,7 +196,7 @@ def tearDown(self): if self.client is not None: self.client.ssl_version = ssl.PROTOCOL_SSLv23 - self.client.close() + close_client(self.client) if self.server is not None: self.server.handler.ssl_protocol = ssl.PROTOCOL_SSLv23 self.server.handler.tls_control_required = False @@ -313,7 +314,7 @@ def try_protocol_combo(self, server_protocol, client_protocol): self._setup(ssl_protocol=server_protocol) self.client.ssl_version = client_protocol - self.client.close() + close_client(self.client) self.client.connect(self.server.host, self.server.port) try: self.client.login() @@ -339,7 +340,7 @@ if hasattr(ssl, "PROTOCOL_SSLv2"): def test_sslv2(self): self.client.ssl_version = ssl.PROTOCOL_SSLv2 - self.client.close() + close_client(self.client) if not OSX: with self.server.lock: self.client.connect(self.server.host, self.server.port) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyftpdlib-1.5.4/pyftpdlib/test/test_servers.py new/pyftpdlib-1.5.5/pyftpdlib/test/test_servers.py --- old/pyftpdlib-1.5.4/pyftpdlib/test/test_servers.py 2018-05-04 23:04:20.000000000 +0200 +++ new/pyftpdlib-1.5.5/pyftpdlib/test/test_servers.py 2018-08-29 12:37:54.000000000 +0200 @@ -12,6 +12,7 @@ from pyftpdlib import handlers from pyftpdlib import servers +from pyftpdlib.test import close_client from pyftpdlib.test import configure_logging from pyftpdlib.test import HOST from pyftpdlib.test import PASSWD @@ -48,7 +49,7 @@ def tearDown(self): if self.client is not None: - self.client.close() + close_client(self.client) if self.server is not None: self.server.stop() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyftpdlib-1.5.4/pyftpdlib.egg-info/PKG-INFO new/pyftpdlib-1.5.5/pyftpdlib.egg-info/PKG-INFO --- old/pyftpdlib-1.5.4/pyftpdlib.egg-info/PKG-INFO 2018-05-04 23:06:51.000000000 +0200 +++ new/pyftpdlib-1.5.5/pyftpdlib.egg-info/PKG-INFO 2019-04-04 11:11:03.000000000 +0200 @@ -1,12 +1,16 @@ Metadata-Version: 2.1 Name: pyftpdlib -Version: 1.5.4 +Version: 1.5.5 Summary: Very fast asynchronous FTP server library Home-page: https://github.com/giampaolo/pyftpdlib/ Author: Giampaolo Rodola' Author-email: g.rodola@gmail.com License: MIT -Description: .. image:: https://img.shields.io/travis/giampaolo/pyftpdlib/master.svg?maxAge=3600&label=Linux%20/%20OSX +Description: .. image:: http://pepy.tech/badge/pyftpdlib + :target: http://pepy.tech/project/pyftpdlib + :alt: Downloads + + .. image:: https://img.shields.io/travis/giampaolo/pyftpdlib/master.svg?maxAge=3600&label=Linux%20/%20OSX :target: https://travis-ci.org/giampaolo/pyftpdlib :alt: Linux tests (Travis) @@ -194,67 +198,6 @@ software to the `adoptions list <http://pyftpdlib.readthedocs.io/en/latest/adoptions.html>`__. - Timeline - ======== - - - 2018-05-04: version `1.5.4 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-1.5.4.tar.gz>`__ released. - - 2017-11-04: version `1.5.3 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-1.5.3.tar.gz>`__ released. - - 2017-04-06: version `1.5.2 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-1.5.2.tar.gz>`__ released. - - 2016-05-02: version `1.5.1 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-1.5.1.tar.gz>`__ released. - - 2015-12-13: version `1.5.0 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-1.5.0.tar.gz>`__ released. - - 2014-06-03: version `1.4.0 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-1.4.0.tar.gz>`__ released. - - 2014-04-12: version `1.3.1 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-1.3.1.tar.gz>`__ released. - - 2013-11-07: version `1.3.0 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-1.3.0.tar.gz>`__ released. - - 2013-04-22: version `1.2.0 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-1.2.0.tar.gz>`__ released. - - 2013-04-09: version `1.1.0 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-1.1.0.tar.gz>`__ released. - - 2013-02-22: version `1.0.1 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-1.0.1.tar.gz>`__ released. - - 2013-02-19: version `1.0.0 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-1.0.0.tar.gz>`__ released. - - 2012-05-14: pyftpdlib included in `ftp-cloudfs <https://github.com/chmouel/ftp-cloudfs/>`__ project. - - 2012-01-25: version `0.7.0 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-0.7.0.tar.gz>`__ released. - - 2011-12-01: pyftpdlib included in `feitp-server <http://code.google.com/p/feitp-server/>`__ project. - - 2011-09-26: pyftpdlib included in `ftpmaster <https://github.com/MarkLIC/ftpmaster>`__ project. - - 2011-07-09: pyftpdlib included in `bftpd <http://bftpd.sourceforge.net/>`__ project. - - 2011-07-09: pyftpdlib included in `fastersync <http://code.google.com/p/fastersync/>`__ project. - - 2011-01-31: pyftpdlib included in `put.io FTP connector project <http://code.google.com/p/pyftpdlib/wiki/Adoptions?ts=1296442469&updated=Adoptions#put.io*FTP*connector>`__. - - 2011-01-24: version `0.6.0 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-0.6.0.tar.gz>`__ released. - - 2010-12-14: added `donations <http://code.google.com/p/pyftpdlib/wiki/Donate>`__. - - 2010-08-24: pyftpdlib included in `peerscape <http://www.peerscape.org/>`__ project. - - 2010-07-15: pyftpdlib included in `Faetus <http://tomatohater.com/faetus/>`__ project. - - 2010-07-11: pyftpdlib included in `Pyfilesystem <http://code.google.com/p/pyfilesystem>`__ project. - - 2010-06-28: pyftpdlib has been `packaged for Debian <http://packages.debian.org/sid/python-pyftpdlib>`__ - - 2010-04-28: pyftpdlib included in `sierramodulepos <http://forge.openbravo.com/plugins/mwiki/index.php/MobilePOS>`__ project. - - 2010-03-20: `http://www.smartfile.com <http://www.smartfile.com>`__ uses pyftpdlib. - - 2010-01-13: pyftpdlib included in `zenftp <http://code.irondojo.com/>`__ project. - - 2009-12-26: pyftpdlib included in `Symbian Python FTP server <http://code.google.com/p/sypftp>`__ project. - - 2009-11-04: `www.netplay.it <http://www.netplay.it>`__ uses pyftpdlib. - - 2009-11-04: `www.adcast.tv <http://www.adcast.tv>`__ uses pyftpdlib. - - 2009-11-04: `www.bitsontherun.com <http://www.bitsontherun.com>`__ uses pyftpdlib. - - 2009-11-02: pyftpdlib included in `ftp-cloudfs <http://github.com/chmouel/ftp-cloudfs>`__ project. - - 2009-09-14: version `0.5.2 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-0.5.2.tar.gz>`__ released. - - 2009-08-10: pyftpdlib included in `Imgserve <http://github.com/wuzhe/imgserve/tree/master>`__ project. - - 2009-07-22: pyftpdlib included in `Plumi <http://plumi.org/wiki>`__ project. - - 2009-04-02: pyftpdlib RPM-packaged and ported on `Fedora <https://admin.fedoraproject.org/pkgdb/packages/name/pyftpdlib>`__ to make users can easily install on it via *yum install pyftpdlib*. - - 2009-03-28: pyftpdlib included in `Bazaar <http://bazaar-vcs.org/>`__ project. - - 2009-02-23: pyftpdlib included in `ShareFTP <http://git.logfish.net/shareftp.git/>`__ project. - - 2009-01-21: version `0.5.1 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-0.5.1.tar.gz>`__ released. - - 2008-12-27: pyftpdlib included in `Google Chromium <http://code.google.com/intl/it-IT/chromium/>`__, the open source project behind `Google Chrome <http://www.google.com/chrome>`__. - - 2008-12-27: pyftpdlib ported on `GNU Darwin <http://www.gnu-darwin.org/>`__ systems to make users can easily install on it. - - 2008-11-26: pyftpdlib included in `OpenERP <http://openerp.com>`__. - - 2008-10-26: pyftpdlib included in `Python for OpenVMS <http://www.vmspython.org/>`__ as standard package. - - 2008-10-09: pyftpdlib included in `Shareme <http://bbs.archlinux.org/viewtopic.php?pid=431474>`__ project. - - 2008-09-20: version `0.5.0 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-0.5.0.tar.gz>`__ released. - - 2008-08-10: pyftpdlib included in `Manent <http://trac.manent-backup.com/>`__ project. - - 2008-05-16: version `0.4.0 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-0.4.0.tar.gz>`__ released. - - 2008-04-09: pyftpdlib used as backend for `gpftpd <http://arkadiusz-wahlig.blogspot.com/2008/04/hosting-files-on-google.html>`__, an FTP server for managing files hosted on `Google Pages <http://-ages.google.com>`__. - - 2008-01-17: version `0.3.0 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-0.3.0.tar.gz>`__ released. - - 2007-10-14: pyftpdlib included in `Aksy <http://walco.n--tree.net/projects/aksy/wiki>`__ project. - - 2007-09-17: version `0.2.0 <https://pypi.python.org/packages/source/p/pyftpdlib/pyftpdlib-0.2.0.tar.gz>`__ released. - - 2007-09-08: pyftpdlib included as `FarManager <http://farmanager.com/>`__ `plug-in <http://www.farmanager.com/enforum/viewtopic.php?t=640&highlight=&sid=12d4d90f27f421243bcf7a0e3c516efb>`__. - - 2007-03-06: pyftpdlib `ported on FreeBSD <http://www.freshports.org/ftp/py-pyftpdlib/>`__ systems to make users can easily install on it. - - 2007-03-07: version `0.1.1 <http://pyftpdlib.googlecode.com/files/pyftpdlib*0.1.1.tar.gz>`__ released. - - 2007-02-26: version `0.1.0 <http://pyftpdlib.googlecode.com/files/pyftpdlib*0.1.tar.gz>`__ released. - - 2006-09-26: initial clunky thread-based progenitor `link <http://billiejoex.altervista.org/Prj_pftpd.htm>`__. - Trademarks ========== @@ -299,5 +242,4 @@ Classifier: Programming Language :: Python :: 3.4 Classifier: Programming Language :: Python :: 3.5 Classifier: Programming Language :: Python :: 3.6 -Provides-Extra: sendfile Provides-Extra: ssl diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pyftpdlib-1.5.4/pyftpdlib.egg-info/requires.txt new/pyftpdlib-1.5.5/pyftpdlib.egg-info/requires.txt --- old/pyftpdlib-1.5.4/pyftpdlib.egg-info/requires.txt 2018-05-04 23:06:51.000000000 +0200 +++ new/pyftpdlib-1.5.5/pyftpdlib.egg-info/requires.txt 2019-04-04 11:11:03.000000000 +0200 @@ -1,6 +1,3 @@ -[sendfile] -pysendfile - [ssl] PyOpenSSL
participants (1)
-
root