Merge branch 'amqp-switch'
[mediagoblin.git] / setup.py
CommitLineData
8e1e744d 1# GNU MediaGoblin -- federated, autonomous media hosting
7f4ebeed 2# Copyright (C) 2011, 2012 MediaGoblin contributors. See AUTHORS.
e5572c60
ML
3#
4# This program is free software: you can redistribute it and/or modify
5# it under the terms of the GNU Affero General Public License as published by
6# the Free Software Foundation, either version 3 of the License, or
7# (at your option) any later version.
8#
9# This program is distributed in the hope that it will be useful,
10# but WITHOUT ANY WARRANTY; without even the implied warranty of
11# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12# GNU Affero General Public License for more details.
13#
14# You should have received a copy of the GNU Affero General Public License
15# along with this program. If not, see <http://www.gnu.org/licenses/>.
16
897354e6
BP
17from __future__ import print_function
18
c1b342ba 19from setuptools import setup, find_packages
0c32c7fe 20from io import open
cf37fffc
WKG
21import os
22import re
23
897354e6
BP
24import sys
25
26PY2 = sys.version_info[0] == 2 # six is not installed yet
27
cf37fffc
WKG
28READMEFILE = "README"
29VERSIONFILE = os.path.join("mediagoblin", "_version.py")
30VSRE = r"^__version__ = ['\"]([^'\"]*)['\"]"
31
32
33def get_version():
897354e6
BP
34 with open(VERSIONFILE, "rt") as fobj:
35 verstrline = fobj.read()
cf37fffc
WKG
36 mo = re.search(VSRE, verstrline, re.M)
37 if mo:
38 return mo.group(1)
39 else:
243c3843
NY
40 raise RuntimeError("Unable to find version string in %s." %
41 VERSIONFILE)
cf37fffc 42
2e2a1aec 43pyversion_install_requires = []
897354e6 44if PY2:
7c1287b6 45 pyversion_install_requires.append('sqlalchemy-migrate>=0.9.6')
e340879d 46 pyversion_install_requires.append('mock==1.0.1') # mock is in the stdlib for 3.3+
ab46e89a 47 # PyPI version (1.4.2) does not have proper Python 3 support
2e2a1aec 48 pyversion_install_requires.append('ExifRead')
897354e6
BP
49
50install_requires = [
d61778a4 51 'waitress',
af6b89ea 52 'alembic>=0.7.5',
897354e6
BP
53 'python-dateutil',
54 'wtforms',
55 'py-bcrypt',
56 'pytest>=2.3.1',
57 'pytest-xdist',
58 'werkzeug>=0.7',
00d0bb71 59 'celery>=3.0',
897354e6 60 'jinja2',
173099ad 61 'Babel>=1.3',
6557bab6 62 'WebTest>=2.0.18',
897354e6
BP
63 'ConfigObj',
64 'Markdown',
0c9c5cab 65 'sqlalchemy',
897354e6
BP
66 'itsdangerous',
67 'pytz',
09e2db30 68 'sphinx',
cb718ba0 69 'six',
f6bad0eb 70 'oauthlib',
897354e6 71 'unidecode',
f6bad0eb 72 'jsonschema',
03ff865c 73 'PasteDeploy',
062e3789 74 'PasteScript',
3252f738 75 'requests>=2.6.0',
f6bad0eb 76 'pyld',
897354e6
BP
77 # This is optional:
78 # 'translitcodec',
79 # For now we're expecting that users will install this from
80 # their package managers.
81 # 'lxml',
173099ad 82 # 'Pillow',
2e2a1aec 83] + pyversion_install_requires
897354e6 84
ab46e89a
BP
85dependency_links = []
86if not PY2:
87 # PyPI version (1.4.2) does not have proper Python 3 support
88 dependency_links.append('https://github.com/ianare/exif-py/zipball/develop#egg=ExifRead-2.0.0')
89 install_requires.append('ExifRead>=2.0.0')
90
9156ab68 91with open(READMEFILE, encoding="utf-8") as fobj:
897354e6
BP
92 long_description = fobj.read()
93
26990bc0
AL
94try:
95 setup(
243c3843
NY
96 name="mediagoblin",
97 version=get_version(),
c1b342ba 98 packages=find_packages(exclude=['ez_setup', 'examples', 'tests']),
31a8ff42 99 zip_safe=False,
d595374d 100 include_package_data = True,
0c04118b 101 # scripts and dependencies
897354e6 102 install_requires=install_requires,
ab46e89a 103 dependency_links=dependency_links,
4b5f4e87 104 test_suite='nose.collector',
243c3843 105 entry_points="""\
b7e57b1f
WKG
106 [console_scripts]
107 gmg = mediagoblin.gmg_commands:main_cli
029cad45 108
b7e57b1f
WKG
109 [paste.app_factory]
110 app = mediagoblin.app:paste_app_factory
df0953ce 111
227a81b5
CAW
112 [paste.server_runner]
113 paste_server_selector = mediagoblin.app:paste_server_selector
114
72ae87af
CAW
115 [paste.filter_app_factory]
116 errors = mediagoblin.errormiddleware:mgoblin_error_middleware
117
b7e57b1f
WKG
118 [zc.buildout]
119 make_user_dev_dirs = mediagoblin.buildout_recipes:MakeUserDevDirs
84d4f04e 120
b7e57b1f
WKG
121 [babel.extractors]
122 jinja2 = jinja2.ext:babel_extract
123 """,
b7e57b1f
WKG
124 license='AGPLv3',
125 author='Free Software Foundation and contributors',
126 author_email='cwebber@gnu.org',
127 url="http://mediagoblin.org/",
897354e6 128 long_description=long_description,
a6570fae 129 description='MediaGoblin is a web application for publishing all kinds of media',
b7e57b1f
WKG
130 classifiers=[
131 "Development Status :: 3 - Alpha",
132 "Environment :: Web Environment",
1ac1f00e 133 "License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)",
b7e57b1f
WKG
134 "Operating System :: OS Independent",
135 "Programming Language :: Python",
897354e6 136 'Programming Language :: Python :: 2',
3031764d 137 'Programming Language :: Python :: 2.7',
897354e6
BP
138 'Programming Language :: Python :: 3',
139 'Programming Language :: Python :: 3.3',
140 'Programming Language :: Python :: 3.4',
b7e57b1f
WKG
141 "Topic :: Internet :: WWW/HTTP :: Dynamic Content"
142 ],
31a8ff42 143 )
897354e6
BP
144except TypeError as e:
145 import sys
146
26990bc0
AL
147 # Check if the problem is caused by the sqlalchemy/setuptools conflict
148 msg_as_str = str(e)
149 if not (msg_as_str == 'dist must be a Distribution instance'):
150 raise
151
152 # If so, tell the user it is OK to just run the script again.
897354e6
BP
153 print("\n\n---------- NOTE ----------", file=sys.stderr)
154 print("The setup.py command you ran failed.\n", file=sys.stderr)
155 print("It is a known possible failure. Just run it again. It works the "
156 "second time.", file=sys.stderr)
26990bc0 157 sys.exit(1)