Pass connection to EnvironmentContext.configure
[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',
1e9edcfa
AB
59 'celery>=3.0,<4.0a0',
60 'kombu<4.0a0',
897354e6 61 'jinja2',
173099ad 62 'Babel>=1.3',
6557bab6 63 'WebTest>=2.0.18',
897354e6
BP
64 'ConfigObj',
65 'Markdown',
0c9c5cab 66 'sqlalchemy',
897354e6
BP
67 'itsdangerous',
68 'pytz',
09e2db30 69 'sphinx',
cb718ba0 70 'six',
f6bad0eb 71 'oauthlib',
897354e6 72 'unidecode',
f6bad0eb 73 'jsonschema',
03ff865c 74 'PasteDeploy',
062e3789 75 'PasteScript',
3252f738 76 'requests>=2.6.0',
f6bad0eb 77 'pyld',
897354e6
BP
78 # This is optional:
79 # 'translitcodec',
80 # For now we're expecting that users will install this from
81 # their package managers.
82 # 'lxml',
173099ad 83 # 'Pillow',
2e2a1aec 84] + pyversion_install_requires
897354e6 85
ab46e89a
BP
86dependency_links = []
87if not PY2:
88 # PyPI version (1.4.2) does not have proper Python 3 support
89 dependency_links.append('https://github.com/ianare/exif-py/zipball/develop#egg=ExifRead-2.0.0')
90 install_requires.append('ExifRead>=2.0.0')
91
9156ab68 92with open(READMEFILE, encoding="utf-8") as fobj:
897354e6
BP
93 long_description = fobj.read()
94
26990bc0
AL
95try:
96 setup(
243c3843
NY
97 name="mediagoblin",
98 version=get_version(),
c1b342ba 99 packages=find_packages(exclude=['ez_setup', 'examples', 'tests']),
31a8ff42 100 zip_safe=False,
d595374d 101 include_package_data = True,
0c04118b 102 # scripts and dependencies
897354e6 103 install_requires=install_requires,
ab46e89a 104 dependency_links=dependency_links,
4b5f4e87 105 test_suite='nose.collector',
243c3843 106 entry_points="""\
b7e57b1f
WKG
107 [console_scripts]
108 gmg = mediagoblin.gmg_commands:main_cli
029cad45 109
b7e57b1f
WKG
110 [paste.app_factory]
111 app = mediagoblin.app:paste_app_factory
df0953ce 112
227a81b5
CAW
113 [paste.server_runner]
114 paste_server_selector = mediagoblin.app:paste_server_selector
115
72ae87af
CAW
116 [paste.filter_app_factory]
117 errors = mediagoblin.errormiddleware:mgoblin_error_middleware
118
b7e57b1f
WKG
119 [zc.buildout]
120 make_user_dev_dirs = mediagoblin.buildout_recipes:MakeUserDevDirs
84d4f04e 121
b7e57b1f
WKG
122 [babel.extractors]
123 jinja2 = jinja2.ext:babel_extract
124 """,
b7e57b1f
WKG
125 license='AGPLv3',
126 author='Free Software Foundation and contributors',
127 author_email='cwebber@gnu.org',
128 url="http://mediagoblin.org/",
897354e6 129 long_description=long_description,
a6570fae 130 description='MediaGoblin is a web application for publishing all kinds of media',
b7e57b1f
WKG
131 classifiers=[
132 "Development Status :: 3 - Alpha",
133 "Environment :: Web Environment",
1ac1f00e 134 "License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)",
b7e57b1f
WKG
135 "Operating System :: OS Independent",
136 "Programming Language :: Python",
897354e6 137 'Programming Language :: Python :: 2',
3031764d 138 'Programming Language :: Python :: 2.7',
897354e6
BP
139 'Programming Language :: Python :: 3',
140 'Programming Language :: Python :: 3.3',
141 'Programming Language :: Python :: 3.4',
b7e57b1f
WKG
142 "Topic :: Internet :: WWW/HTTP :: Dynamic Content"
143 ],
31a8ff42 144 )
897354e6
BP
145except TypeError as e:
146 import sys
147
26990bc0
AL
148 # Check if the problem is caused by the sqlalchemy/setuptools conflict
149 msg_as_str = str(e)
150 if not (msg_as_str == 'dist must be a Distribution instance'):
151 raise
152
153 # If so, tell the user it is OK to just run the script again.
897354e6
BP
154 print("\n\n---------- NOTE ----------", file=sys.stderr)
155 print("The setup.py command you ran failed.\n", file=sys.stderr)
156 print("It is a known possible failure. Just run it again. It works the "
157 "second time.", file=sys.stderr)
26990bc0 158 sys.exit(1)