# ============LICENSE_START======================================================= # org.onap.dcae # ================================================================================ # Copyright (c) 2017 AT&T Intellectual Property. All rights reserved. # ================================================================================ # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # ============LICENSE_END========================================================= # # ECOMP is a trademark and service mark of AT&T Intellectual Property. # -*- coding: utf-8 -*- """ Provides utilities for commands """ import json import textwrap from terminaltables import AsciiTable from dcae_cli.util import DcaeException def parse_input(input_): '''Returns (name, version) tuple parsed from name:version''' arg = input_.split(':') if len(arg) == 1: cname, cver = arg[0], None elif len(arg) == 2: cname, cver = arg cver = None if not cver else cver else: raise DcaeException("Input '{:}' must be NAME or NAME:VERSION".format(input_)) return cname, cver def parse_input_pair(req, resp): '''Returns a tuple output of `parse_input` for convenience''' return parse_input(req), parse_input(resp) def create_table(header, entries): '''Returns an ASCII table string''' data = [header, ] if entries: data.extend(entries) else: data.append(['']*len(header)) return AsciiTable(data).table # Utility methods used to format records for displaying def get_status_string(record): """Get the status label given a record of either data format or component""" if "when_revoked" not in record or \ "when_published" not in record or \ "when_added" not in record: return None if record["when_revoked"] is not None: return "revoked" elif record["when_published"] is not None: return "published" else: return "unpublished" def get_status_string_camel(record): """Get the status label given a record of either data format or component, in camelCase""" if "whenRevoked" not in record or \ "whenPublished" not in record or \ "whenAdded" not in record: return None if record["whenRevoked"] is not None: return "revoked" elif record["whenPublished"] is not None: return "published" else: return "unpublished" def format_description(description, line_width=50, num_lines=3): """Formats the description field Description field can be long. This function line wraps to a specified number of lines. The last line trails with ".." if the text still overflows to signal that there is more. """ if not description: return '' lines = textwrap.wrap(description) lines = lines[:num_lines] last_line = lines.pop() if len(last_line) > line_width and line_width > 2: last_line = "{0}..".format(last_line[:-2]) lines.append(last_line) return "\n".join(lines) def format_json(some_json): return json.dumps(some_json, sort_keys=True, indent=4)