# https://setuptools.pypa.io/en/latest/userguide/declarative_config.html#declarative-config [metadata] name = tahoe-lafs [options] description = secure, decentralized, fault-tolerant file store long_description = file: README.rst author = the Tahoe-LAFS project author_email = tahoe-dev@lists.tahoe-lafs.org project_urls = website=https://tahoe-lafs.org/ documentation=https://tahoe-lafs.readthedocs.org/ source=https://github.com/tahoe-lafs/tahoe-lafs classifiers = file: CLASSIFIERS.txt license_files = COPYING.GPL, COPYING.TGPPL.rst # tell setuptools to find our package source files automatically packages = find: # find packages beneath the src directory package_dir= =src include_package_data = True # We support Python 3.7 or later. 3.11 is not supported yet. python_requires = >=3.7, <3.11 install_requires = # we don't need much out of setuptools but the version checking stuff # needs pkg_resources and PEP 440 version specifiers. setuptools >= 28.8.0 zfec >= 1.1.0 # zope.interface >= 3.6.0 is required for Twisted >= 12.1.0. zope.interface >= 3.6.0 # * foolscap < 0.5.1 had a performance bug which spent O(N**2) CPU for # transferring large mutable files of size N. # * foolscap < 0.6 is incompatible with Twisted 10.2.0. # * foolscap 0.6.1 quiets a DeprecationWarning. # * foolscap < 0.6.3 is incompatible with Twisted 11.1.0 and newer. # * foolscap 0.8.0 generates 2048-bit RSA-with-SHA-256 signatures, # rather than 1024-bit RSA-with-MD5. This also allows us to work # with a FIPS build of OpenSSL. # * foolscap >= 0.12.3 provides tcp/tor/i2p connection handlers we need, # and allocate_tcp_port # * foolscap >= 0.12.5 has ConnectionInfo and ReconnectionInfo # * foolscap >= 0.12.6 has an i2p.sam_endpoint() that takes kwargs # * foolscap 0.13.2 drops i2p support completely # * foolscap >= 21.7 is necessary for Python 3 with i2p support. foolscap >= 21.7.0 # * cryptography 2.6 introduced some ed25519 APIs we rely on. Note that # Twisted[conch] also depends on cryptography and Twisted[tls] # transitively depends on cryptography. So it's anyone's guess what # version of cryptography will *really* be installed. cryptography >= 2.6 # * The SFTP frontend depends on Twisted 11.0.0 to fix the SSH server # rekeying bug # * The SFTP frontend and manhole depend on the conch extra. However, we # can't explicitly declare that without an undesirable dependency on gmpy, # as explained in ticket #2740. # * Due to a setuptools bug, we need to declare a dependency on the tls # extra even though we only depend on it via foolscap. # * Twisted >= 15.1.0 is the first version that provided the [tls] extra. # * Twisted-16.1.0 fixes https://twistedmatrix.com/trac/ticket/8223, # which otherwise causes test_system to fail (DirtyReactorError, due to # leftover timers) # * Twisted-16.4.0 introduces `python -m twisted.trial` which is needed # for coverage testing # * Twisted 16.6.0 drops the undesirable gmpy dependency from the conch # extra, letting us use that extra instead of trying to duplicate its # dependencies here. Twisted[conch] >18.7 introduces a dependency on # bcrypt. It is nice to avoid that if the user ends up with an older # version of Twisted. That's hard to express except by using the extra. # # * Twisted 18.4.0 adds `client` and `host` attributes to `Request` in the # * initializer, needed by logic in our custom `Request` subclass. # # In a perfect world, Twisted[conch] would be a dependency of an sftp # extra. However, pip fails to resolve the dependencies all # dependencies when asked for Twisted[tls] *and* Twisted[conch]. # Specifically, Twisted[conch] (as the later requirement) is ignored. # If there were an Tahoe-LAFS sftp extra that dependended on # Twisted[conch] and install_requires only included Twisted[tls] then # `pip install tahoe-lafs[sftp]` would not install requirements # specified by Twisted[conch]. Since this would be the *whole point* of # an sftp extra in Tahoe-LAFS, there is no point in having one. # * Twisted 19.10 introduces Site.getContentFile which we use to get # temporary upload files placed into a per-node temporary directory. Twisted[tls,conch] >= 19.10.0 PyYAML >= 3.11 six >= 1.10.0 # for 'tahoe invite' and 'tahoe join' magic-wormhole >= 0.10.2 # A new enough version to support custom JSON encoders. eliot >= 1.13.0 # Pyrsistent 0.17.0 (which we use by way of Eliot) has dropped # Python 2 entirely; stick to the version known to work for us. pyrsistent # A great way to define types of values. attrs >= 18.2.0 # WebSocket library for twisted and asyncio autobahn >= 19.5.2 # Support for Python 3 transition future >= 0.18.2 # Discover local network configuration netifaces # Utility code: pyutil >= 3.3.0 # Linux distribution detection: distro >= 1.4.0 # For the RangeMap datastructure. Need 2.0.2 at least for bugfixes. collections-extended >= 2.0.2 # Duplicate the Twisted pywin32 dependency here. See # https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2392 for some # discussion. pywin32 != 226 ; sys_platform=="win32" # HTTP server and client klein # 2.2.0 has a bug: https://github.com/pallets/werkzeug/issues/2465 werkzeug != 2.2.0 treq cbor2 pycddl >= 0.2 # for pid-file support psutil filelock [options.packages.find] # inform the setuptools source discovery logic to start in this directory where = src [options.package_data] allmydata.web = *.xhtml static/*.js static/*.png static/*.css static/img/*.png static/css/*.css [options.extras_require] build = dulwich gpg test = flake8 # On Python 3.7, importlib_metadata v5 breaks flake8. # https://github.com/python/importlib_metadata/issues/407 importlib_metadata < 5; python_version < "3.8" # Pin a specific pyflakes so we don't have different folks # disagreeing on what is or is not a lint issue. We can bump # this version from time to time, but we will do it # intentionally. pyflakes == 2.2.0 coverage ~= 5.0 mock tox pytest pytest-twisted hypothesis >= 3.6.1 towncrier testtools fixtures beautifulsoup4 html5lib junitxml tenacity # Pin old version until # https://github.com/paramiko/paramiko/issues/1961 is fixed. paramiko < 2.9 pytest-timeout # Does our OpenMetrics endpoint adhere to the spec: prometheus-client == 0.11.0 # Make sure the tor and i2p tests can run by duplicating the requirements # for those extras here. %(tor)s %(i2p)s tor = # This is exactly what `foolscap[tor]` means but pip resolves the pair of # dependencies "foolscap[i2p] foolscap[tor]" to "foolscap[i2p]" so we lose # this if we don't declare it ourselves! txtorcon >= 0.17.0 i2p = # txi2p has Python 3 support in master branch, but it has not been # released -- see https://github.com/str4d/txi2p/issues/10. We # could use a fork for Python 3 until txi2p's maintainers are back # in action. For Python 2, we could continue using the txi2p # version about which no one has complained to us so far. txi2p-tahoe >= 0.3.5 [options.entry_points] console_scripts = tahoe = allmydata.scripts.runner:run [flake8] # Enforce all pyflakes constraints, and also prohibit tabs for indentation. # Reference: # https://flake8.pycqa.org/en/latest/user/error-codes.html # https://pycodestyle.pycqa.org/en/latest/intro.html#error-codes select = F, W191