at 24.11-pre 8.3 kB view raw
1{ 2 lib, 3 stdenv, 4 buildPythonPackage, 5 pythonOlder, 6 fetchPypi, 7 fetchpatch, 8 python, 9 10 # build-system 11 hatchling, 12 hatch-fancy-pypi-readme, 13 14 # dependencies 15 attrs, 16 automat, 17 constantly, 18 hyperlink, 19 incremental, 20 typing-extensions, 21 zope-interface, 22 23 # optional-dependencies 24 appdirs, 25 bcrypt, 26 cryptography, 27 h2, 28 idna, 29 priority, 30 pyasn1, 31 pyopenssl, 32 pyserial, 33 service-identity, 34 35 # tests 36 cython-test-exception-raiser, 37 git, 38 glibcLocales, 39 pyhamcrest, 40 hypothesis, 41 42 # for passthru.tests 43 cassandra-driver, 44 klein, 45 magic-wormhole, 46 scrapy, 47 treq, 48 txaio, 49 txamqp, 50 txrequests, 51 txtorcon, 52 thrift, 53 nixosTests, 54}: 55 56buildPythonPackage rec { 57 pname = "twisted"; 58 version = "24.3.0"; 59 format = "pyproject"; 60 61 disabled = pythonOlder "3.6"; 62 63 src = fetchPypi { 64 inherit pname version; 65 extension = "tar.gz"; 66 hash = "sha256-azi27Ocpa14SLJ6xfaLuqz2YoZj1DKnv0A+wPltP1K4="; 67 }; 68 69 patches = [ 70 (fetchpatch { 71 # Conditionally skip tests that require METHOD_CRYPT 72 # https://github.com/twisted/twisted/pull/11827 73 url = "https://github.com/mweinelt/twisted/commit/e69e652de671aac0abf5c7e6c662fc5172758c5a.patch"; 74 hash = "sha256-LmvKUTViZoY/TPBmSlx4S9FbJNZfB5cxzn/YcciDmoI="; 75 }) 76 ]; 77 78 __darwinAllowLocalNetworking = true; 79 80 nativeBuildInputs = [ 81 hatchling 82 hatch-fancy-pypi-readme 83 incremental 84 ]; 85 86 propagatedBuildInputs = [ 87 attrs 88 automat 89 constantly 90 hyperlink 91 incremental 92 typing-extensions 93 zope-interface 94 ]; 95 96 postPatch = 97 '' 98 echo 'ListingTests.test_localeIndependent.skip = "Timezone issue"'>> src/twisted/conch/test/test_cftp.py 99 echo 'ListingTests.test_newFile.skip = "Timezone issue"'>> src/twisted/conch/test/test_cftp.py 100 echo 'ListingTests.test_newSingleDigitDayOfMonth.skip = "Timezone issue"'>> src/twisted/conch/test/test_cftp.py 101 echo 'ListingTests.test_oldFile.skip = "Timezone issue"'>> src/twisted/conch/test/test_cftp.py 102 echo 'ListingTests.test_oldSingleDigitDayOfMonth.skip = "Timezone issue"'>> src/twisted/conch/test/test_cftp.py 103 104 echo 'WrapClientTLSParserTests.test_tls.skip = "pyopenssl update"' >> src/twisted/internet/test/test_endpoints.py 105 echo 'UNIXTestsBuilder_AsyncioSelectorReactorTests.test_sendFileDescriptorTriggersPauseProducing.skip = "sendFileDescriptor producer was not paused"'>> src/twisted/internet/test/test_unix.py 106 echo 'UNIXTestsBuilder_SelectReactorTests.test_sendFileDescriptorTriggersPauseProducing.skip = "sendFileDescriptor producer was not paused"'>> src/twisted/internet/test/test_unix.py 107 108 echo 'FileObserverTests.test_getTimezoneOffsetEastOfUTC.skip = "mktime argument out of range"'>> src/twisted/test/test_log.py 109 echo 'FileObserverTests.test_getTimezoneOffsetWestOfUTC.skip = "mktime argument out of range"'>> src/twisted/test/test_log.py 110 echo 'FileObserverTests.test_getTimezoneOffsetWithoutDaylightSavingTime.skip = "tuple differs, values not"'>> src/twisted/test/test_log.py 111 112 echo 'FileDescriptorTests.test_expectedFDs.skip = "Expected duplicate file descriptor to be greater than original"' >> src/twisted/internet/test/test_posixprocess.py 113 114 echo 'MulticastTests.test_joinLeave.skip = "No such device"'>> src/twisted/test/test_udp.py 115 echo 'MulticastTests.test_loopback.skip = "No such device"'>> src/twisted/test/test_udp.py 116 echo 'MulticastTests.test_multicast.skip = "Reactor was unclean"'>> src/twisted/test/test_udp.py 117 echo 'MulticastTests.test_multiListen.skip = "No such device"'>> src/twisted/test/test_udp.py 118 119 # fails since migrating to libxcrypt 120 echo 'HelperTests.test_refuteCryptedPassword.skip = "OSError: Invalid argument"' >> src/twisted/conch/test/test_checkers.py 121 122 # expectation mismatch with `python -m twisted --help` and `python -m twisted.trial --help` usage output 123 echo 'MainTests.test_twisted.skip = "Expectation Mismatch"' >> src/twisted/test/test_main.py 124 echo 'MainTests.test_trial.skip = "Expectation Mismatch"' >> src/twisted/test/test_main.py 125 126 # tests for missing https support in usage 127 echo 'ServiceTests.test_HTTPSFailureOnMissingSSL.skip = "Expectation Mismatch"' >> src/twisted/web/test/test_tap.py 128 129 # fail on Python 3.12 130 echo 'WorkerReporterTests.test_addSkipPyunit.skip = "'WorkerReporter' object has no attribute '_testStarted'"' >> src/twisted/trial/_dist/test/test_workerreporter.py 131 echo 'LocalWorkerAMPTests.test_runSkip.skip = "twisted.protocols.amp.UnknownRemoteError: Code<UNKNOWN>: Unknown Error"' >> src/twisted/trial/_dist/test/test_worker.py 132 133 # not packaged 134 substituteInPlace src/twisted/test/test_failure.py \ 135 --replace "from cython_test_exception_raiser import raiser # type: ignore[import]" "raiser = None" 136 '' 137 + lib.optionalString stdenv.isLinux '' 138 echo 'PTYProcessTestsBuilder_EPollReactorTests.test_openFileDescriptors.skip = "invalid syntax"'>> src/twisted/internet/test/test_process.py 139 echo 'PTYProcessTestsBuilder_PollReactorTests.test_openFileDescriptors.skip = "invalid syntax"'>> src/twisted/internet/test/test_process.py 140 echo 'UNIXTestsBuilder_EPollReactorTests.test_sendFileDescriptorTriggersPauseProducing.skip = "sendFileDescriptor producer was not paused"'>> src/twisted/internet/test/test_unix.py 141 echo 'UNIXTestsBuilder_PollReactorTests.test_sendFileDescriptorTriggersPauseProducing.skip = "sendFileDescriptor producer was not paused"'>> src/twisted/internet/test/test_unix.py 142 143 # Patch t.p._inotify to point to libc. Without this, 144 # twisted.python.runtime.platform.supportsINotify() == False 145 substituteInPlace src/twisted/python/_inotify.py --replace \ 146 "ctypes.util.find_library(\"c\")" "'${stdenv.cc.libc}/lib/libc.so.6'" 147 '' 148 + lib.optionalString stdenv.isDarwin '' 149 echo 'ProcessTestsBuilder_AsyncioSelectorReactorTests.test_openFileDescriptors.skip = "invalid syntax"'>> src/twisted/internet/test/test_process.py 150 echo 'ProcessTestsBuilder_SelectReactorTests.test_openFileDescriptors.skip = "invalid syntax"'>> src/twisted/internet/test/test_process.py 151 echo 'ProcessTestsBuilder_AsyncioSelectorReactorTests.test_processEnded.skip = "exit code 120"' >> src/twisted/internet/test/test_process.py 152 echo 'ProcessTestsBuilder_SelectReactorTests.test_processEnded.skip = "exit code 120"' >> src/twisted/internet/test/test_process.py 153 ''; 154 155 # Generate Twisted's plug-in cache. Twisted users must do it as well. See 156 # http://twistedmatrix.com/documents/current/core/howto/plugin.html#auto3 157 # and http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=477103 for details. 158 postFixup = lib.optionalString (stdenv.buildPlatform.canExecute stdenv.hostPlatform) '' 159 $out/bin/twistd --help > /dev/null 160 ''; 161 162 nativeCheckInputs = 163 [ 164 cython-test-exception-raiser 165 git 166 glibcLocales 167 hypothesis 168 pyhamcrest 169 ] 170 ++ passthru.optional-dependencies.conch 171 ++ passthru.optional-dependencies.http2 172 ++ passthru.optional-dependencies.serial 173 # not supported on aarch64-darwin: https://github.com/pyca/pyopenssl/issues/873 174 ++ lib.optionals (!(stdenv.isDarwin && stdenv.isAarch64)) passthru.optional-dependencies.tls; 175 176 checkPhase = '' 177 export SOURCE_DATE_EPOCH=315532800 178 export PATH=$out/bin:$PATH 179 # race conditions when running in paralell 180 ${python.interpreter} -m twisted.trial -j1 twisted 181 ''; 182 183 passthru = { 184 optional-dependencies = { 185 conch = [ 186 appdirs 187 bcrypt 188 cryptography 189 pyasn1 190 ]; 191 http2 = [ 192 h2 193 priority 194 ]; 195 serial = [ pyserial ]; 196 tls = [ 197 idna 198 pyopenssl 199 service-identity 200 ]; 201 }; 202 203 tests = { 204 inherit 205 cassandra-driver 206 klein 207 magic-wormhole 208 scrapy 209 treq 210 txaio 211 txamqp 212 txrequests 213 txtorcon 214 thrift 215 ; 216 inherit (nixosTests) buildbot matrix-synapse; 217 }; 218 }; 219 220 meta = with lib; { 221 changelog = "https://github.com/twisted/twisted/blob/twisted-${version}/NEWS.rst"; 222 homepage = "https://github.com/twisted/twisted"; 223 description = "Asynchronous networking framework written in Python"; 224 license = licenses.mit; 225 maintainers = with maintainers; [ ]; 226 }; 227}