[tor-commits] [ooni-probe/master] * Added Arturo's hacks.py back in, because it accidentally did not get added.
isis at torproject.org
isis at torproject.org
Thu Oct 4 14:41:15 UTC 2012
commit 05dd861653a8db58f769cb6623ca369a834d3f13
Author: Isis Lovecruft <isis at torproject.org>
Date: Wed Oct 3 11:24:24 2012 +0000
* Added Arturo's hacks.py back in, because it accidentally did not get added.
* Fixed the environment setting in bin/ooniprobe wrapper.
* WHY NO MORE ASCIIART?!?!?! WTF?!?!
---
bin/ooniprobe | 2 +-
ooni/utils/hacks.py | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 54 insertions(+), 1 deletions(-)
diff --git a/bin/ooniprobe b/bin/ooniprobe
index c653756..4e400ce 100755
--- a/bin/ooniprobe
+++ b/bin/ooniprobe
@@ -1,4 +1,4 @@
-#!/usr/bin/python2
+#!/usr/bin/env python
# -*- encoding: utf-8 -*-
#
# startup script based on twisted trial
diff --git a/ooni/utils/hacks.py b/ooni/utils/hacks.py
new file mode 100644
index 0000000..5ef7c8b
--- /dev/null
+++ b/ooni/utils/hacks.py
@@ -0,0 +1,53 @@
+import copy_reg
+
+def patched_reduce_ex(self, proto):
+ """
+ This is a hack to overcome a bug in one of pythons core functions. It is
+ located inside of copy_reg and is called _reduce_ex.
+
+ Some background on the issue can be found here:
+ http://stackoverflow.com/questions/569754/how-to-tell-for-which-object-attribute-pickle
+ http://stackoverflow.com/questions/2049849/why-cant-i-pickle-this-object
+
+ There was also an open bug on the pyyaml trac repo, but it got closed because
+ they could not reproduce.
+ http://pyyaml.org/ticket/190
+
+ It turned out to be easier to patch the python core library than to monkey
+ patch yaml.
+
+ XXX see if there is a better way. sigh...
+ """
+ _HEAPTYPE = 1<<9
+ assert proto < 2
+ for base in self.__class__.__mro__:
+ if hasattr(base, '__flags__') and not base.__flags__ & _HEAPTYPE:
+ break
+ else:
+ base = object # not really reachable
+ if base is object:
+ state = None
+ elif base is int:
+ state = None
+ else:
+ if base is self.__class__:
+ raise TypeError, "can't pickle %s objects" % base.__name__
+ state = base(self)
+ args = (self.__class__, base, state)
+ try:
+ getstate = self.__getstate__
+ except AttributeError:
+ if getattr(self, "__slots__", None):
+ raise TypeError("a class that defines __slots__ without "
+ "defining __getstate__ cannot be pickled")
+ try:
+ dict = self.__dict__
+ except AttributeError:
+ dict = None
+ else:
+ dict = getstate()
+ if dict:
+ return copy_reg._reconstructor, args, dict
+ else:
+ return copy_reg._reconstructor, args
+
More information about the tor-commits
mailing list