r47093 - Merge reactor-import-8246: Remove module-level reactor import in t.w.http
hawkowl-TA+aISz0psMTMxyoc4vAAJOcrHinNvQL0E9HWUfgJXw@public.gmane.org Sun, 27 Mar 2016 08:25:14 -0600 (MDT)
| Newsgroups | gmane.comp.python.twisted.commits |
|---|---|
| Message-ID | <[email protected]> |
Author: hawkowl
Date: Sun Mar 27 08:25:04 2016
New Revision: 47093
Added:
trunk/twisted/web/topfiles/8246.feature
Modified:
trunk/twisted/web/http.py
trunk/twisted/web/test/test_web.py
Log:
Merge reactor-import-8246: Remove module-level reactor import in t.w.http
Author: hawkowl
Reviewer: adiroiban
Fixes: #8246
Modified: trunk/twisted/web/http.py
==============================================================================
--- trunk/twisted/web/http.py (original)
+++ trunk/twisted/web/http.py Sun Mar 27 08:25:04 2016
@@ -95,7 +95,7 @@
from twisted.python import log
from twisted.python.versions import Version
from twisted.python.components import proxyForInterface
-from twisted.internet import interfaces, reactor, protocol, address
+from twisted.internet import interfaces, protocol, address
from twisted.internet.defer import Deferred
from twisted.internet.interfaces import IProtocol
from twisted.protocols import policies, basic
@@ -2096,14 +2096,20 @@
timeOut = 60 * 60 * 12
- _reactor = reactor
-
- def __init__(self, logPath=None, timeout=60*60*12, logFormatter=None):
+ def __init__(self, logPath=None, timeout=60*60*12, logFormatter=None,
+ reactor=None):
"""
@param logFormatter: An object to format requests into log lines for
the access log.
@type logFormatter: L{IAccessLogFormatter} provider
+
+ @param reactor: A L{IReactorTime} provider used to compute logging
+ timestamps.
"""
+ if not reactor:
+ from twisted.internet import reactor
+ self._reactor = reactor
+
if logPath is not None:
logPath = os.path.abspath(logPath)
self.logPath = logPath
Modified: trunk/twisted/web/test/test_web.py
==============================================================================
--- trunk/twisted/web/test/test_web.py (original)
+++ trunk/twisted/web/test/test_web.py Sun Mar 27 08:25:04 2016
@@ -1045,8 +1045,7 @@
reactor.advance(1234567890)
logPath = self.mktemp()
- factory = self.factory(logPath=logPath)
- factory._reactor = reactor
+ factory = self.factory(logPath=logPath, reactor=reactor)
factory.startFactory()
try:
@@ -1147,7 +1146,7 @@
reactor.advance(1234567890)
timestamp = http.datetimeToLogString(reactor.seconds())
- request = DummyRequestForLogTest(http.HTTPFactory())
+ request = DummyRequestForLogTest(http.HTTPFactory(reactor=reactor))
request.client = IPv4Address("TCP", b"evil x-forwarded-for \x80", 12345)
request.method = b"POS\x81"
request.protocol = b"HTTP/1.\x82"
@@ -1188,7 +1187,7 @@
reactor.advance(1234567890)
timestamp = http.datetimeToLogString(reactor.seconds())
- request = DummyRequestForLogTest(http.HTTPFactory())
+ request = DummyRequestForLogTest(http.HTTPFactory(reactor=reactor))
expected = http.combinedLogFormatter(timestamp, request).replace(
u"1.2.3.4", u"172.16.1.2")
request.requestHeaders.setRawHeaders(b"x-forwarded-for", [header])
@@ -1357,3 +1356,29 @@
warnings[0]['message'],
("twisted.web.server.string_date_time was deprecated in Twisted "
"12.1.0: Please use twisted.web.http.stringToDatetime instead"))
+
+
+
+class ExplicitHTTPFactoryReactor(unittest.TestCase):
+ """
+ L{http.HTTPFactory} accepts explicit reactor selection.
+ """
+
+ def test_explicitReactor(self):
+ """
+ L{http.HTTPFactory.__init__} accepts a reactor argument which is set on
+ L{http.HTTPFactory._reactor}.
+ """
+ reactor = "I am a reactor!"
+ factory = http.HTTPFactory(reactor=reactor)
+ self.assertIs(factory._reactor, reactor)
+
+
+ def test_defaultReactor(self):
+ """
+ Giving no reactor argument to L{http.HTTPFactory.__init__} means it
+ will select the global reactor.
+ """
+ from twisted.internet import reactor
+ factory = http.HTTPFactory()
+ self.assertIs(factory._reactor, reactor)