[tor-commits] [stem/master] Avoiding stem imports in setup.py
atagar at torproject.org
atagar at torproject.org
Wed Mar 27 16:40:54 UTC 2013
commit 4ee02d05f266a0fd60f470d28992026f6a6d49d6
Author: Damian Johnson <atagar at torproject.org>
Date: Wed Mar 27 09:37:58 2013 -0700
Avoiding stem imports in setup.py
Our setup.py may be ran under python 2.x or 3.x. Because of this the file and
anything it imports needs to run under both python serieses *without* a 2to3
conversion.
We were importing basic module information from __init__ which in turn brought
in the enum and str_tools utils...
atagar at morrigan:~/Desktop/stem$ python3 setup.py install
Traceback (most recent call last):
File "setup.py", line 5, in <module>
from stem import __version__, \
File "/home/atagar/Desktop/stem/stem/__init__.py", line 504, in <module>
"ERR",
File "/home/atagar/Desktop/stem/stem/util/enum.py", line 64, in UppercaseEnum
return Enum(*[(v, v) for v in args])
File "/home/atagar/Desktop/stem/stem/util/enum.py", line 77, in __init__
if isinstance(entry, (bytes, unicode)):
NameError: global name 'unicode' is not defined
Bug caught by Dererk.
---
setup.py | 41 +++++++++++++++++++++++++++++++----------
1 files changed, 31 insertions(+), 10 deletions(-)
diff --git a/setup.py b/setup.py
index 23902b1..c2ce4d2 100644
--- a/setup.py
+++ b/setup.py
@@ -2,14 +2,35 @@
# Copyright 2012-2013, Damian Johnson
# See LICENSE for licensing information
-from stem import __version__, \
- __author__, \
- __contact__, \
- __url__, \
- __license__
+# We cannot import anything from the stem module since this would risk
+# importing code that does not work under python 3 *without* being converted.
+#
+# I hate to do this, but reading our module file's information directly.
+import os
+import re
from distutils.core import setup
+STAT_LINE = re.compile(r"^__(.+)__ = '(.+)'$")
+
+def get_module_info():
+ # reads the basic __stat__ strings from our module's init
+
+ result = {}
+ cwd = os.path.sep.join(__file__.split(os.path.sep)[:-1])
+
+ with open(os.path.join(cwd, 'stem', '__init__.py')) as init_file:
+ for line in init_file.readlines():
+ line_match = STAT_LINE.match(line)
+
+ if line_match:
+ keyword, value = line_match.groups()
+ result[keyword] = value
+
+ return result
+
+module_info = get_module_info()
+
DESCRIPTION = """\
Stem is a python controller library for Tor <https://www.torproject.org/>.
Like its predecessor, TorCtl, it uses Tor's control protocol to help
@@ -21,12 +42,12 @@ except ImportError:
from distutils.command.build_py import build_py
setup(name = 'stem',
- version = __version__,
+ version = module_info['version'],
description = DESCRIPTION,
- license = __license__,
- author = __author__,
- author_email = __contact__,
- url = __url__,
+ license = module_info['license'],
+ author = module_info['author'],
+ author_email = module_info['contact'],
+ url = module_info['url'],
packages = ['stem', 'stem.descriptor', 'stem.response', 'stem.util'],
provides = ['stem'],
cmdclass = {'build_py': build_py},
More information about the tor-commits
mailing list