setup.py
163 lines
| 5.0 KiB
| text/x-python
|
PythonLexer
r136 | # -*- coding: utf-8 -*- | |||
r1033 | ||||
r0 | # RhodeCode VCSServer provides access to different vcs backends via network. | |||
r620 | # Copyright (C) 2014-2019 RodeCode GmbH | |||
r0 | # | |||
# This program is free software; you can redistribute it and/or modify | ||||
# it under the terms of the GNU General Public License as published by | ||||
# the Free Software Foundation; either version 3 of the License, or | ||||
# (at your option) any later version. | ||||
# | ||||
# This program is distributed in the hope that it will be useful, | ||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||||
# GNU General Public License for more details. | ||||
# | ||||
# You should have received a copy of the GNU General Public License | ||||
# along with this program; if not, write to the Free Software Foundation, | ||||
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | ||||
r136 | # Import early to make sure things are patched up properly | |||
r0 | from setuptools import setup, find_packages | |||
r136 | ||||
import os | ||||
r1033 | import re | |||
r136 | import sys | |||
import pkgutil | ||||
import platform | ||||
r493 | import codecs | |||
r136 | ||||
r1033 | import pip | |||
pip_major_version = int(pip.__version__.split(".")[0]) | ||||
if pip_major_version >= 20: | ||||
r493 | from pip._internal.req import parse_requirements | |||
r1033 | from pip._internal.network.session import PipSession | |||
elif pip_major_version >= 10: | ||||
from pip._internal.req import parse_requirements | ||||
from pip._internal.download import PipSession | ||||
else: | ||||
r493 | from pip.req import parse_requirements | |||
from pip.download import PipSession | ||||
r0 | ||||
r1033 | def get_package_name(req_object): | |||
package_name = None | ||||
try: | ||||
from pip._internal.req.constructors import install_req_from_parsed_requirement | ||||
except ImportError: | ||||
install_req_from_parsed_requirement = None | ||||
# In 20.1 of pip, the requirements object changed | ||||
if hasattr(req_object, 'req'): | ||||
package_name = req_object.req.name | ||||
if package_name is None: | ||||
if install_req_from_parsed_requirement: | ||||
package = install_req_from_parsed_requirement(req_object) | ||||
package_name = package.req.name | ||||
if package_name is None: | ||||
# fallback for older pip | ||||
package_name = re.split('===|<=|!=|==|>=|~=|<|>', req_object.requirement)[0] | ||||
return package_name | ||||
r0 | ||||
r1055 | if sys.version_info < (3, 10): | |||
raise Exception('RhodeCode requires Python 3.10 or later') | ||||
r136 | ||||
here = os.path.abspath(os.path.dirname(__file__)) | ||||
# defines current platform | ||||
__platform__ = platform.system() | ||||
__license__ = 'GPL V3' | ||||
__author__ = 'RhodeCode GmbH' | ||||
__url__ = 'https://code.rhodecode.com' | ||||
is_windows = __platform__ in ('Windows',) | ||||
def _get_requirements(req_filename, exclude=None, extras=None): | ||||
extras = extras or [] | ||||
exclude = exclude or [] | ||||
r0 | ||||
r136 | try: | |||
parsed = parse_requirements( | ||||
os.path.join(here, req_filename), session=PipSession()) | ||||
except TypeError: | ||||
# try pip < 6.0.0, that doesn't support session | ||||
parsed = parse_requirements(os.path.join(here, req_filename)) | ||||
requirements = [] | ||||
r1033 | for int_req in parsed: | |||
req_name = get_package_name(int_req) | ||||
if req_name not in exclude: | ||||
requirements.append(req_name) | ||||
r136 | return requirements + extras | |||
# requirements extract | ||||
r1033 | setup_requirements = [] | |||
r136 | install_requirements = _get_requirements( | |||
'requirements.txt', exclude=['setuptools']) | ||||
test_requirements = _get_requirements( | ||||
'requirements_test.txt', extras=['configobj']) | ||||
r0 | ||||
def get_version(): | ||||
version = pkgutil.get_data('vcsserver', 'VERSION') | ||||
r981 | return version.decode().strip() | |||
r0 | ||||
r136 | # additional files that goes into package itself | |||
package_data = { | ||||
'': ['*.txt', '*.rst'], | ||||
'configs': ['*.ini'], | ||||
'vcsserver': ['VERSION'], | ||||
} | ||||
r0 | ||||
r136 | description = 'Version Control System Server' | |||
r981 | keywords = ' '.join(['Version Control System']) | |||
r0 | ||||
r136 | # README/DESCRIPTION generation | |||
readme_file = 'README.rst' | ||||
changelog_file = 'CHANGES.rst' | ||||
try: | ||||
r493 | long_description = codecs.open(readme_file).read() + '\n\n' + \ | |||
codecs.open(changelog_file).read() | ||||
r136 | except IOError as err: | |||
sys.stderr.write( | ||||
"[WARNING] Cannot find file specified as long_description (%s)\n " | ||||
"or changelog (%s) skipping that file" % (readme_file, changelog_file)) | ||||
long_description = description | ||||
r0 | ||||
setup( | ||||
name='rhodecode-vcsserver', | ||||
version=get_version(), | ||||
r136 | description=description, | |||
r0 | long_description=long_description, | |||
r136 | keywords=keywords, | |||
license=__license__, | ||||
author=__author__, | ||||
r1033 | author_email='support@rhodecode.com', | |||
r136 | url=__url__, | |||
setup_requires=setup_requirements, | ||||
install_requires=install_requirements, | ||||
tests_require=test_requirements, | ||||
zip_safe=False, | ||||
packages=find_packages(exclude=["docs", "tests*"]), | ||||
package_data=package_data, | ||||
include_package_data=True, | ||||
r0 | classifiers=[ | |||
r136 | 'Development Status :: 6 - Mature', | |||
r0 | 'Intended Audience :: Developers', | |||
r136 | 'Operating System :: OS Independent', | |||
r0 | 'Topic :: Software Development :: Version Control', | |||
'License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)', | ||||
r1047 | 'Programming Language :: Python :: 3.10', | |||
r0 | ], | |||
entry_points={ | ||||
'paste.app_factory': ['main=vcsserver.http_main:main'] | ||||
}, | ||||
) | ||||