Browse Source

setup.py no longer imports celery, parses distmeta instead

Ask Solem 13 years ago
parent
commit
3b5551c547
2 changed files with 53 additions and 20 deletions
  1. 11 11
      celery/__init__.py
  2. 42 9
      setup.py

+ 11 - 11
celery/__init__.py

@@ -5,32 +5,32 @@
 
 from __future__ import absolute_import
 
-import os
-import sys
-
 VERSION = (2, 5, 0, "a1")
-
 __version__ = ".".join(map(str, VERSION[0:3])) + "".join(VERSION[3:])
 __author__ = "Ask Solem"
 __contact__ = "ask@celeryproject.org"
 __homepage__ = "http://celeryproject.org"
 __docformat__ = "restructuredtext"
 
+# -eof meta-
+
+import os
+import sys
+
 if sys.version_info < (2, 5):
     raise Exception(
         "Python 2.4 is not supported by this version. "
         "Please use Celery versions 2.1.x or earlier.")
 
+from .local import Proxy
+
 
 def Celery(*args, **kwargs):
     from .app import App
     return App(*args, **kwargs)
 
-if not os.environ.get("CELERY_NO_EVAL", False):
-    from .local import Proxy
-
-    def _get_current_app():
-        from .app import current_app
-        return current_app()
 
-    current_app = Proxy(_get_current_app)
+def _get_current_app():
+    from .app import current_app
+    return current_app()
+current_app = Proxy(_get_current_app)

+ 42 - 9
setup.py

@@ -28,10 +28,43 @@ except ImportError:
     from setuptools import setup, find_packages           # noqa
     from setuptools.command.test import test              # noqa
 
-os.environ["CELERY_NO_EVAL"] = "yes"
-import celery as distmeta
-os.environ.pop("CELERY_NO_EVAL", None)
-sys.modules.pop("celery", None)
+# -- Parse meta
+import re
+re_meta = re.compile(r'__(\w+?)__\s*=\s*(.*)')
+re_vers = re.compile(r'VERSION\s*=\s*\((.*?)\)')
+re_doc = re.compile(r'^"""(.+?)"""')
+rq = lambda s: s.strip("\"'")
+
+def add_default(m):
+    attr_name, attr_value = m.groups()
+    return ((attr_name, rq(attr_value)), )
+
+
+def add_version(m):
+    v = list(map(rq, m.groups()[0].split(", ")))
+    return (("VERSION", ".".join(v[0:3]) + "".join(v[3:])), )
+
+
+def add_doc(m):
+    return (("doc", m.groups()[0]), )
+
+pats = {re_meta: add_default,
+        re_vers: add_version,
+        re_doc: add_doc}
+here = os.path.abspath(os.path.dirname(__file__))
+meta_fh = open(os.path.join(here, "celery/__init__.py"))
+try:
+    meta = {}
+    for line in meta_fh:
+        if line.strip() == '# -eof meta-':
+            break
+        for pattern, handler in pats.items():
+            m = pattern.match(line.strip())
+            if m:
+                meta.update(handler(m))
+finally:
+    meta_fh.close()
+# --
 
 
 class quicktest(test):
@@ -89,11 +122,11 @@ else:
 
 setup(
     name="celery",
-    version=distmeta.__version__,
-    description=distmeta.__doc__,
-    author=distmeta.__author__,
-    author_email=distmeta.__contact__,
-    url=distmeta.__homepage__,
+    version=meta["VERSION"],
+    description=meta["doc"],
+    author=meta["author"],
+    author_email=meta["contact"],
+    url=meta["homepage"],
     platforms=["any"],
     license="BSD",
     packages=find_packages(exclude=['ez_setup', 'tests', 'tests.*']),