diff options
author | Pavel Aharoni <pa0916@att.com> | 2017-03-29 13:35:45 +0300 |
---|---|---|
committer | Pavel Aharoni <pa0916@att.com> | 2017-03-29 13:35:45 +0300 |
commit | e2cc2530fc6d54ebc975c01a4ff887ce12f0a736 (patch) | |
tree | 38385867295c8a09fb0d7f8eaf5fa78179e5b13a /jython-tosca-parser/src/main/resources/Lib/site-packages/cliff-2.4.0-py2.7.egg/cliff/formatters | |
parent | bccebaa9888906f8ff78172f62ec592956066d82 (diff) |
[SDC-6] sdc-distribution-client 1707 rebasing
Change-Id: I322a05fd79beb6ba4fee4d32afffecf531b86e98
Signed-off-by: Pavel Aharoni <pa0916@att.com>
Diffstat (limited to 'jython-tosca-parser/src/main/resources/Lib/site-packages/cliff-2.4.0-py2.7.egg/cliff/formatters')
8 files changed, 548 insertions, 0 deletions
diff --git a/jython-tosca-parser/src/main/resources/Lib/site-packages/cliff-2.4.0-py2.7.egg/cliff/formatters/__init__.py b/jython-tosca-parser/src/main/resources/Lib/site-packages/cliff-2.4.0-py2.7.egg/cliff/formatters/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/jython-tosca-parser/src/main/resources/Lib/site-packages/cliff-2.4.0-py2.7.egg/cliff/formatters/__init__.py diff --git a/jython-tosca-parser/src/main/resources/Lib/site-packages/cliff-2.4.0-py2.7.egg/cliff/formatters/base.py b/jython-tosca-parser/src/main/resources/Lib/site-packages/cliff-2.4.0-py2.7.egg/cliff/formatters/base.py new file mode 100644 index 0000000..920cb32 --- /dev/null +++ b/jython-tosca-parser/src/main/resources/Lib/site-packages/cliff-2.4.0-py2.7.egg/cliff/formatters/base.py @@ -0,0 +1,75 @@ +# 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. + +"""Base classes for formatters. +""" + +import abc + +import six + + +@six.add_metaclass(abc.ABCMeta) +class Formatter(object): + + @abc.abstractmethod + def add_argument_group(self, parser): + """Add any options to the argument parser. + + Should use our own argument group. + """ + + +@six.add_metaclass(abc.ABCMeta) +class ListFormatter(Formatter): + """Base class for formatters that know how to deal with multiple objects. + """ + + @abc.abstractmethod + def emit_list(self, column_names, data, stdout, parsed_args): + """Format and print the list from the iterable data source. + + Data values can be primitive types like ints and strings, or + can be an instance of a :class:`FormattableColumn` for + situations where the value is complex, and may need to be + handled differently for human readable output vs. machine + readable output. + + :param column_names: names of the columns + :param data: iterable data source, one tuple per object + with values in order of column names + :param stdout: output stream where data should be written + :param parsed_args: argparse namespace from our local options + + """ + + +@six.add_metaclass(abc.ABCMeta) +class SingleFormatter(Formatter): + """Base class for formatters that work with single objects. + """ + + @abc.abstractmethod + def emit_one(self, column_names, data, stdout, parsed_args): + """Format and print the values associated with the single object. + + Data values can be primitive types like ints and strings, or + can be an instance of a :class:`FormattableColumn` for + situations where the value is complex, and may need to be + handled differently for human readable output vs. machine + readable output. + + :param column_names: names of the columns + :param data: iterable data source with values in order of column names + :param stdout: output stream where data should be written + :param parsed_args: argparse namespace from our local options + """ diff --git a/jython-tosca-parser/src/main/resources/Lib/site-packages/cliff-2.4.0-py2.7.egg/cliff/formatters/commaseparated.py b/jython-tosca-parser/src/main/resources/Lib/site-packages/cliff-2.4.0-py2.7.egg/cliff/formatters/commaseparated.py new file mode 100644 index 0000000..46a7bc5 --- /dev/null +++ b/jython-tosca-parser/src/main/resources/Lib/site-packages/cliff-2.4.0-py2.7.egg/cliff/formatters/commaseparated.py @@ -0,0 +1,63 @@ +# 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. + +"""Output formatters using csv format. +""" + +import os +import sys + +from .base import ListFormatter +from cliff import columns + +import six + +if sys.version_info[0] == 3: + import csv +else: + import unicodecsv as csv + + +class CSVLister(ListFormatter): + + QUOTE_MODES = { + 'all': csv.QUOTE_ALL, + 'minimal': csv.QUOTE_MINIMAL, + 'nonnumeric': csv.QUOTE_NONNUMERIC, + 'none': csv.QUOTE_NONE, + } + + def add_argument_group(self, parser): + group = parser.add_argument_group('CSV Formatter') + group.add_argument( + '--quote', + choices=sorted(self.QUOTE_MODES.keys()), + dest='quote_mode', + default='nonnumeric', + help='when to include quotes, defaults to nonnumeric', + ) + + def emit_list(self, column_names, data, stdout, parsed_args): + writer = csv.writer(stdout, + quoting=self.QUOTE_MODES[parsed_args.quote_mode], + lineterminator=os.linesep, + escapechar='\\', + ) + writer.writerow(column_names) + for row in data: + writer.writerow( + [(six.text_type(c.machine_readable()) + if isinstance(c, columns.FormattableColumn) + else c) + for c in row] + ) + return diff --git a/jython-tosca-parser/src/main/resources/Lib/site-packages/cliff-2.4.0-py2.7.egg/cliff/formatters/json_format.py b/jython-tosca-parser/src/main/resources/Lib/site-packages/cliff-2.4.0-py2.7.egg/cliff/formatters/json_format.py new file mode 100644 index 0000000..2af5260 --- /dev/null +++ b/jython-tosca-parser/src/main/resources/Lib/site-packages/cliff-2.4.0-py2.7.egg/cliff/formatters/json_format.py @@ -0,0 +1,53 @@ +# 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. + +"""Output formatters for JSON. +""" + +import json + +from . import base +from cliff import columns + + +class JSONFormatter(base.ListFormatter, base.SingleFormatter): + + def add_argument_group(self, parser): + group = parser.add_argument_group(title='json formatter') + group.add_argument( + '--noindent', + action='store_true', + dest='noindent', + help='whether to disable indenting the JSON' + ) + + def emit_list(self, column_names, data, stdout, parsed_args): + items = [] + for item in data: + items.append( + {n: (i.machine_readable() + if isinstance(i, columns.FormattableColumn) + else i) + for n, i in zip(column_names, item)} + ) + indent = None if parsed_args.noindent else 2 + json.dump(items, stdout, indent=indent) + + def emit_one(self, column_names, data, stdout, parsed_args): + one = { + n: (i.machine_readable() + if isinstance(i, columns.FormattableColumn) + else i) + for n, i in zip(column_names, data) + } + indent = None if parsed_args.noindent else 2 + json.dump(one, stdout, indent=indent) diff --git a/jython-tosca-parser/src/main/resources/Lib/site-packages/cliff-2.4.0-py2.7.egg/cliff/formatters/shell.py b/jython-tosca-parser/src/main/resources/Lib/site-packages/cliff-2.4.0-py2.7.egg/cliff/formatters/shell.py new file mode 100644 index 0000000..6e7bae9 --- /dev/null +++ b/jython-tosca-parser/src/main/resources/Lib/site-packages/cliff-2.4.0-py2.7.egg/cliff/formatters/shell.py @@ -0,0 +1,65 @@ +# 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. + +"""Output formatters using shell syntax. +""" + +from . import base +from cliff import columns + +import argparse +import six + + +class ShellFormatter(base.SingleFormatter): + + def add_argument_group(self, parser): + group = parser.add_argument_group( + title='shell formatter', + description='a format a UNIX shell can parse (variable="value")', + ) + group.add_argument( + '--variable', + action='append', + default=[], + dest='variables', + metavar='VARIABLE', + help=argparse.SUPPRESS, + ) + group.add_argument( + '--prefix', + action='store', + default='', + dest='prefix', + help='add a prefix to all variable names', + ) + + def emit_one(self, column_names, data, stdout, parsed_args): + variable_names = [c.lower().replace(' ', '_') + for c in column_names + ] + desired_columns = parsed_args.variables + for name, value in zip(variable_names, data): + if name in desired_columns or not desired_columns: + value = (six.text_type(value.machine_readable()) + if isinstance(value, columns.FormattableColumn) + else value) + if isinstance(value, six.string_types): + value = value.replace('"', '\\"') + if isinstance(name, six.string_types): + # Colons and dashes may appear as a resource property but + # are invalid to use in a shell, replace them with an + # underscore. + name = name.replace(':', '_') + name = name.replace('-', '_') + stdout.write('%s%s="%s"\n' % (parsed_args.prefix, name, value)) + return diff --git a/jython-tosca-parser/src/main/resources/Lib/site-packages/cliff-2.4.0-py2.7.egg/cliff/formatters/table.py b/jython-tosca-parser/src/main/resources/Lib/site-packages/cliff-2.4.0-py2.7.egg/cliff/formatters/table.py new file mode 100644 index 0000000..df4616b --- /dev/null +++ b/jython-tosca-parser/src/main/resources/Lib/site-packages/cliff-2.4.0-py2.7.egg/cliff/formatters/table.py @@ -0,0 +1,203 @@ +# 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. + +"""Output formatters using prettytable. +""" + +import prettytable +import six +import os + +from cliff import utils +from . import base +from cliff import columns + + +def _format_row(row): + new_row = [] + for r in row: + if isinstance(r, columns.FormattableColumn): + r = r.human_readable() + if isinstance(r, six.string_types): + r = r.replace('\r\n', '\n').replace('\r', ' ') + new_row.append(r) + return new_row + + +class TableFormatter(base.ListFormatter, base.SingleFormatter): + + ALIGNMENTS = { + int: 'r', + str: 'l', + float: 'r', + } + try: + ALIGNMENTS[unicode] = 'l' + except NameError: + pass + + def add_argument_group(self, parser): + group = parser.add_argument_group('table formatter') + group.add_argument( + '--max-width', + metavar='<integer>', + default=int(os.environ.get('CLIFF_MAX_TERM_WIDTH', 0)), + type=int, + help=('Maximum display width, <1 to disable. You can also ' + 'use the CLIFF_MAX_TERM_WIDTH environment variable, ' + 'but the parameter takes precedence.'), + ) + group.add_argument( + '--print-empty', + action='store_true', + help='Print empty table if there is no data to show.', + ) + + def add_rows(self, table, column_names, data): + # Figure out the types of the columns in the + # first row and set the alignment of the + # output accordingly. + data_iter = iter(data) + try: + first_row = next(data_iter) + except StopIteration: + pass + else: + for value, name in zip(first_row, column_names): + alignment = self.ALIGNMENTS.get(type(value), 'l') + table.align[name] = alignment + # Now iterate over the data and add the rows. + table.add_row(_format_row(first_row)) + for row in data_iter: + table.add_row(_format_row(row)) + + def emit_list(self, column_names, data, stdout, parsed_args): + x = prettytable.PrettyTable( + column_names, + print_empty=parsed_args.print_empty, + ) + x.padding_width = 1 + + # Add rows if data is provided + if data: + self.add_rows(x, column_names, data) + + # Choose a reasonable min_width to better handle many columns on a + # narrow console. The table will overflow the console width in + # preference to wrapping columns smaller than 8 characters. + min_width = 8 + self._assign_max_widths( + stdout, x, int(parsed_args.max_width), min_width) + + formatted = x.get_string() + stdout.write(formatted) + stdout.write('\n') + return + + def emit_one(self, column_names, data, stdout, parsed_args): + x = prettytable.PrettyTable(field_names=('Field', 'Value'), + print_empty=False) + x.padding_width = 1 + # Align all columns left because the values are + # not all the same type. + x.align['Field'] = 'l' + x.align['Value'] = 'l' + for name, value in zip(column_names, data): + x.add_row(_format_row((name, value))) + + # Choose a reasonable min_width to better handle a narrow + # console. The table will overflow the console width in preference + # to wrapping columns smaller than 16 characters in an attempt to keep + # the Field column readable. + min_width = 16 + self._assign_max_widths( + stdout, x, int(parsed_args.max_width), min_width) + + formatted = x.get_string() + stdout.write(formatted) + stdout.write('\n') + return + + @staticmethod + def _field_widths(field_names, first_line): + + # use the first line +----+-------+ to infer column widths + # accounting for padding and dividers + widths = [max(0, len(i) - 2) for i in first_line.split('+')[1:-1]] + return dict(zip(field_names, widths)) + + @staticmethod + def _width_info(term_width, field_count): + # remove padding and dividers for width available to actual content + usable_total_width = max(0, term_width - 1 - 3 * field_count) + + # calculate width per column if all columns were equal + if field_count == 0: + optimal_width = 0 + else: + optimal_width = max(0, usable_total_width // field_count) + + return usable_total_width, optimal_width + + @staticmethod + def _build_shrink_fields(usable_total_width, optimal_width, + field_widths, field_names): + shrink_fields = [] + shrink_remaining = usable_total_width + for field in field_names: + w = field_widths[field] + if w <= optimal_width: + # leave alone columns which are smaller than the optimal width + shrink_remaining -= w + else: + shrink_fields.append(field) + + return shrink_fields, shrink_remaining + + @staticmethod + def _assign_max_widths(stdout, x, max_width, min_width=0): + if min_width: + x.min_width = min_width + + if max_width > 0: + term_width = max_width + else: + term_width = utils.terminal_width(stdout) + if not term_width: + # not a tty, so do not set any max widths + return + field_count = len(x.field_names) + + try: + first_line = x.get_string().splitlines()[0] + if len(first_line) <= term_width: + return + except IndexError: + return + + usable_total_width, optimal_width = TableFormatter._width_info( + term_width, field_count) + + field_widths = TableFormatter._field_widths(x.field_names, first_line) + + shrink_fields, shrink_remaining = TableFormatter._build_shrink_fields( + usable_total_width, optimal_width, field_widths, x.field_names) + + shrink_to = shrink_remaining // len(shrink_fields) + # make all shrinkable fields size shrink_to apart from the last one + for field in shrink_fields[:-1]: + x.max_width[field] = max(min_width, shrink_to) + shrink_remaining -= shrink_to + + # give the last shrinkable column shrink_to plus any remaining + field = shrink_fields[-1] + x.max_width[field] = max(min_width, shrink_remaining) diff --git a/jython-tosca-parser/src/main/resources/Lib/site-packages/cliff-2.4.0-py2.7.egg/cliff/formatters/value.py b/jython-tosca-parser/src/main/resources/Lib/site-packages/cliff-2.4.0-py2.7.egg/cliff/formatters/value.py new file mode 100644 index 0000000..24125c0 --- /dev/null +++ b/jython-tosca-parser/src/main/resources/Lib/site-packages/cliff-2.4.0-py2.7.egg/cliff/formatters/value.py @@ -0,0 +1,44 @@ +# 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. + +"""Output formatters values only +""" + +import six + +from . import base +from cliff import columns + + +class ValueFormatter(base.ListFormatter, base.SingleFormatter): + + def add_argument_group(self, parser): + pass + + def emit_list(self, column_names, data, stdout, parsed_args): + for row in data: + stdout.write( + ' '.join( + six.text_type(c.machine_readable() + if isinstance(c, columns.FormattableColumn) + else c) + for c in row) + u'\n') + return + + def emit_one(self, column_names, data, stdout, parsed_args): + for value in data: + stdout.write('%s\n' % six.text_type( + value.machine_readable() + if isinstance(value, columns.FormattableColumn) + else value) + ) + return diff --git a/jython-tosca-parser/src/main/resources/Lib/site-packages/cliff-2.4.0-py2.7.egg/cliff/formatters/yaml_format.py b/jython-tosca-parser/src/main/resources/Lib/site-packages/cliff-2.4.0-py2.7.egg/cliff/formatters/yaml_format.py new file mode 100644 index 0000000..8b1e64d --- /dev/null +++ b/jython-tosca-parser/src/main/resources/Lib/site-packages/cliff-2.4.0-py2.7.egg/cliff/formatters/yaml_format.py @@ -0,0 +1,45 @@ +# 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. + +"""Output formatters using PyYAML. +""" + +import yaml + +from . import base +from cliff import columns + + +class YAMLFormatter(base.ListFormatter, base.SingleFormatter): + + def add_argument_group(self, parser): + pass + + def emit_list(self, column_names, data, stdout, parsed_args): + items = [] + for item in data: + items.append( + {n: (i.machine_readable() + if isinstance(i, columns.FormattableColumn) + else i) + for n, i in zip(column_names, item)} + ) + yaml.safe_dump(items, stream=stdout, default_flow_style=False) + + def emit_one(self, column_names, data, stdout, parsed_args): + for key, value in zip(column_names, data): + dict_data = { + key: (value.machine_readable() + if isinstance(value, columns.FormattableColumn) + else value) + } + yaml.safe_dump(dict_data, stream=stdout, default_flow_style=False) |