swh.lister.cli: Simplify cli

This commit is contained in:
Antoine R. Dumont (@ardumont) 2018-07-06 17:30:57 +02:00
parent afcd6997c4
commit 3e62bc867e
No known key found for this signature in database
GPG key ID: 52E2E9840D10C3B8
2 changed files with 40 additions and 78 deletions

View file

@ -6,92 +6,53 @@
import click
CONTEXT_SETTINGS = dict(help_option_names=['-h', '--help'])
@click.group(context_settings=CONTEXT_SETTINGS)
@click.command()
@click.option(
'--db-url', '-d', default='postgres:///lister-gitlab.com',
help='SQLAlchemy DB URL; see '
'<http://docs.sqlalchemy.org/en/latest/core/engines.html#database-urls>') # noqa
@click.pass_context
def cli(ctx, db_url):
@click.option('--lister', required=1,
type=click.Choice(['github', 'gitlab', 'bitbucket']),
help='Lister to act upon')
@click.option('--create-tables', is_flag=True, default=False,
help='create tables')
@click.option('--drop-tables', is_flag=True, default=False,
help='Drop db')
def cli(db_url, lister, create_tables, drop_tables):
"""Initialize db model according to lister.
"""
config = {}
if db_url:
config['db_url'] = db_url
ctx.obj = config
supported_listers = ['github', 'gitlab', 'bitbucket']
override_conf = {'lister_db_url': db_url}
if lister == 'github':
from .github import models
from .github.lister import GitHubLister
@cli.command('github')
@click.option('--createdb', is_flag=True, default=False,
help='create db')
@click.option('--dropdb', is_flag=True, default=False,
help='Drop db')
@click.pass_context
def github(ctx, createdb, dropdb):
from .github import models
from .github.lister import GitHubLister
_lister = GitHubLister(lister_name='github.com',
api_baseurl='https://api.github.com',
override_config=override_conf)
elif lister == 'bitbucket':
from .bitbucket import models
from .bitbucket.lister import BitBucketLister
_lister = BitBucketLister(lister_name='bitbucket.com',
api_baseurl='https://api.bitbucket.org/2.0',
override_config=override_conf)
override_conf = {'lister_db_url': ctx.obj['db_url']}
elif lister == 'gitlab':
from .gitlab import models
from .gitlab.lister import GitLabLister
_lister = GitLabLister(lister_name='gitlab.com',
api_baseurl='https://gitlab.com/api/v4/',
override_config=override_conf)
else:
raise ValueError('Only supported listers are %s' % supported_listers)
lister = GitHubLister(lister_name='github.com',
api_baseurl='https://api.github.com',
override_config=override_conf)
if drop_tables:
models.ModelBase.metadata.drop_all(_lister.db_engine)
if dropdb:
models.ModelBase.metadata.drop_all(lister.db_engine)
if createdb:
models.ModelBase.metadata.create_all(lister.db_engine)
@cli.command('gitlab')
@click.option('--createdb', is_flag=True, default=False,
help='create db')
@click.option('--dropdb', is_flag=True, default=False,
help='Drop db')
@click.pass_context
def gitlab(ctx, createdb, dropdb):
from .gitlab import models
from .gitlab.lister import GitlabLister
override_conf = {'lister_db_url': ctx.obj['db_url']}
lister = GitlabLister(lister_name='gitlab.com',
api_baseurl='https://gitlab.com/api/v4/',
override_config=override_conf)
if dropdb:
models.ModelBase.metadata.drop_all(lister.db_engine)
if createdb:
models.ModelBase.metadata.create_all(lister.db_engine)
@cli.command('bitbucket')
@click.option('--createdb', is_flag=True, default=False,
help='create db')
@click.option('--dropdb', is_flag=True, default=False,
help='Drop db')
@click.pass_context
def bitbucket(ctx, createdb, dropdb):
from .bitbucket import models
from .bitbucket.lister import BitBucketLister
override_conf = {'lister_db_url': ctx.obj['db_url']}
lister = BitBucketLister(lister_name='bitbucket.com',
api_baseurl='https://api.bitbucket.org/2.0',
override_config=override_conf)
if dropdb:
models.ModelBase.metadata.drop_all(lister.db_engine)
if createdb:
models.ModelBase.metadata.create_all(lister.db_engine)
if create_tables:
models.ModelBase.metadata.create_all(_lister.db_engine)
if __name__ == '__main__':