##// END OF EJS Templates
install: fixed setup.py for new version
super-admin -
r4907:6f3e1915 default
parent child Browse files
Show More
@@ -1,208 +1,208 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2
2
3 # Copyright (C) 2010-2020 RhodeCode GmbH
3 # Copyright (C) 2010-2020 RhodeCode GmbH
4 #
4 #
5 # This program is free software: you can redistribute it and/or modify
5 # This program is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU Affero General Public License, version 3
6 # it under the terms of the GNU Affero General Public License, version 3
7 # (only), as published by the Free Software Foundation.
7 # (only), as published by the Free Software Foundation.
8 #
8 #
9 # This program is distributed in the hope that it will be useful,
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 # GNU General Public License for more details.
12 # GNU General Public License for more details.
13 #
13 #
14 # You should have received a copy of the GNU Affero General Public License
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/>.
15 # along with this program. If not, see <http://www.gnu.org/licenses/>.
16 #
16 #
17 # This program is dual-licensed. If you wish to learn more about the
17 # This program is dual-licensed. If you wish to learn more about the
18 # RhodeCode Enterprise Edition, including its added features, Support services,
18 # RhodeCode Enterprise Edition, including its added features, Support services,
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
19 # and proprietary license terms, please see https://rhodecode.com/licenses/
20
20
21 # Import early to make sure things are patched up properly
21 # Import early to make sure things are patched up properly
22 from setuptools import setup, find_packages
22 from setuptools import setup, find_packages
23
23
24 import os
24 import os
25 import re
25 import re
26 import sys
26 import sys
27 import pkgutil
27 import pkgutil
28 import platform
28 import platform
29 import codecs
29 import codecs
30
30
31 import pip
31 import pip
32
32
33 pip_major_version = int(pip.__version__.split(".")[0])
33 pip_major_version = int(pip.__version__.split(".")[0])
34 if pip_major_version >= 20:
34 if pip_major_version >= 20:
35 from pip._internal.req import parse_requirements
35 from pip._internal.req import parse_requirements
36 from pip._internal.network.session import PipSession
36 from pip._internal.network.session import PipSession
37 elif pip_major_version >= 10:
37 elif pip_major_version >= 10:
38 from pip._internal.req import parse_requirements
38 from pip._internal.req import parse_requirements
39 from pip._internal.download import PipSession
39 from pip._internal.download import PipSession
40 else:
40 else:
41 from pip.req import parse_requirements
41 from pip.req import parse_requirements
42 from pip.download import PipSession
42 from pip.download import PipSession
43
43
44
44
45 def get_package_name(req_object):
45 def get_package_name(req_object):
46 package_name = None
46 package_name = None
47 try:
47 try:
48 from pip._internal.req.constructors import install_req_from_parsed_requirement
48 from pip._internal.req.constructors import install_req_from_parsed_requirement
49 except ImportError:
49 except ImportError:
50 install_req_from_parsed_requirement = None
50 install_req_from_parsed_requirement = None
51
51
52 # In 20.1 of pip, the requirements object changed
52 # In 20.1 of pip, the requirements object changed
53 if hasattr(req_object, 'req'):
53 if hasattr(req_object, 'req'):
54 package_name = req_object.req.name
54 package_name = req_object.req.name
55
55
56 if package_name is None:
56 if package_name is None:
57 if install_req_from_parsed_requirement:
57 if install_req_from_parsed_requirement:
58 package = install_req_from_parsed_requirement(req_object)
58 package = install_req_from_parsed_requirement(req_object)
59 package_name = package.req.name
59 package_name = package.req.name
60
60
61 if package_name is None:
61 if package_name is None:
62 # fallback for older pip
62 # fallback for older pip
63 package_name = re.split('===|<=|!=|==|>=|~=|<|>', req_object.requirement)[0]
63 package_name = re.split('===|<=|!=|==|>=|~=|<|>', req_object.requirement)[0]
64
64
65 return package_name
65 return package_name
66
66
67
67
68 if sys.version_info < (2, 7):
68 if sys.version_info < (3, 10):
69 raise Exception('RhodeCode requires Python 2.7 or later')
69 raise Exception('RhodeCode requires Python 3.10 or later')
70
70
71 here = os.path.abspath(os.path.dirname(__file__))
71 here = os.path.abspath(os.path.dirname(__file__))
72
72
73 # defines current platform
73 # defines current platform
74 __platform__ = platform.system()
74 __platform__ = platform.system()
75 __license__ = 'AGPLv3, and Commercial License'
75 __license__ = 'AGPLv3, and Commercial License'
76 __author__ = 'RhodeCode GmbH'
76 __author__ = 'RhodeCode GmbH'
77 __url__ = 'https://code.rhodecode.com'
77 __url__ = 'https://code.rhodecode.com'
78 is_windows = __platform__ in ('Windows',)
78 is_windows = __platform__ in ('Windows',)
79
79
80
80
81 def _get_requirements(req_filename, exclude=None, extras=None):
81 def _get_requirements(req_filename, exclude=None, extras=None):
82 extras = extras or []
82 extras = extras or []
83 exclude = exclude or []
83 exclude = exclude or []
84
84
85 try:
85 try:
86 parsed = parse_requirements(
86 parsed = parse_requirements(
87 os.path.join(here, req_filename), session=PipSession())
87 os.path.join(here, req_filename), session=PipSession())
88 except TypeError:
88 except TypeError:
89 # try pip < 6.0.0, that doesn't support session
89 # try pip < 6.0.0, that doesn't support session
90 parsed = parse_requirements(os.path.join(here, req_filename))
90 parsed = parse_requirements(os.path.join(here, req_filename))
91
91
92 requirements = []
92 requirements = []
93 for int_req in parsed:
93 for int_req in parsed:
94 req_name = get_package_name(int_req)
94 req_name = get_package_name(int_req)
95 if req_name not in exclude:
95 if req_name not in exclude:
96 requirements.append(req_name)
96 requirements.append(req_name)
97 return requirements + extras
97 return requirements + extras
98
98
99
99
100 # requirements extract
100 # requirements extract
101 setup_requirements = ['PasteScript']
101 setup_requirements = ['PasteScript']
102 install_requirements = _get_requirements(
102 install_requirements = _get_requirements(
103 'requirements.txt', exclude=['setuptools', 'entrypoints'])
103 'requirements.txt', exclude=['setuptools', 'entrypoints'])
104 test_requirements = _get_requirements(
104 test_requirements = _get_requirements(
105 'requirements_test.txt', extras=['configobj'])
105 'requirements_test.txt', extras=['configobj'])
106
106
107
107
108 def get_version():
108 def get_version():
109 version = pkgutil.get_data('rhodecode', 'VERSION')
109 version = pkgutil.get_data('rhodecode', 'VERSION')
110 return version.strip()
110 return version.decode().strip()
111
111
112
112
113 # additional files that goes into package itself
113 # additional files that goes into package itself
114 package_data = {
114 package_data = {
115 '': ['*.txt', '*.rst'],
115 '': ['*.txt', '*.rst'],
116 'configs': ['*.ini'],
116 'configs': ['*.ini'],
117 'rhodecode': ['VERSION', 'i18n/*/LC_MESSAGES/*.mo', ],
117 'rhodecode': ['VERSION', 'i18n/*/LC_MESSAGES/*.mo', ],
118 }
118 }
119
119
120 description = 'Source Code Management Platform'
120 description = 'Source Code Management Platform'
121 keywords = ' '.join([
121 keywords = ' '.join([
122 'rhodecode', 'mercurial', 'git', 'svn',
122 'rhodecode', 'mercurial', 'git', 'svn',
123 'code review',
123 'code review',
124 'repo groups', 'ldap', 'repository management', 'hgweb',
124 'repo groups', 'ldap', 'repository management', 'hgweb',
125 'hgwebdir', 'gitweb', 'serving hgweb',
125 'hgwebdir', 'gitweb', 'serving hgweb',
126 ])
126 ])
127
127
128
128
129 # README/DESCRIPTION generation
129 # README/DESCRIPTION generation
130 readme_file = 'README.rst'
130 readme_file = 'README.rst'
131 changelog_file = 'CHANGES.rst'
131 changelog_file = 'CHANGES.rst'
132 try:
132 try:
133 long_description = codecs.open(readme_file).read() + '\n\n' + \
133 long_description = codecs.open(readme_file).read() + '\n\n' + \
134 codecs.open(changelog_file).read()
134 codecs.open(changelog_file).read()
135 except IOError as err:
135 except IOError as err:
136 sys.stderr.write(
136 sys.stderr.write(
137 "[WARNING] Cannot find file specified as long_description (%s)\n "
137 "[WARNING] Cannot find file specified as long_description (%s)\n "
138 "or changelog (%s) skipping that file" % (readme_file, changelog_file))
138 "or changelog (%s) skipping that file" % (readme_file, changelog_file))
139 long_description = description
139 long_description = description
140
140
141
141
142 setup(
142 setup(
143 name='rhodecode-enterprise-ce',
143 name='rhodecode-enterprise-ce',
144 version=get_version(),
144 version=get_version(),
145 description=description,
145 description=description,
146 long_description=long_description,
146 long_description=long_description,
147 keywords=keywords,
147 keywords=keywords,
148 license=__license__,
148 license=__license__,
149 author=__author__,
149 author=__author__,
150 author_email='support@rhodecode.com',
150 author_email='support@rhodecode.com',
151 url=__url__,
151 url=__url__,
152 setup_requires=setup_requirements,
152 setup_requires=setup_requirements,
153 install_requires=install_requirements,
153 install_requires=install_requirements,
154 tests_require=test_requirements,
154 tests_require=test_requirements,
155 zip_safe=False,
155 zip_safe=False,
156 packages=find_packages(exclude=["docs", "tests*"]),
156 packages=find_packages(exclude=["docs", "tests*"]),
157 package_data=package_data,
157 package_data=package_data,
158 include_package_data=True,
158 include_package_data=True,
159 classifiers=[
159 classifiers=[
160 'Development Status :: 6 - Mature',
160 'Development Status :: 6 - Mature',
161 'Environment :: Web Environment',
161 'Environment :: Web Environment',
162 'Intended Audience :: Developers',
162 'Intended Audience :: Developers',
163 'Operating System :: OS Independent',
163 'Operating System :: OS Independent',
164 'Topic :: Software Development :: Version Control',
164 'Topic :: Software Development :: Version Control',
165 'License :: OSI Approved :: Affero GNU General Public License v3 or later (AGPLv3+)',
165 'License :: OSI Approved :: Affero GNU General Public License v3 or later (AGPLv3+)',
166 'Programming Language :: Python :: 2.7',
166 'Programming Language :: Python :: 3.10',
167 ],
167 ],
168 message_extractors={
168 message_extractors={
169 'rhodecode': [
169 'rhodecode': [
170 ('**.py', 'python', None),
170 ('**.py', 'python', None),
171 ('**.js', 'javascript', None),
171 ('**.js', 'javascript', None),
172 ('templates/**.mako', 'mako', {'input_encoding': 'utf-8'}),
172 ('templates/**.mako', 'mako', {'input_encoding': 'utf-8'}),
173 ('templates/**.html', 'mako', {'input_encoding': 'utf-8'}),
173 ('templates/**.html', 'mako', {'input_encoding': 'utf-8'}),
174 ('public/**', 'ignore', None),
174 ('public/**', 'ignore', None),
175 ]
175 ]
176 },
176 },
177 paster_plugins=['PasteScript'],
177 paster_plugins=['PasteScript'],
178 entry_points={
178 entry_points={
179 'paste.app_factory': [
179 'paste.app_factory': [
180 'main=rhodecode.config.middleware:make_pyramid_app',
180 'main=rhodecode.config.middleware:make_pyramid_app',
181 ],
181 ],
182 'paste.global_paster_command': [
182 'paste.global_paster_command': [
183 'ishell=rhodecode.lib.paster_commands.ishell:Command',
183 'ishell=rhodecode.lib.paster_commands.ishell:Command',
184 'upgrade-db=rhodecode.lib.paster_commands.upgrade_db:UpgradeDb',
184 'upgrade-db=rhodecode.lib.paster_commands.upgrade_db:UpgradeDb',
185
185
186 'setup-rhodecode=rhodecode.lib.paster_commands.deprecated.setup_rhodecode:Command',
186 'setup-rhodecode=rhodecode.lib.paster_commands.deprecated.setup_rhodecode:Command',
187 'celeryd=rhodecode.lib.paster_commands.deprecated.celeryd:Command',
187 'celeryd=rhodecode.lib.paster_commands.deprecated.celeryd:Command',
188 ],
188 ],
189 'pyramid.pshell_runner': [
189 'pyramid.pshell_runner': [
190 'ipython = rhodecode.lib.pyramid_shell:ipython_shell_runner',
190 'ipython = rhodecode.lib.pyramid_shell:ipython_shell_runner',
191 ],
191 ],
192 'pytest11': [
192 'pytest11': [
193 'pylons=rhodecode.tests.pylons_plugin',
193 'pylons=rhodecode.tests.pylons_plugin',
194 'enterprise=rhodecode.tests.plugin',
194 'enterprise=rhodecode.tests.plugin',
195 ],
195 ],
196 'console_scripts': [
196 'console_scripts': [
197 'rc-setup-app=rhodecode.lib.rc_commands.setup_rc:main',
197 'rc-setup-app=rhodecode.lib.rc_commands.setup_rc:main',
198 'rc-upgrade-db=rhodecode.lib.rc_commands.upgrade_db:main',
198 'rc-upgrade-db=rhodecode.lib.rc_commands.upgrade_db:main',
199 'rc-ishell=rhodecode.lib.rc_commands.ishell:main',
199 'rc-ishell=rhodecode.lib.rc_commands.ishell:main',
200 'rc-add-artifact=rhodecode.lib.rc_commands.add_artifact:main',
200 'rc-add-artifact=rhodecode.lib.rc_commands.add_artifact:main',
201 'rc-ssh-wrapper=rhodecode.apps.ssh_support.lib.ssh_wrapper:main',
201 'rc-ssh-wrapper=rhodecode.apps.ssh_support.lib.ssh_wrapper:main',
202 ],
202 ],
203 'beaker.backends': [
203 'beaker.backends': [
204 'memorylru_base=rhodecode.lib.memory_lru_dict:MemoryLRUNamespaceManagerBase',
204 'memorylru_base=rhodecode.lib.memory_lru_dict:MemoryLRUNamespaceManagerBase',
205 'memorylru_debug=rhodecode.lib.memory_lru_dict:MemoryLRUNamespaceManagerDebug'
205 'memorylru_debug=rhodecode.lib.memory_lru_dict:MemoryLRUNamespaceManagerDebug'
206 ]
206 ]
207 },
207 },
208 )
208 )
General Comments 0
You need to be logged in to leave comments. Login now