Newer
Older
from pyotrs.version import __version__
from pyotrs.lib import Client
CONTEXT_SETTINGS = dict(help_option_names=['-h', '--help'])
""" load config from file and export to environment
Args:
config_file (str): absolute path of config file
"""
if not os.path.isfile(config_file):
click.secho("No config file found at: %s" % config_file, fg="yellow")
return
config_file_permissions = oct(stat.S_IMODE(os.stat(config_file).st_mode))
if not (config_file_permissions == "0600" or config_file_permissions == "0o600"):
raise Exception("Permissions to %s too open. Should be 0600!" % config_file)
try:
with click.open_file(config_file) as f:
for line_raw in f:
# ignore blank lines and lines starting with #
# leading and trailing whitespaces are stripped
line = line_raw.strip()
if not line.startswith("#") and not line.startswith(" ") and not line == "":
key, value = line.rstrip("").split("=")
if not os.environ.get(key, None): # if env key is already set preserve it
os.environ[key] = value
except IOError:
# no config file in default location; that's fine -> continue
click.secho("No valid file found at: %s (I/O Error)" % config_file, fg="yellow")
except ValueError as err:
click.secho("Does not look like a valid config file: %s" % config_file, fg="yellow")
raise Exception("Does not look like a valid config file: %s" % err)
except Exception as err:
click.secho("An unexpected error occurred: %s" % err, fg="red")
raise Exception("An unexpected error occurred: %s" % err)
@click.option('-c', '--config', 'config_file', type=click.Path(dir_okay=False),
help='Config File')
@click.version_option(version=__version__)
@click.group(context_settings=CONTEXT_SETTINGS) # context enables -h as alias for --help
def cli(config_file=None):
click.secho("Starting PyOTRS CLI")
if not config_file:
config_file = click.get_app_dir('PyOTRS', force_posix=True)
load_config(config_file)
@click.option('--ca-cert-bundle', type=click.STRING,
envvar='PYOTRS_CA_CERT_BUNDLE',
help='CA CERT Bundle (Path)')
@click.option('--https-verify/--no-https-verify', default=True,
envvar='PYOTRS_HTTPS_VERIFY',
help='HTTPS(SSL/TLS) Certificate validation (default: enabled)')
@click.option('--articles', is_flag=True,
help='include Articles')
@click.option('--attachments', is_flag=True,
help='include Article Attachments')
@click.option('--store-attachments', is_flag=True,
help='store Article Attachments to /tmp/<ticket_id>')
@click.option('--store-path', type=click.STRING,
help='where to store Attachments (default: /tmp/pyotrs_<random_str>')
@click.option('-t', '--ticket-id', type=click.INT, prompt=True,
envvar='PYOTRS_TICKET_ID',
help='Ticket ID')
@click.option('-p', '--password', type=click.STRING, prompt=True, hide_input=True,
envvar="PYOTRS_PASSWORD",
help='Password')
@click.option('-u', '--username', type=click.STRING, prompt=True,
envvar="PYOTRS_USERNAME",
help='Username')
@click.option('-b', '--baseurl', type=click.STRING, prompt=True,
envvar="PYOTRS_BASEURL",
help='Base URL')
@cli.command(name="get")
def get(baseurl=None, username=None, password=None, ticket_id=None,
articles=False,
attachments=False, store_attachments=False, store_path=None,
click.secho("Connecting to %s as %s.." % (baseurl, username))
client = Client(baseurl, username, password,
https_verify=https_verify, ca_cert_bundle=ca_cert_bundle)
ticket = client.ticket_get_by_id(ticket_id, articles=articles, attachments=attachments)
click.secho("Ticket: \t%s" % ticket.field_get("Title"))
click.secho("Queue: \t\t%s" % ticket.field_get("Queue"))
click.secho("State: \t\t%s" % ticket.field_get("State"))
click.secho("Priority: \t%s" % ticket.field_get("Priority"))
if store_attachments:
if store_path:
store_path = store_path
if not os.path.exists(store_path):
os.makedirs(store_path)
else:
store_path = tempfile.mkdtemp(prefix="pyotrs_")
click.secho("\nstoring attachments to: %s" % store_path)
for article in ticket.articles:
for attachment in article.attachments:
attachment.save_to_dir(folder=store_path)
click.secho("%s stored." % attachment)
# click.secho("\nFull Ticket:")
# print(ticket.to_dct())