Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Move commands to commands.py #12

Merged
merged 2 commits into from
May 2, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
128 changes: 0 additions & 128 deletions goji/__init__.py
Original file line number Diff line number Diff line change
@@ -1,128 +0,0 @@
from os import environ

import click
from requests.compat import urljoin

from goji.client import JIRAClient


client = None


@click.group()
def cli():
pass


@click.argument('issue_key')
@cli.command()
def open(issue_key):
"""Open issue in a web browser"""
url = urljoin(client.base_url, 'browse/%s' % issue_key)
click.launch(url)


@click.argument('issue_key')
@cli.command()
def show(issue_key):
"""Print issue contents"""
issue = client.get_issue(issue_key)
url = urljoin(client.base_url, 'browse/%s' % issue_key)

print('\x1b[01;32m-> {issue.key}\x1b[0m'.format(issue=issue))
print(' {issue.summary}\n'.format(issue=issue))

if issue.description:
for line in issue.description.splitlines():
print(' {}'.format(line))

print('')

print(' - Status: {issue.status}'.format(issue=issue))
print(' - Creator: {issue.creator}'.format(issue=issue))
print(' - Assigned: {issue.assignee}'.format(issue=issue))
print(' - URL: {url}'.format(url=url))

if issue.links:
print('\n Related issues:')

for link in issue.links:
outward_issue = link.outward_issue
print(' - %s: %s (%s)' % (link.link_type.outward.capitalize(),
outward_issue.key, outward_issue.status))


@click.argument('issue_key')
@click.argument('user')
@cli.command()
def assign(issue_key, user=None):
"""Assign an issue to a user"""
if user is None:
user = client.username

if client.assign(issue_key, user):
print('Okay, {} has been assigned to {}.'.format(issue_key, user))
else:
print('There was a problem assigning {} to {}.'.format(issue_key, user))


@click.argument('issue_key')
@cli.command()
def unassign(issue_key):
"""Unassign an issue"""
if client.assign(issue_key, None):
print('{} has been unassigned.'.format(issue_key))
else:
print('There was a problem unassigning {}.'.format(issue_key))


@click.argument('issue_key')
@cli.command()
def comment(issue_key):
"""Comment on an issue"""
MARKER = '# Leave a comment on {}'.format(issue_key)
comment = click.edit(MARKER)

if comment is not None and client.comment(issue_key, comment):
print('Comment created')
else:
print('Comment failed')
print(comment)


@click.argument('issue_key')
@cli.command()
def edit(issue_key):
"""Edit issue description"""
issue = client.get_issue(issue_key)
description = click.edit(issue.description)

if description is not None and description.strip() != issue.description.strip():
if client.edit_issue(issue_key, {'description': description.strip()}):
print('Okay, the description for {} has been updated.'.format(issue_key))
else:
print('There was an issue saving the new description:')
print(description)


@click.argument('query')
@cli.command()
def search(query):
"""Search issues using JQL"""
issues = client.search(query)

for issue in issues:
print('{issue.key} {issue.summary}'.format(issue=issue))


def main():
global client

base_url = environ.get('GOJI_JIRA_BASE_URL')

if base_url is None:
print('== GOJI_JIRA_BASE_URL environmental variable is not set.')
exit()

client = JIRAClient(base_url)
cli()
3 changes: 3 additions & 0 deletions goji/__main__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from goji.commands import cli

cli()
123 changes: 123 additions & 0 deletions goji/commands.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,123 @@
from os import environ

import click
from requests.compat import urljoin

from goji.client import JIRAClient


client = None


@click.group()
def cli():
global client

base_url = environ.get('GOJI_JIRA_BASE_URL')

if base_url is None:
print('== GOJI_JIRA_BASE_URL environmental variable is not set.')
exit()

client = JIRAClient(base_url)


@click.argument('issue_key')
@cli.command()
def open(issue_key):
"""Open issue in a web browser"""
url = urljoin(client.base_url, 'browse/%s' % issue_key)
click.launch(url)


@click.argument('issue_key')
@cli.command()
def show(issue_key):
"""Print issue contents"""
issue = client.get_issue(issue_key)
url = urljoin(client.base_url, 'browse/%s' % issue_key)

print('\x1b[01;32m-> {issue.key}\x1b[0m'.format(issue=issue))
print(' {issue.summary}\n'.format(issue=issue))

if issue.description:
for line in issue.description.splitlines():
print(' {}'.format(line))

print('')

print(' - Status: {issue.status}'.format(issue=issue))
print(' - Creator: {issue.creator}'.format(issue=issue))
print(' - Assigned: {issue.assignee}'.format(issue=issue))
print(' - URL: {url}'.format(url=url))

if issue.links:
print('\n Related issues:')

for link in issue.links:
outward_issue = link.outward_issue
print(' - %s: %s (%s)' % (link.link_type.outward.capitalize(),
outward_issue.key, outward_issue.status))


@click.argument('issue_key')
@click.argument('user')
@cli.command()
def assign(issue_key, user=None):
"""Assign an issue to a user"""
if user is None:
user = client.username

if client.assign(issue_key, user):
print('Okay, {} has been assigned to {}.'.format(issue_key, user))
else:
print('There was a problem assigning {} to {}.'.format(issue_key, user))


@click.argument('issue_key')
@cli.command()
def unassign(issue_key):
"""Unassign an issue"""
if client.assign(issue_key, None):
print('{} has been unassigned.'.format(issue_key))
else:
print('There was a problem unassigning {}.'.format(issue_key))


@click.argument('issue_key')
@cli.command()
def comment(issue_key):
"""Comment on an issue"""
MARKER = '# Leave a comment on {}'.format(issue_key)
comment = click.edit(MARKER)

if comment is not None and client.comment(issue_key, comment):
print('Comment created')
else:
print('Comment failed')
print(comment)


@click.argument('issue_key')
@cli.command()
def edit(issue_key):
"""Edit issue description"""
issue = client.get_issue(issue_key)
description = click.edit(issue.description)

if description is not None and description.strip() != issue.description.strip():
if client.edit_issue(issue_key, {'description': description.strip()}):
print('Okay, the description for {} has been updated.'.format(issue_key))
else:
print('There was an issue saving the new description:')
print(description)


@click.argument('query')
@cli.command()
def search(query):
"""Search issues using JQL"""
issues = client.search(query)

for issue in issues:
print('{issue.key} {issue.summary}'.format(issue=issue))
2 changes: 1 addition & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
install_requires=('requests', 'Click'),
entry_points={
'console_scripts': (
'goji = goji:main',
'goji = goji.commands:cli',
)
},
test_suite='goji.tests',
Expand Down