diff options
| -rw-r--r-- | setup.py | 129 | 
1 files changed, 72 insertions, 57 deletions
| @@ -14,17 +14,24 @@  # You should have received a copy of the GNU Affero General Public License  # along with this program.  If not, see <http://www.gnu.org/licenses/>. +from __future__ import print_function +  from setuptools import setup, find_packages  import os  import re +import sys + +PY2 = sys.version_info[0] == 2  # six is not installed yet +  READMEFILE = "README"  VERSIONFILE = os.path.join("mediagoblin", "_version.py")  VSRE = r"^__version__ = ['\"]([^'\"]*)['\"]"  def get_version(): -    verstrline = open(VERSIONFILE, "rt").read() +    with open(VERSIONFILE, "rt") as fobj: +        verstrline = fobj.read()      mo = re.search(VSRE, verstrline, re.M)      if mo:          return mo.group(1) @@ -32,6 +39,56 @@ def get_version():          raise RuntimeError("Unable to find version string in %s." %                             VERSIONFILE) +py2_only_install_requires = [] +if PY2: +    py2_only_install_requires.append('argparse')  # only for < 2.7 +    py2_only_install_requires.append('PasteScript') +    # newer sqlalchemy-migrate requires pbr which BREAKS EVERYTHING AND IS +    # TERRIBLE AND IS THE END OF ALL THINGS +    # I'd love to remove this restriction. +    py2_only_install_requires.append('sqlalchemy-migrate<0.8') +    py2_only_install_requires.append('mock')  # mock is in the stdlib for 3.3+ + +install_requires = [ +    'setuptools',  # TODO: is this necessary +    'python-dateutil', +    'wtforms', +    'py-bcrypt', +    'pytest>=2.3.1', +    'pytest-xdist', +    'werkzeug>=0.7', +    'celery>=3.0', +    'kombu', +    'jinja2', +    'sphinx',  # TODO: is this a docs requirement? +    'Babel<1.0', +    'webtest<2', +    'ConfigObj', +    'Markdown', +    'sqlalchemy<0.9.0, >0.8.0', +    'itsdangerous', +    'pytz', +    # PLEASE change this when we can; a dependency is forcing us to set this +    # specific number and it is breaking setup.py develop +    'six==1.5.2', +    'oauthlib==0.5.0', +    'unidecode', +    'ExifRead', +    # Annoying.  Please remove once we can!  We only indirectly +    # use pbr, and currently it breaks things, presumably till +    # their next release. +    'pbr==0.5.22', +    # This is optional: +    # 'translitcodec', +    # For now we're expecting that users will install this from +    # their package managers. +    # 'lxml', +    # 'PIL',  # TODO: switch to Pillow? +] + py2_only_install_requires + +with open(READMEFILE) as fobj: +    long_description = fobj.read() +  try:      setup(      name="mediagoblin", @@ -40,54 +97,8 @@ try:      zip_safe=False,      include_package_data = True,      # scripts and dependencies -    install_requires=[ -        'setuptools', -        'python-dateutil', -        'PasteScript', -        'wtforms', -        'py-bcrypt', -        'pytest>=2.3.1', -        'pytest-xdist', -        'werkzeug>=0.7', -        'celery>=3.0', -        'kombu', -        'jinja2', -        'sphinx', -        'Babel>=1.0', -        'argparse', -        'webtest<2', -        'ConfigObj', -        'Markdown', -        'sqlalchemy<0.9.0, >0.8.0', -        # newer sqlalchemy-migrate requires pbr which BREAKS EVERYTHING AND IS -        #  TERRIBLE AND IS THE END OF ALL THINGS -        #  I'd love to remove this restriction. -        'sqlalchemy-migrate<0.8', -        'mock', -        'itsdangerous', -        'pytz', -        'oauthlib==0.5.0', -        'unidecode', -        'ExifRead', - -        # PLEASE change this when we can; a dependency is forcing us to set this -        # specific number and it is breaking setup.py develop -        'six==1.5.2' - -        ## Annoying.  Please remove once we can!  We only indirectly -        ## use pbr, and currently it breaks things, presumably till -        ## their next release. -        # 'pbr==0.5.22', - -        ## This is optional! -        # 'translitcodec', -        ## For now we're expecting that users will install this from -        ## their package managers. -        # 'lxml', -        # 'PIL', -        ], -    # requires=['gst'], -    test_suite='nose.collector', +    install_requires=install_requires, +    test_suite='nose.collector',  # TODO: We are using py.test now?      entry_points="""\          [console_scripts]          gmg = mediagoblin.gmg_commands:main_cli @@ -110,29 +121,33 @@ try:      author_email='cwebber@gnu.org',      url="http://mediagoblin.org/",      download_url="http://mediagoblin.org/download/", -    long_description=open(READMEFILE).read(), +    long_description=long_description,      classifiers=[          "Development Status :: 3 - Alpha",          "Environment :: Web Environment",          "License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)",          "Operating System :: OS Independent",          "Programming Language :: Python", +        'Programming Language :: Python :: 2',          'Programming Language :: Python :: 2.6',          'Programming Language :: Python :: 2.7', +        'Programming Language :: Python :: 3', +        'Programming Language :: Python :: 3.3', +        'Programming Language :: Python :: 3.4',          "Topic :: Internet :: WWW/HTTP :: Dynamic Content"          ],      ) -except TypeError, e: +except TypeError as e: +    import sys +      # Check if the problem is caused by the sqlalchemy/setuptools conflict      msg_as_str = str(e)      if not (msg_as_str == 'dist must be a Distribution instance'):          raise      # If so, tell the user it is OK to just run the script again. -    print "\n\n---------- NOTE ----------" -    print "The setup.py command you ran failed." -    print "" -    print ("It is a known possible failure. Just run it again. It works the " -           "second time.") -    import sys +    print("\n\n---------- NOTE ----------", file=sys.stderr) +    print("The setup.py command you ran failed.\n", file=sys.stderr) +    print("It is a known possible failure. Just run it again. It works the " +          "second time.", file=sys.stderr)      sys.exit(1) | 
