Newer
Older
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
cli.py
The module that implements the CLI for obis.
Created by Chandrasekhar Ramakrishnan on 2017-01-27.
Copyright (c) 2017 Chandrasekhar Ramakrishnan. All rights reserved.
"""
import os
from datetime import datetime
from .. import dm
import click
def click_echo(message):
timestamp = datetime.now().strftime("%H:%M:%S")
click.echo("{} {}".format(timestamp, message))
def click_progress(progress_data):
if progress_data['type'] == 'progress':
click_echo(progress_data['message'])
def click_progress_no_ts(progress_data):
if progress_data['type'] == 'progress':
click.echo("{}".format(progress_data['message']))
def shared_data_mgmt(verify_certificates=True):
git_config = {'find_git': True}
openbis_config = {'verify_certificates': verify_certificates}
return dm.DataMgmt(openbis_config=openbis_config, git_config=git_config)
@click.group()
@click.option('-q', '--quiet', default=False, is_flag=True, help='Suppress status reporting.')
@click.pass_context
def cli(ctx, quiet):
ctx.obj['quiet'] = quiet
Chandrasekhar Ramakrishnan
committed
@cli.command()
@click.option('-g', '--is_global', default=False, is_flag=True, help='Configure global or local.')
@click.argument('property', default="")
@click.argument('value', default="")
Chandrasekhar Ramakrishnan
committed
@click.pass_context
def config(ctx, is_global, property, value):
Chandrasekhar Ramakrishnan
committed
"""Configure the openBIS setup.
Configure the openBIS server url, the data set type, and the data set properties.
"""
ctx.obj['global'] = is_global
dm = shared_data_mgmt()
resolver = dm.config_resolver
top_level_path = dm.git_wrapper.git_top_level_path()
if top_level_path.success():
resolver.location_resolver.location_roots['data_set'] = top_level_path.output
is_global = ctx.obj['global']
if is_global:
resolver.location_search_order = ['global']
else:
resolver.location_search_order = ['local']
config_dict = resolver.config_dict()
if not property:
click.echo("{}".format(config_dict))
elif not value:
click.echo("{}".format(config_dict[property]))
else:
loc = 'global' if is_global else 'local'
resolver.set_value_for_parameter(property, value, loc)
Chandrasekhar Ramakrishnan
committed
@cli.group()
@click.pass_context
def init(ctx):
"""Group for the various init subcommands"""
pass
@init.command()
@click.pass_context
@click.argument('folder', type=click.Path(exists=True))
@click.argument('name', default="")
def data(ctx, folder, name):
"""Initialize the folder as a data folder."""
click_echo("init data {}".format(folder))
data_mgmt = shared_data_mgmt()
name = name if name != "" else None
return data_mgmt.init_data(folder, name)
@init.command()
@click.pass_context
@click.argument('folder', type=click.Path(exists=True))
def analysis(ctx, folder):
"""Initialize the folder as an analysis folder."""
click_echo("init analysis {}".format(folder))
@cli.command()
@click.pass_context
@click.option('-m', '--msg', prompt=True, help='A message explaining what was done.')
@click.option('-a', '--auto_add', default=True, is_flag=True, help='Automatically add all untracked files.')
@click.option('-s', '--skip_verification', default=False, is_flag=True, help='Do not verify cerficiates')
def commit(ctx, msg, auto_add, skip_verification):
"""Commit the repository to git and inform openBIS.
verify_certificates = not skip_verification
data_mgmt = shared_data_mgmt(verify_certificates=verify_certificates)
return data_mgmt.commit(msg, auto_add)
@cli.command()
@click.pass_context
@click.option('-s', '--skip_verification', default=False, is_flag=True, help='Do not verify cerficiates')
def sync(ctx, skip_verification):
"""Sync the repository with openBIS.
"""
verify_certificates = not skip_verification
data_mgmt = shared_data_mgmt(verify_certificates=verify_certificates)
return data_mgmt.sync()
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
@cli.command()
@click.pass_context
@click.argument('other', type=click.Path(exists=True))
def addref(ctx, other):
"""Add a reference to the other repository in this repository.
"""
click_echo("addref {}".format(other))
@cli.command()
@click.pass_context
@click.argument('url')
def clone(ctx, url):
"""Clone the repository found at url.
"""
click_echo("clone {}".format(url))
@cli.command()
@click.pass_context
@click.argument('file')
def get(ctx, f):
"""Get one or more files from a clone of this repository.
"""
click_echo("get {}".format(f))
def main():
cli(obj={})
if __name__ == '__main__':
main()