Files @ 2c3d30095d5e
Branch filter:

Location: kallithea/setup.py - annotation

Mads Kiilerich
gearbox: replace paster with something TurboGears2-ish that still works with the Pylons stack

This is a step towards moving away from the Pylons stack to TurboGears2, but
still independent of it.


Some notes from the porting - it could perhaps be the missing(?) documentation
for migrating from paster to gearbox:

Note: 'gearbox' without parameters will crash - specify '-h' to get started
testing.

Replace paster
summary = 'yada yada'
with the first line of the docstring of the Command class ... or override
get_description.

Note: All newlines in the docstring will be collapsed and mangle the long help
text.

Grouping of commands is not possible. Standard commands (for development) can't
be customized under the same name or hidden. (Like for paster, the conceptual
model also assumes that the sub-command naming is namespaced so commands from
other packages won't conflict.)

The usage help is fully automated from the declared options.

For all deprecated Commands, replace paster
hidden = True
with gearbox
deprecated = True

Note: config_file, takes_config_file, min_args and max_args are not available /
relevant.

The gearbox parser is customized by overriding get_parser - there is nothing
like paster update_parser.

Gearbox is using argparse instead of optparse ... but argparse add_argument is
mostly backwards compatible with optparse add_option.

Instead of overriding command or run as in paster, override take_action in
gearbox. The parsed arguments are passed to take_action, not available on the
command instance.

Paster BadCommand is not available and must be handled manually, terminating
with sys.exit(1).

There is no standard make-config command in gearbox.

Paster appinstall has been replaced by the somewhat different setup_app module
in gearbox. There is still no clean way to pass parameters to SetupAppCommand
and it relies on websetup and other apparently unnecessary complexity. Instead,
implement setup-db from scratch.


Minor change by Thomas De Schampheleire: add gearbox logging configuration.
Because we use logging.config.fileConfig(.inifile) during gearbox command
execution, the logging settings need to be correct and contain a block for
gearbox logging itself. Otherwise, errors in command processing are not even
visible and the command exits silently.
bf011c9f7f58
266a3cbc0302
9382e88eae22
65c27fd21769
9382e88eae22
9382e88eae22
a922e91a4f02
a9a1560dad79
9382e88eae22
9382e88eae22
9382e88eae22
9382e88eae22
9382e88eae22
9382e88eae22
9382e88eae22
9382e88eae22
9382e88eae22
9382e88eae22
9382e88eae22
9382e88eae22
9382e88eae22
9382e88eae22
7e5f8c12a3fc
9382e88eae22
9382e88eae22
9382e88eae22
9382e88eae22
9382e88eae22
9382e88eae22
9382e88eae22
9382e88eae22
9382e88eae22
9382e88eae22
9382e88eae22
3a1cf70e0f42
2d7a94f3eaae
9382e88eae22
7894a440e134
2c3d30095d5e
9ec73e01e5b1
1f43d08ce5a8
f6fcb21db7b3
de37fcbce8c5
9382e88eae22
ed11cb3e905e
1a080d4e926e
8c2e96646545
298bac3757a7
5cf18f89ab3e
4f2e231df222
175813f77851
9382e88eae22
4034eb731b33
d1d9d249846b
ffd45b185016
ffd45b185016
b5859022ac69
f19d8fd8e35a
9382e88eae22
9382e88eae22
d4f6dc38d625
ffd45b185016
bda2bd2558b1
9382e88eae22
953ee49f3b30
5cf18f89ab3e
9382e88eae22
880a39e5d8df
880a39e5d8df
880a39e5d8df
fc6063e6630b
cc48c1541c7e
fc6063e6630b
fc6063e6630b
fc6063e6630b
fc6063e6630b
fc6063e6630b
fc6063e6630b
fc6063e6630b
fc6063e6630b
cc48c1541c7e
fc6063e6630b
a60cd29ba7e2
b0e2c949c34b
2afa6b8c2ade
2afa6b8c2ade
65c27fd21769
65c27fd21769
24c0d584ba86
326a9336fbe5
faad9dd06b58
266a3cbc0302
266a3cbc0302
7e5f8c12a3fc
266a3cbc0302
266a3cbc0302
266a3cbc0302
266a3cbc0302
2afa6b8c2ade
266a3cbc0302
65c27fd21769
7c732f2047f8
d69aa464f373
266a3cbc0302
7c732f2047f8
7c732f2047f8
266a3cbc0302
ad2e97c6f17f
2642f128ad46
a922e91a4f02
c79e4f89bfd3
c79e4f89bfd3
c79e4f89bfd3
c79e4f89bfd3
c79e4f89bfd3
c79e4f89bfd3
c79e4f89bfd3
c79e4f89bfd3
c79e4f89bfd3
c79e4f89bfd3
a922e91a4f02
564e40829f80
a922e91a4f02
24c0d584ba86
9382e88eae22
ad2e97c6f17f
2642f128ad46
2d7a94f3eaae
f4807acf643d
9382e88eae22
3315e9263a53
880a39e5d8df
9382e88eae22
2642f128ad46
a60cd29ba7e2
2642f128ad46
65c27fd21769
20dc7a5eb748
7e5f8c12a3fc
564e40829f80
564e40829f80
0e6035a85980
564e40829f80
20dc7a5eb748
20dc7a5eb748
7ac09514a178
9793473d74be
9793473d74be
9793473d74be
7ac09514a178
564e40829f80
7e5f8c12a3fc
564e40829f80
564e40829f80
564e40829f80
341beaa9edba
2c3d30095d5e
7e5f8c12a3fc
b1679034b6c4
7e5f8c12a3fc
7e5f8c12a3fc
7e5f8c12a3fc
7e5f8c12a3fc
7e5f8c12a3fc
7e5f8c12a3fc
c436f337e253
cf73bd884a53
2dad9708c89f
564e40829f80
564e40829f80
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
import os
import sys
import platform

if sys.version_info < (2, 6) or sys.version_info >= (3,):
    raise Exception('Kallithea requires python 2.6 or 2.7')


here = os.path.abspath(os.path.dirname(__file__))


def _get_meta_var(name, data, callback_handler=None):
    import re
    matches = re.compile(r'(?:%s)\s*=\s*(.*)' % name).search(data)
    if matches:
        if not callable(callback_handler):
            callback_handler = lambda v: v

        return callback_handler(eval(matches.groups()[0]))

_meta = open(os.path.join(here, 'kallithea', '__init__.py'), 'rb')
_metadata = _meta.read()
_meta.close()

callback = lambda V: ('.'.join(map(str, V[:3])) + '.'.join(V[3:]))
__version__ = _get_meta_var('VERSION', _metadata, callback)
__license__ = _get_meta_var('__license__', _metadata)
__author__ = _get_meta_var('__author__', _metadata)
__url__ = _get_meta_var('__url__', _metadata)
# defines current platform
__platform__ = platform.system()

is_windows = __platform__ in ['Windows']

requirements = [
    "alembic>=0.8.0,<0.9",
    "GearBox<1",
    "waitress>=0.8.8,<1.0",
    "webob>=1.7,<2",
    "Pylons>=1.0.0,<=1.0.2",
    "Beaker>=1.7.0,<2",
    "WebHelpers==1.3",
    "formencode>=1.2.4,<=1.2.6",
    "SQLAlchemy>=1.0,<1.1",
    "Mako>=0.9.0,<=1.0.0",
    "pygments>=1.5",
    "whoosh>=2.5.0,<=2.5.7",
    "celery>=3.1,<3.2",
    "babel>=0.9.6,<2.4",
    "python-dateutil>=1.5.0,<2.0.0",
    "markdown==2.2.1",
    "docutils>=0.8.1",
    "URLObject==2.3.4",
    "Routes==1.13",
    "dulwich>=0.14.1",
    "mercurial>=2.9,<4.2",
]

if sys.version_info < (2, 7):
    requirements.append("importlib==1.0.1")
    requirements.append("argparse")

if not is_windows:
    requirements.append("bcrypt>=3.1.0")

dependency_links = [
]

classifiers = [
    'Development Status :: 4 - Beta',
    'Environment :: Web Environment',
    'Framework :: Pylons',
    'Intended Audience :: Developers',
    'License :: OSI Approved :: GNU General Public License (GPL)',
    'Operating System :: OS Independent',
    'Programming Language :: Python',
    'Programming Language :: Python :: 2.6',
    'Programming Language :: Python :: 2.7',
    'Topic :: Software Development :: Version Control',
]


# additional files from project that goes somewhere in the filesystem
# relative to sys.prefix
data_files = []

description = ('Kallithea is a fast and powerful management tool '
               'for Mercurial and Git with a built in push/pull server, '
               'full text search and code-review.')

keywords = ' '.join([
    'kallithea', 'mercurial', 'git', 'code review',
    'repo groups', 'ldap', 'repository management', 'hgweb replacement',
    'hgwebdir', 'gitweb replacement', 'serving hgweb',
])

# long description
README_FILE = 'README.rst'
try:
    long_description = open(README_FILE).read()
except IOError as err:
    sys.stderr.write(
        "[WARNING] Cannot find file specified as long_description (%s)\n"
        % README_FILE
    )
    long_description = description

import setuptools

# monkey patch setuptools to use distutils owner/group functionality
from setuptools.command import sdist
sdist_org = sdist.sdist
class sdist_new(sdist_org):
    def initialize_options(self):
        sdist_org.initialize_options(self)
        self.owner = self.group = 'root'
sdist.sdist = sdist_new

packages = setuptools.find_packages(exclude=['ez_setup'])

setuptools.setup(
    name='Kallithea',
    version=__version__,
    description=description,
    long_description=long_description,
    keywords=keywords,
    license=__license__,
    author=__author__,
    author_email='kallithea@sfconservancy.org',
    dependency_links=dependency_links,
    url=__url__,
    install_requires=requirements,
    classifiers=classifiers,
    data_files=data_files,
    packages=packages,
    include_package_data=True,
    message_extractors={'kallithea': [
            ('**.py', 'python', None),
            ('templates/**.mako', 'mako', {'input_encoding': 'utf-8'}),
            ('templates/**.html', 'mako', {'input_encoding': 'utf-8'}),
            ('public/**', 'ignore', None)]},
    zip_safe=False,
    entry_points="""
    [console_scripts]
    kallithea-api =    kallithea.bin.kallithea_api:main
    kallithea-gist =   kallithea.bin.kallithea_gist:main
    kallithea-config = kallithea.bin.kallithea_config:main

    [paste.app_factory]
    main = kallithea.config.middleware:make_app

    [paste.app_install]
    main = pylons.util:PylonsInstaller

    [gearbox.commands]
    setup-db=kallithea.lib.paster_commands.setup_db:Command
    cleanup-repos=kallithea.lib.paster_commands.cleanup:Command
    update-repoinfo=kallithea.lib.paster_commands.update_repoinfo:Command
    make-rcext=kallithea.lib.paster_commands.make_rcextensions:Command
    repo-scan=kallithea.lib.paster_commands.repo_scan:Command
    cache-keys=kallithea.lib.paster_commands.cache_keys:Command
    ishell=kallithea.lib.paster_commands.ishell:Command
    make-index=kallithea.lib.paster_commands.make_index:Command
    upgrade-db=kallithea.lib.dbmigrate:UpgradeDb
    celeryd=kallithea.lib.paster_commands.celeryd:Command
    install-iis=kallithea.lib.paster_commands.install_iis:Command
    """,
)