source: trunk/pyproject.toml

Last change on this file was 168532d, checked in by Alexandre Detiste <alexandre.detiste@…>, at 2024-12-21T18:03:57Z

finish removing "future"

  • Property mode set to 100644
File size: 9.9 KB
Line 
1[project]
2name = "tahoe-lafs"
3dynamic = ["version"]
4description = "secure, decentralized, fault-tolerant file store"
5readme = "README.rst"
6requires-python = ">=3.9"
7license = "GPL-2.0-or-later"  # see README.rst -- there is an alternative licence
8authors = [
9  { name = "the Tahoe-LAFS project", email = "tahoe-dev@lists.tahoe-lafs.org" }
10]
11#keywords = [
12#  "privacy"
13#]
14classifiers = [
15    "Development Status :: 5 - Production/Stable",
16    "Environment :: Console",
17    "Environment :: Web Environment",
18    "License :: OSI Approved :: GNU General Public License (GPL)",
19    "License :: DFSG approved",
20    "License :: Other/Proprietary License",
21    "Intended Audience :: Developers",
22    "Intended Audience :: End Users/Desktop",
23    "Intended Audience :: System Administrators",
24    "Operating System :: Microsoft",
25    "Operating System :: Microsoft :: Windows",
26    "Operating System :: Unix",
27    "Operating System :: POSIX :: Linux",
28    "Operating System :: POSIX",
29    "Operating System :: MacOS :: MacOS X",
30    "Operating System :: OS Independent",
31    "Natural Language :: English",
32    "Programming Language :: C",
33    "Programming Language :: Python",
34    "Programming Language :: Python :: 3",
35    "Programming Language :: Python :: 3.9",
36    "Programming Language :: Python :: 3.10",
37    "Programming Language :: Python :: 3.11",
38    "Programming Language :: Python :: 3.12",
39    "Topic :: Utilities",
40    "Topic :: System :: Systems Administration",
41    "Topic :: System :: Filesystems",
42    "Topic :: System :: Distributed Computing",
43    "Topic :: Software Development :: Libraries",
44    "Topic :: System :: Archiving :: Backup",
45    "Topic :: System :: Archiving :: Mirroring",
46    "Topic :: System :: Archiving",
47]
48dependencies = [
49    "zfec >= 1.1.0",
50
51    # zope.interface >= 3.6.0 is required for Twisted >= 12.1.0.
52    "zope.interface >= 3.6.0",
53
54    # * foolscap < 0.5.1 had a performance bug which spent O(N**2) CPU for
55    #   transferring large mutable files of size N.
56    # * foolscap < 0.6 is incompatible with Twisted 10.2.0.
57    # * foolscap 0.6.1 quiets a DeprecationWarning.
58    # * foolscap < 0.6.3 is incompatible with Twisted 11.1.0 and newer.
59    # * foolscap 0.8.0 generates 2048-bit RSA-with-SHA-256 signatures,
60    #   rather than 1024-bit RSA-with-MD5. This also allows us to work
61    #   with a FIPS build of OpenSSL.
62    # * foolscap >= 0.12.3 provides tcp/tor/i2p connection handlers we need,
63    #   and allocate_tcp_port
64    # * foolscap >= 0.12.5 has ConnectionInfo and ReconnectionInfo
65    # * foolscap >= 0.12.6 has an i2p.sam_endpoint() that takes kwargs
66    # * foolscap 0.13.2 drops i2p support completely
67    # * foolscap >= 21.7 is necessary for Python 3 with i2p support.
68    # * foolscap >= 23.3 is necessary for Python 3.11.
69    "foolscap >= 21.7.0",
70    "foolscap >= 23.3.0; python_version > '3.10'",
71
72    # * cryptography 2.6 introduced some ed25519 APIs we rely on.  Note that
73    #   Twisted[conch] also depends on cryptography and Twisted[tls]
74    #   transitively depends on cryptography.  So it's anyone's guess what
75    #   version of cryptography will *really* be installed.
76    "cryptography >= 2.6",
77
78    # * Used for custom HTTPS validation
79    "pyOpenSSL >= 23.2.0",
80
81    # * The SFTP frontend depends on Twisted 11.0.0 to fix the SSH server
82    #   rekeying bug <https://twistedmatrix.com/trac/ticket/4395>
83    # * The SFTP frontend and manhole depend on the conch extra. However, we
84    #   can't explicitly declare that without an undesirable dependency on gmpy,
85    #   as explained in ticket #2740.
86    # * Due to a setuptools bug, we need to declare a dependency on the tls
87    #   extra even though we only depend on it via foolscap.
88    # * Twisted >= 15.1.0 is the first version that provided the [tls] extra.
89    # * Twisted-16.1.0 fixes https://twistedmatrix.com/trac/ticket/8223,
90    #   which otherwise causes test_system to fail (DirtyReactorError, due to
91    #   leftover timers)
92    # * Twisted-16.4.0 introduces `python -m twisted.trial` which is needed
93    #   for coverage testing
94    # * Twisted 16.6.0 drops the undesirable gmpy dependency from the conch
95    #   extra, letting us use that extra instead of trying to duplicate its
96    #   dependencies here.  Twisted[conch] >18.7 introduces a dependency on
97    #   bcrypt.  It is nice to avoid that if the user ends up with an older
98    #   version of Twisted.  That's hard to express except by using the extra.
99    #
100    # * Twisted 18.4.0 adds `client` and `host` attributes to `Request` in the
101    # * initializer, needed by logic in our custom `Request` subclass.
102    #
103    #   In a perfect world, Twisted[conch] would be a dependency of an "sftp"
104    #   extra.  However, pip fails to resolve the dependencies all
105    #   dependencies when asked for Twisted[tls] *and* Twisted[conch].
106    #   Specifically, "Twisted[conch]" (as the later requirement) is ignored.
107    #   If there were an Tahoe-LAFS sftp extra that dependended on
108    #   Twisted[conch] and install_requires only included Twisted[tls] then
109    #   `pip install tahoe-lafs[sftp]` would not install requirements
110    #   specified by Twisted[conch].  Since this would be the *whole point* of
111    #   an sftp extra in Tahoe-LAFS, there is no point in having one.
112    # * Twisted 19.10 introduces Site.getContentFile which we use to get
113    #   temporary upload files placed into a per-node temporary directory.
114    # * Twisted 22.8.0 added support for coroutine-returning functions in many
115    #   places (mainly via `maybeDeferred`)
116    "Twisted[tls,conch] >= 22.8.0",
117
118    "PyYAML >= 3.11",
119
120    # to be slowly removed from codebase
121    "six >= 1.10.0",
122
123    # For 'tahoe invite' and 'tahoe join'
124    "magic-wormhole >= 0.10.2",
125
126    # We want a new enough version to support custom JSON encoders.
127    "eliot >= 1.14.0",
128
129    "pyrsistent",
130
131    # A great way to define types of values.
132    "attrs >= 20.1.0",
133
134    # WebSocket library for twisted and asyncio
135    "autobahn >= 22.4.3",
136
137    # Discover local network configuration
138    "netifaces",
139
140    # Utility code:
141    "pyutil >= 3.3.0",
142
143    # Linux distribution detection:
144    "distro >= 1.4.0",
145
146    # For the RangeMap datastructure. Need 2.0.2 at least for bugfixes.
147    "collections-extended >= 2.0.2",
148
149    # HTTP server and client
150    # Latest version is necessary to work with latest werkzeug:
151    "klein >= 23.5.0",
152    # 2.2.0 has a bug: https://github.com/pallets/werkzeug/issues/2465
153    "werkzeug != 2.2.0",
154    "treq",
155    # 5.6.0 excluded because https://github.com/agronholm/cbor2/issues/208
156    "cbor2 != 5.6.0",
157
158    # 0.6 adds the ability to decode CBOR. 0.6.1 fixes PyPy.
159    "pycddl >= 0.6.1",
160
161    # Command-line parsing
162    "click >= 8.1.1",
163
164    # for pid-file support
165    "psutil",
166    "filelock",
167
168    # Duplicate the Twisted pywin32 dependency here.  See
169    # https://tahoe-lafs.org/trac/tahoe-lafs/ticket/2392 for some
170    # discussion.
171    "pywin32 != 226;sys_platform=='win32'"
172]
173
174
175[project.scripts]
176tahoe = "allmydata.scripts.runner:run"
177grid-manager = "allmydata.cli.grid_manager:grid_manager"
178
179
180[project.urls]
181Homepage = "https://tahoe-lafs.org/"
182Documentation = "https://tahoe-lafs.readthedocs.org/"
183"Source code" = "https://github.com/tahoe-lafs/tahoe-lafs/"
184
185
186[project.optional-dependencies]
187tor = [
188    # 23.5 added support for custom TLS contexts in web_agent(), which is
189    # needed for the HTTP storage client to run over Tor.
190    "txtorcon >= 23.5.0",
191]
192i2p = [
193    # txi2p has Python 3 support in master branch, but it has not been
194    # released -- see https://github.com/str4d/txi2p/issues/10.  We
195    # could use a fork for Python 3 until txi2p's maintainers are back
196    # in action.  For Python 2, we could continue using the txi2p
197    # version about which no one has complained to us so far.
198    "txi2p; python_version < '3.0'",
199    "txi2p-tahoe >= 0.3.5; python_version > '3.0'",
200]
201build = [
202  "dulwich",
203  "gpg",
204  "hatchling",
205  "hatch-vcs"
206]
207
208testenv = [
209    # Pin all of these versions for the same reason you ever want to
210    # pin anything: to prevent new releases with regressions from
211    # introducing spurious failures into CI runs for whatever
212    # development work is happening at the time.  The versions
213    # selected here are just the current versions at the time.
214    # Bumping them to keep up with future releases is fine as long
215    # as those releases are known to actually work.
216    "pip==23.3.1",
217    "wheel==0.41.3",
218    "subunitreporter==23.8.0",
219    "python-subunit==1.4.2",
220    "junitxml==0.7",
221    "coverage==7.2.5",
222]
223
224# Here are the library dependencies of the test suite.
225test = [
226    "mock",
227    "tox",
228    "pytest",
229    "pytest-twisted",
230    "tox >= 4.0.0",
231    "hypothesis >= 3.6.1",
232    "towncrier",
233    "testtools",
234    "fixtures",
235    "beautifulsoup4",
236    "html5lib",
237    # Pin old version until
238    # https://github.com/paramiko/paramiko/issues/1961 is fixed.
239    "paramiko < 2.9",
240    "pytest-timeout",
241    # Does our OpenMetrics endpoint adhere to the spec:
242    "prometheus-client == 0.11.0",
243
244    "tahoe-lafs[tor]",  # our own "tor" extra
245    "tahoe-lafs[i2p]"  # our own "i2p" extra
246]
247
248
249
250
251[tool.hatch.version]
252source = "vcs"
253tag-pattern = "tahoe-lafs-(.*)"
254
255[tool.hatch.build.hooks.vcs]
256version-file = "src/allmydata/_version.py"
257
258
259[build-system]
260requires = ["hatchling", "hatch-vcs"]
261build-backend = "hatchling.build"
262
263# https://github.com/ofek/hatch-vcs/issues/35#issuecomment-1452025896
264[tool.hatch.build]
265include = [
266        "src/",
267        "COPYING.GPL",
268        "COPYING.TGPPL.rst",
269        "CREDITS",
270        "Makefile",
271        "NEWS.rst",
272        "Tahoe.home",
273        "relnotes.txt",
274        "Dockerfile",
275        "tox.ini",
276        ".appveyor.yml",
277        ".travis.yml",
278        ".coveragerc",
279        "*.xhtml",
280        "*.png",
281        "*.css",
282        "*.svg",
283        "docs/",
284        "misc/",
285        "static/",
286        "integration/",
287        "src/allmydata/test/data/*.txt",
288        "src/allmydata/test/data/*.yaml"
289]
290exclude = [
291        "*~",
292        "*.pyc",
293        "#*#",
294        "venv*/",
295        ".tox/"
296]
297
298[tool.hatch.build.targets.wheel]
299packages = ["src/allmydata"]
Note: See TracBrowser for help on using the repository browser.