4
class NoSuchHotfix(Exception):
6
Man you must be pretty stupid.
9
_alreadyInstalled = set()
10
def require(packageName, fixName):
11
if (packageName, fixName) in _alreadyInstalled:
14
if (packageName, fixName) == ('twisted', 'filepath_copyTo'):
15
from twisted.python import filepath
16
if filepath.FilePath('a') != filepath.FilePath('a'):
17
from epsilon.hotfixes import filepath_copyTo
18
filepath_copyTo.install()
19
elif (packageName, fixName) == ('twisted', 'timeoutmixin_calllater'):
20
from twisted.protocols import policies
21
if not hasattr(policies.TimeoutMixin, 'callLater'):
22
from epsilon.hotfixes import timeoutmixin_calllater
23
timeoutmixin_calllater.install()
24
elif (packageName, fixName) == ('twisted', 'delayedcall_seconds'):
25
from twisted.internet import base
26
args = inspect.getargs(base.DelayedCall.__init__.func_code)[0]
27
if 'seconds' not in args:
28
from epsilon.hotfixes import delayedcall_seconds
29
delayedcall_seconds.install()
30
elif (packageName, fixName) == ('twisted', 'deferredgenerator_tfailure'):
31
from twisted.internet import defer
34
d = defer.waitForDeferred(defer.succeed(1))
36
result.append(d.getResult())
37
defer.deferredGenerator(test)()
39
from epsilon.hotfixes import deferredgenerator_tfailure
40
deferredgenerator_tfailure.install()
42
assert result == [None]
43
elif (packageName, fixName) == ("twisted", "proto_helpers_stringtransport"):
44
from twisted.test.proto_helpers import StringTransport
45
st = StringTransport()
51
from epsilon.hotfixes import proto_helpers_stringtransport
52
proto_helpers_stringtransport.install()
53
elif (packageName, fixName) == ("twisted", "internet_task_Clock"):
54
from twisted.internet.task import Clock
55
from twisted.internet import base
56
from twisted import version
57
from epsilon.hotfixes import internet_task_clock
58
if internet_task_clock.clockIsBroken():
59
internet_task_clock.install()
60
elif (packageName, fixName) == ("twisted", "trial_assertwarns"):
61
from twisted.trial.unittest import TestCase
62
if not hasattr(TestCase, "failUnlessWarns"):
63
from epsilon.hotfixes import trial_assertwarns
64
trial_assertwarns.install()
65
elif (packageName, fixName) == ("twisted", "plugin_package_paths"):
67
from twisted.plugin import pluginPackagePaths
69
from epsilon.hotfixes import plugin_package_paths
70
plugin_package_paths.install()
71
elif (packageName, fixName) == ("twisted", "loopbackasync_reentrancy"):
72
# This one is really hard to detect reasonably. Invoking the code
73
# involves triggering the reactor, which it would be good to avoid.
74
from twisted import version
75
if (version.major, version.minor) < (8, 2):
76
from epsilon.hotfixes import loopbackasync_reentrancy
77
loopbackasync_reentrancy.install()
79
raise NoSuchHotfix(packageName, fixName)
81
_alreadyInstalled.add((packageName, fixName))