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 <[email protected]>
+
+- 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: [email protected]
+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: [email protected]
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' <[email protected]>"
__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: [email protected]
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