commit python-fs for openSUSE:Factory
![](https://seccdn.libravatar.org/avatar/e2145bc5cf53dda95c308a3c75e8fef3.jpg?s=120&d=mm&r=g)
Hello community, here is the log from the commit of package python-fs for openSUSE:Factory checked in at 2019-07-26 17:35:20 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-fs (Old) and /work/SRC/openSUSE:Factory/.python-fs.new.4126 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Package is "python-fs" Fri Jul 26 17:35:20 2019 rev:8 rq:718907 version:2.4.8 Changes: -------- --- /work/SRC/openSUSE:Factory/python-fs/python-fs.changes 2019-05-16 22:11:16.394219334 +0200 +++ /work/SRC/openSUSE:Factory/.python-fs.new.4126/python-fs.changes 2019-07-26 17:35:21.228064909 +0200 @@ -1,0 +2,10 @@ +Fri Jul 26 14:10:13 UTC 2019 - pgajdos@suse.com + +- version update to 2.4.8 + * geturl will return URL with user/password if needed @zmej-serow + * Flag to OSFS to disable env var expansion + * Implemented geturl in FTPFS @zmej-serow +- modified patches + % more-relaxed-requirements.patch (refreshed) + +------------------------------------------------------------------- Old: ---- fs-2.4.5.tar.gz New: ---- fs-2.4.8.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-fs.spec ++++++ --- /var/tmp/diff_new_pack.kMW0Tv/_old 2019-07-26 17:35:22.004064640 +0200 +++ /var/tmp/diff_new_pack.kMW0Tv/_new 2019-07-26 17:35:22.008064639 +0200 @@ -13,13 +13,13 @@ # license that conforms to the Open Source Definition (Version 1.9) # published by the Open Source Initiative. -# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# Please submit bugfixes or comments via https://bugs.opensuse.org/ # %{?!python_module:%define python_module() python-%{**} python3-%{**}} Name: python-fs -Version: 2.4.5 +Version: 2.4.8 Release: 0 Summary: Python's filesystem abstraction layer License: MIT @@ -38,9 +38,9 @@ BuildRequires: %{python_module scandir >= 1.5} BuildRequires: %{python_module setuptools} BuildRequires: %{python_module six >= 1.10.0} -BuildRequires: %{python_module typing} +BuildRequires: %{python_module typing >= 3.6} BuildRequires: fdupes -BuildRequires: python-backports.os +BuildRequires: python-backports.os >= 0.1 BuildRequires: python-rpm-macros Requires: python-appdirs >= 1.4.3 Requires: python-psutil ++++++ fs-2.4.5.tar.gz -> fs-2.4.8.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fs-2.4.5/PKG-INFO new/fs-2.4.8/PKG-INFO --- old/fs-2.4.5/PKG-INFO 2019-05-05 18:38:48.000000000 +0200 +++ new/fs-2.4.8/PKG-INFO 2019-06-12 09:19:33.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: fs -Version: 2.4.5 +Version: 2.4.8 Summary: Python's filesystem abstraction layer Home-page: https://github.com/PyFilesystem/pyfilesystem2 Author: Will McGugan @@ -129,7 +129,6 @@ Classifier: Operating System :: OS Independent Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 2.7 -Classifier: Programming Language :: Python :: 3.3 Classifier: Programming Language :: Python :: 3.4 Classifier: Programming Language :: Python :: 3.5 Classifier: Programming Language :: Python :: 3.6 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fs-2.4.5/fs/_version.py new/fs-2.4.8/fs/_version.py --- old/fs-2.4.5/fs/_version.py 2019-05-05 18:01:01.000000000 +0200 +++ new/fs-2.4.8/fs/_version.py 2019-06-12 09:18:39.000000000 +0200 @@ -1,3 +1,3 @@ """Version, used in module and setup.py. """ -__version__ = "2.4.5" +__version__ = "2.4.8" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fs-2.4.5/fs/base.py new/fs-2.4.8/fs/base.py --- old/fs-2.4.5/fs/base.py 2019-05-05 16:41:18.000000000 +0200 +++ new/fs-2.4.8/fs/base.py 2019-06-02 17:57:33.000000000 +0200 @@ -281,7 +281,7 @@ # type: (Text, RawInfo) -> None """Set info on a resource. - This method is the compliment to `~fs.base.FS.getinfo` + This method is the complement to `~fs.base.FS.getinfo` and is used to set info values on a resource. Arguments: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fs-2.4.5/fs/ftpfs.py new/fs-2.4.8/fs/ftpfs.py --- old/fs-2.4.5/fs/ftpfs.py 2019-01-06 13:13:51.000000000 +0100 +++ new/fs-2.4.8/fs/ftpfs.py 2019-06-12 09:18:11.000000000 +0200 @@ -440,11 +440,9 @@ def ftp_url(self): # type: () -> Text """Get the FTP url this filesystem will open.""" - url = ( - "ftp://{}".format(self.host) - if self.port == 21 - else "ftp://{}:{}".format(self.host, self.port) - ) + _host_part = self.host if self.port == 21 else "{}:{}".format(self.host, self.port) + _user_part = "" if self.user == "anonymous" or self.user is None else "{}:{}@".format(self.user, self.passwd) + url = "ftp://{}{}".format(_user_part, _host_part) return url @property @@ -454,6 +452,14 @@ """ return self._get_ftp() + def geturl(self, path, purpose="download"): + # type: (str, str) -> Text + """Get FTP url for resource.""" + _path = self.validatepath(path) + if purpose != "download": + raise errors.NoURL(_path, purpose) + return "{}{}".format(self.ftp_url, _path) + def _get_ftp(self): # type: () -> FTP if self._ftp is None: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fs-2.4.5/fs/osfs.py new/fs-2.4.8/fs/osfs.py --- old/fs-2.4.5/fs/osfs.py 2019-05-05 18:13:32.000000000 +0200 +++ new/fs-2.4.8/fs/osfs.py 2019-06-08 17:30:22.000000000 +0200 @@ -91,6 +91,8 @@ create_mode (int): The permissions that will be used to create the directory if ``create`` is `True` and the path doesn't exist, defaults to ``0o777``. + expand_vars(bool): If `True` (the default) environment variables of + the form $name or ${name} will be expanded. Raises: `fs.errors.CreateFailed`: If ``root_path`` does not @@ -108,6 +110,7 @@ root_path, # type: Text create=False, # type: bool create_mode=0o777, # type: SupportsInt + expand_vars=True, # type: bool ): # type: (...) -> None """Create an OSFS instance. @@ -118,7 +121,9 @@ self.root_path = root_path _drive, _root_path = os.path.splitdrive(fsdecode(fspath(root_path))) _root_path = _drive + (_root_path or "/") if _drive else _root_path - _root_path = os.path.expanduser(os.path.expandvars(_root_path)) + _root_path = os.path.expanduser( + os.path.expandvars(_root_path) if expand_vars else _root_path + ) _root_path = os.path.normpath(os.path.abspath(_root_path)) self._root_path = _root_path diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fs-2.4.5/fs/tarfs.py new/fs-2.4.8/fs/tarfs.py --- old/fs-2.4.5/fs/tarfs.py 2019-05-05 18:01:01.000000000 +0200 +++ new/fs-2.4.8/fs/tarfs.py 2019-06-08 16:17:09.000000000 +0200 @@ -17,6 +17,7 @@ from .base import FS from .compress import write_tar from .enums import ResourceType +from .errors import IllegalBackReference from .info import Info from .iotools import RawWrapper from .opener import open_fs @@ -275,14 +276,26 @@ self._directory_cache = None @property - def _directory(self): + def _directory_entries(self): """Lazy directory cache.""" if self._directory_cache is None: _decode = self._decode - _directory = ((_decode(info.name).strip("/"), info) for info in self._tar) - self._directory_cache = OrderedDict( - (name, info) for name, info in _directory if normpath(name) + _directory_entries = ( + (_decode(info.name).strip("/"), info) for info in self._tar ) + + def _list_tar(): + for name, info in _directory_entries: + try: + _name = normpath(name) + except IllegalBackReference: + # Back references outside root, must be up to no good. + pass + else: + if _name: + yield _name, info + + self._directory_cache = OrderedDict(_list_tar()) return self._directory_cache def __repr__(self): @@ -327,7 +340,7 @@ else: try: implicit = False - member = self._tar.getmember(self._encode(_path)) + member = self._directory_entries[_path] except KeyError: if not self.isdir(_path): raise errors.ResourceNotFound(path) @@ -370,14 +383,14 @@ def isdir(self, path): _path = relpath(self.validatepath(path)) try: - return self._directory[_path].isdir() + return self._directory_entries[_path].isdir() except KeyError: - return any(isbase(_path, name) for name in self._directory) + return any(isbase(_path, name) for name in self._directory_entries) def isfile(self, path): _path = relpath(self.validatepath(path)) try: - return self._directory[_path].isfile() + return self._directory_entries[_path].isfile() except KeyError: return False @@ -393,7 +406,9 @@ if not self.gettype(path) is ResourceType.directory: raise errors.DirectoryExpected(path) - children = (frombase(_path, n) for n in self._directory if isbase(_path, n)) + children = ( + frombase(_path, n) for n in self._directory_entries if isbase(_path, n) + ) content = (parts(child)[1] for child in children if relpath(child)) return list(OrderedDict.fromkeys(content)) @@ -415,7 +430,7 @@ raise errors.ResourceReadOnly(path) try: - member = self._tar.getmember(self._encode(_path)) + member = self._directory_entries[_path] except KeyError: six.raise_from(errors.ResourceNotFound(path), None) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fs-2.4.5/fs.egg-info/PKG-INFO new/fs-2.4.8/fs.egg-info/PKG-INFO --- old/fs-2.4.5/fs.egg-info/PKG-INFO 2019-05-05 18:38:48.000000000 +0200 +++ new/fs-2.4.8/fs.egg-info/PKG-INFO 2019-06-12 09:19:32.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: fs -Version: 2.4.5 +Version: 2.4.8 Summary: Python's filesystem abstraction layer Home-page: https://github.com/PyFilesystem/pyfilesystem2 Author: Will McGugan @@ -129,7 +129,6 @@ Classifier: Operating System :: OS Independent Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 2.7 -Classifier: Programming Language :: Python :: 3.3 Classifier: Programming Language :: Python :: 3.4 Classifier: Programming Language :: Python :: 3.5 Classifier: Programming Language :: Python :: 3.6 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fs-2.4.5/setup.py new/fs-2.4.8/setup.py --- old/fs-2.4.5/setup.py 2018-12-23 17:50:05.000000000 +0100 +++ new/fs-2.4.8/setup.py 2019-06-08 16:17:09.000000000 +0200 @@ -2,30 +2,24 @@ from setuptools import setup, find_packages -with open('fs/_version.py') as f: +with open("fs/_version.py") as f: exec(f.read()) CLASSIFIERS = [ - 'Development Status :: 5 - Production/Stable', - 'Intended Audience :: Developers', - 'License :: OSI Approved :: MIT License', - 'Operating System :: OS Independent', - 'Programming Language :: Python', - 'Programming Language :: Python :: 2.7', - 'Programming Language :: Python :: 3.3', - 'Programming Language :: Python :: 3.4', - 'Programming Language :: Python :: 3.5', - 'Programming Language :: Python :: 3.6', - 'Programming Language :: Python :: 3.7', - 'Topic :: System :: Filesystems', + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Programming Language :: Python :: 2.7", + "Programming Language :: Python :: 3.4", + "Programming Language :: Python :: 3.5", + "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3.7", + "Topic :: System :: Filesystems", ] -REQUIREMENTS = [ - "appdirs~=1.4.3", - "pytz", - "setuptools", - "six~=1.10", -] +REQUIREMENTS = ["appdirs~=1.4.3", "pytz", "setuptools", "six~=1.10"] setup( author="Will McGugan", @@ -34,21 +28,19 @@ description="Python's filesystem abstraction layer", install_requires=REQUIREMENTS, extras_require={ - "scandir :python_version < '3.5'": ['scandir~=1.5'], - ":python_version < '3.4'": ['enum34~=1.1.6'], - ":python_version < '3.6'": ['typing~=3.6'], - ":python_version < '3.0'": ['backports.os~=0.1'] + "scandir :python_version < '3.5'": ["scandir~=1.5"], + ":python_version < '3.4'": ["enum34~=1.1.6"], + ":python_version < '3.6'": ["typing~=3.6"], + ":python_version < '3.0'": ["backports.os~=0.1"], }, license="MIT", - name='fs', + name="fs", packages=find_packages(exclude=("tests",)), - package_data = { - 'fs': ['py.typed'], - }, + package_data={"fs": ["py.typed"]}, zip_safe=False, - platforms=['any'], + platforms=["any"], test_suite="nose.collector", - tests_require=['appdirs', 'mock', 'pytz', 'pyftpdlib'], + tests_require=["appdirs", "mock", "pytz", "pyftpdlib"], url="https://github.com/PyFilesystem/pyfilesystem2", version=__version__, ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fs-2.4.5/tests/test_copy.py new/fs-2.4.8/tests/test_copy.py --- old/fs-2.4.5/tests/test_copy.py 2019-01-06 13:13:51.000000000 +0100 +++ new/fs-2.4.8/tests/test_copy.py 2019-06-02 18:10:03.000000000 +0200 @@ -6,7 +6,8 @@ import unittest import tempfile import shutil -import datetime +import calendar + from six import PY2 import fs.copy @@ -116,14 +117,10 @@ f.write("1" * write_chars) return filepath - def _delay_file_utime(self, filepath, delta_sec=None): - import calendar - from datetime import datetime - - file_access_mod_time = ( - int(calendar.timegm(datetime.now().timetuple())) + delta_sec - ) - times = (file_access_mod_time, file_access_mod_time) + def _delay_file_utime(self, filepath, delta_sec): + utcnow = datetime.datetime.utcnow() + unix_timestamp = calendar.timegm(utcnow.timetuple()) + times = unix_timestamp + delta_sec, unix_timestamp + delta_sec os.utime(filepath, times) def test_copy_file_if_newer_same_fs(self): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fs-2.4.5/tests/test_ftpfs.py new/fs-2.4.8/tests/test_ftpfs.py --- old/fs-2.4.5/tests/test_ftpfs.py 2019-02-23 10:58:23.000000000 +0100 +++ new/fs-2.4.8/tests/test_ftpfs.py 2019-06-12 09:18:11.000000000 +0200 @@ -166,7 +166,21 @@ super(TestFTPFS, self).tearDown() def test_ftp_url(self): - self.assertTrue(self.fs.ftp_url.startswith("ftp://127.0.0.1")) + self.assertEqual(self.fs.ftp_url, "ftp://{}:{}@{}:{}".format(self.user, self.pasw, self.server.host, self.server.port)) + + def test_geturl(self): + self.fs.makedir("foo") + self.fs.create("bar") + self.fs.create("foo/bar") + self.assertEqual( + self.fs.geturl('foo'), "ftp://{}:{}@{}:{}/foo".format(self.user, self.pasw, self.server.host, self.server.port) + ) + self.assertEqual( + self.fs.geturl('bar'), "ftp://{}:{}@{}:{}/bar".format(self.user, self.pasw, self.server.host, self.server.port) + ) + self.assertEqual( + self.fs.geturl('foo/bar'), "ftp://{}:{}@{}:{}/foo/bar".format(self.user, self.pasw, self.server.host, self.server.port) + ) def test_host(self): self.assertEqual(self.fs.host, self.server.host) @@ -236,3 +250,62 @@ def test_features(self): pass + + +@attr("slow") +class TestAnonFTPFS(FSTestCases, unittest.TestCase): + + user = "anonymous" + pasw = "" + + @classmethod + def setUpClass(cls): + from pyftpdlib.test import ThreadedTestFTPd + + super(TestAnonFTPFS, cls).setUpClass() + + cls._temp_dir = tempfile.mkdtemp("ftpfs2tests") + cls._temp_path = os.path.join(cls._temp_dir, text_type(uuid.uuid4())) + os.mkdir(cls._temp_path) + + cls.server = ThreadedTestFTPd() + cls.server.shutdown_after = -1 + cls.server.handler.authorizer = DummyAuthorizer() + cls.server.handler.authorizer.add_anonymous(cls._temp_path, perm="elradfmw") + cls.server.start() + + # Don't know why this is necessary on Windows + if platform.system() == "Windows": + time.sleep(0.1) + # Poll until a connection can be made + if not cls.server.is_alive(): + raise RuntimeError("could not start FTP server.") + + @classmethod + def tearDownClass(cls): + cls.server.stop() + shutil.rmtree(cls._temp_dir) + super(TestAnonFTPFS, cls).tearDownClass() + + def make_fs(self): + return open_fs( + "ftp://{}:{}".format( + self.server.host, self.server.port + ) + ) + + def tearDown(self): + shutil.rmtree(self._temp_path) + os.mkdir(self._temp_path) + super(TestAnonFTPFS, self).tearDown() + + def test_ftp_url(self): + self.assertEqual(self.fs.ftp_url, "ftp://{}:{}".format(self.server.host, self.server.port)) + + def test_geturl(self): + self.fs.makedir("foo") + self.fs.create("bar") + self.fs.create("foo/bar") + self.assertEqual(self.fs.geturl('foo'), "ftp://{}:{}/foo".format(self.server.host, self.server.port)) + self.assertEqual(self.fs.geturl('bar'), "ftp://{}:{}/bar".format(self.server.host, self.server.port)) + self.assertEqual(self.fs.geturl('foo/bar'), "ftp://{}:{}/foo/bar".format(self.server.host, self.server.port)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fs-2.4.5/tests/test_osfs.py new/fs-2.4.8/tests/test_osfs.py --- old/fs-2.4.5/tests/test_osfs.py 2019-02-23 10:58:23.000000000 +0100 +++ new/fs-2.4.8/tests/test_osfs.py 2019-06-08 17:30:22.000000000 +0200 @@ -69,6 +69,16 @@ with self.assertRaises(errors.CreateFailed): fs = osfs.OSFS("/does/not/exists/") + def test_expand_vars(self): + self.fs.makedir("TYRIONLANISTER") + self.fs.makedir("$FOO") + path = self.fs.getsyspath("$FOO") + os.environ["FOO"] = "TYRIONLANISTER" + fs1 = osfs.OSFS(path) + fs2 = osfs.OSFS(path, expand_vars=False) + self.assertIn("TYRIONLANISTER", fs1.getsyspath("/")) + self.assertNotIn("TYRIONLANISTER", fs2.getsyspath("/")) + @unittest.skipIf(osfs.sendfile is None, "sendfile not supported") def test_copy_sendfile(self): # try copying using sendfile diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fs-2.4.5/tests/test_tarfs.py new/fs-2.4.8/tests/test_tarfs.py --- old/fs-2.4.5/tests/test_tarfs.py 2019-05-05 18:01:01.000000000 +0200 +++ new/fs-2.4.8/tests/test_tarfs.py 2019-06-08 16:17:09.000000000 +0200 @@ -188,7 +188,7 @@ self.assertTrue(top.get("tar", "is_file")) -class TestBrokenDir(unittest.TestCase): +class TestBrokenPaths(unittest.TestCase): @classmethod def setUpClass(cls): cls.tmpfs = open_fs("temp://tarfstest") @@ -200,7 +200,8 @@ def setUp(self): self.tempfile = self.tmpfs.open("test.tar", "wb+") with tarfile.open(mode="w", fileobj=self.tempfile) as tf: - tf.addfile(tarfile.TarInfo("."), io.StringIO) + tf.addfile(tarfile.TarInfo("."), io.StringIO()) + tf.addfile(tarfile.TarInfo("../foo.txt"), io.StringIO()) self.tempfile.seek(0) self.fs = tarfs.TarFS(self.tempfile) @@ -228,8 +229,8 @@ self.tempfile = self.tmpfs.open("test.tar", "wb+") with tarfile.open(mode="w", fileobj=self.tempfile) as tf: tf.addfile(tarfile.TarInfo("foo/bar/baz/spam.txt"), io.StringIO()) - tf.addfile(tarfile.TarInfo("foo/eggs.bin"), io.StringIO()) - tf.addfile(tarfile.TarInfo("foo/yolk/beans.txt"), io.StringIO()) + tf.addfile(tarfile.TarInfo("./foo/eggs.bin"), io.StringIO()) + tf.addfile(tarfile.TarInfo("./foo/yolk/beans.txt"), io.StringIO()) info = tarfile.TarInfo("foo/yolk") info.type = tarfile.DIRTYPE tf.addfile(info, io.BytesIO()) ++++++ more-relaxed-requirements.patch ++++++ --- /var/tmp/diff_new_pack.kMW0Tv/_old 2019-07-26 17:35:22.104064605 +0200 +++ /var/tmp/diff_new_pack.kMW0Tv/_new 2019-07-26 17:35:22.108064604 +0200 @@ -1,30 +1,28 @@ ---- a/setup.py -+++ b/setup.py -@@ -21,10 +21,10 @@ +Index: fs-2.4.8/setup.py +=================================================================== +--- fs-2.4.8.orig/setup.py 2019-07-26 15:56:23.878197898 +0200 ++++ fs-2.4.8/setup.py 2019-07-26 15:57:13.178479543 +0200 +@@ -19,7 +19,7 @@ CLASSIFIERS = [ + "Topic :: System :: Filesystems", ] - REQUIREMENTS = [ -- "appdirs~=1.4.3", -+ "appdirs", - "pytz", - "setuptools", -- "six~=1.10", -+ "six", - ] +-REQUIREMENTS = ["appdirs~=1.4.3", "pytz", "setuptools", "six~=1.10"] ++REQUIREMENTS = ["appdirs>=1.4.3", "pytz", "setuptools", "six>=1.10"] setup( -@@ -34,10 +34,10 @@ + author="Will McGugan", +@@ -28,10 +28,10 @@ setup( description="Python's filesystem abstraction layer", install_requires=REQUIREMENTS, extras_require={ -- "scandir :python_version < '3.5'": ['scandir~=1.5'], -- ":python_version < '3.4'": ['enum34~=1.1.6'], -- ":python_version < '3.6'": ['typing~=3.6'], -- ":python_version < '3.0'": ['backports.os~=0.1'] -+ "scandir :python_version < '3.5'": ['scandir'], -+ ":python_version < '3.4'": ['enum34'], -+ ":python_version < '3.6'": ['typing'], -+ ":python_version < '3.0'": ['backports.os'] +- "scandir :python_version < '3.5'": ["scandir~=1.5"], +- ":python_version < '3.4'": ["enum34~=1.1.6"], +- ":python_version < '3.6'": ["typing~=3.6"], +- ":python_version < '3.0'": ["backports.os~=0.1"], ++ "scandir :python_version < '3.5'": ["scandir>=1.5"], ++ ":python_version < '3.4'": ["enum34>=1.1.6"], ++ ":python_version < '3.6'": ["typing>=3.6"], ++ ":python_version < '3.0'": ["backports.os>=0.1"], }, license="MIT", - name='fs', + name="fs",
participants (1)
-
root