jason kirtland avatar jason kirtland committed 0c5d329

Bake the version number into the source during packaging.

Comments (0)

Files changed (3)

+0.4.0beta1

lib/sqlalchemy/__init__.py

 from sqlalchemy.types import *
 from sqlalchemy.sql import *
 from sqlalchemy.schema import *
-
 from sqlalchemy.engine import create_engine
 
-def __figure_version():
-    try:
-        from pkg_resources import require
-        import os
-        # NOTE: this only works when the package is either installed,
-        # or has an .egg-info directory present (i.e. wont work with raw SVN checkout)
-        info = require('sqlalchemy')[0]
-        if os.path.dirname(os.path.dirname(__file__)) == info.location:
-            return info.version
-        else:
-            return '(not installed)'
-    except:
-        return '(not installed)'
-        
-__version__ = __figure_version()
-    
+
+__version__ = 'svn'
 from ez_setup import use_setuptools
 use_setuptools()
 from setuptools import setup, find_packages
+from distutils.command.build_py import build_py as _build_py
+from setuptools.command.sdist import sdist as _sdist
+import os
+from os import path
+
+v = open(path.join(path.dirname(__file__), 'VERSION'))
+VERSION = v.readline().strip()
+v.close()
+
+class build_py(_build_py):
+    def run(self):
+        init = path.join(self.build_lib, 'sqlalchemy', '__init__.py')
+        if path.exists(init):
+            os.unlink(init)
+        _build_py.run(self)
+        _stamp_version(init)
+        self.byte_compile([init])
+
+class sdist(_sdist):
+    def make_release_tree (self, base_dir, files):
+        _sdist.make_release_tree(self, base_dir, files)
+        orig = path.join('lib', 'sqlalchemy', '__init__.py')
+        assert path.exists(orig)
+        dest = path.join(base_dir, orig)
+        if hasattr(os, 'link') and path.exists(dest):
+            os.unlink(dest)
+        self.copy_file(orig, dest)
+        _stamp_version(dest)
+
+def _stamp_version(filename):
+    found, out = False, []
+    f = open(filename, 'r')
+    for line in f:
+        if '__version__ =' in line:
+            line = line.replace("'svn'", "'%s'" % VERSION)
+            found = True
+        out.append(line)
+    f.close()
+
+    if found:
+        f = open(filename, 'w')
+        f.writelines(out)
+        f.close()
+
 
 setup(name = "SQLAlchemy",
-    version = "0.4.0",
-    description = "Database Abstraction Library",
-    author = "Mike Bayer",
-    author_email = "mike_mp@zzzcomputing.com",
-    url = "http://www.sqlalchemy.org",
-    packages = find_packages('lib'),
-    package_dir = {'':'lib'},
-    entry_points = { 
-      'sqlalchemy.databases': [
-        '%s = sqlalchemy.databases.%s:dialect' % (f,f) for f in 
-          ['sqlite', 'postgres', 'mysql', 'oracle', 'mssql', 'firebird']]},
-    license = "MIT License",
-    long_description = """\
+      cmdclass={'build_py': build_py, 'sdist': sdist},
+      version = VERSION,
+      description = "Database Abstraction Library",
+      author = "Mike Bayer",
+      author_email = "mike_mp@zzzcomputing.com",
+      url = "http://www.sqlalchemy.org",
+      packages = find_packages('lib'),
+      package_dir = {'':'lib'},
+      entry_points = { 
+        'sqlalchemy.databases': [
+            '%s = sqlalchemy.databases.%s:dialect' % (f,f) for f in 
+            ['sqlite', 'postgres', 'mysql', 'oracle', 'mssql', 'firebird']]},
+      license = "MIT License",
+      long_description = """\
 SQLAlchemy is:
 
     * The Python SQL toolkit and Object Relational Mapper that gives application developers the full power and flexibility of SQL. SQLAlchemy provides a full suite of well known enterprise-level persistence patterns, designed for efficient and high-performing database access, adapted into a simple and Pythonic domain language.
 <http://svn.sqlalchemy.org/sqlalchemy/trunk#egg=SQLAlchemy-dev>
 
 """,
-    classifiers = [
+      classifiers = [
         "Development Status :: 4 - Beta",
         "Intended Audience :: Developers",
         "License :: OSI Approved :: MIT License",
         "Programming Language :: Python",
         "Topic :: Database :: Front-Ends",
-    ]
-    )
-
-
-
-
+        ]
+      )
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.