Skip to content

Commit 0bca21c

Browse files
Merge pull request #613 from linode/dev
v5.50.0
2 parents 91167c3 + 8ea0a3d commit 0bca21c

40 files changed

+762
-330
lines changed

.github/workflows/e2e-suite.yml

Lines changed: 6 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -44,34 +44,21 @@ jobs:
4444
run: |
4545
timestamp=$(date +'%Y%m%d%H%M')
4646
report_filename="${timestamp}_cli_test_report.xml"
47-
if ! pytest tests/integration --disable-warnings --junitxml="${report_filename}"; then
48-
echo "EXIT_STATUS=1" >> $GITHUB_ENV
49-
fi
47+
make testint TEST_ARGS="--junitxml=${report_filename}"
5048
env:
5149
LINODE_CLI_TOKEN: ${{ secrets.LINODE_TOKEN }}
5250

53-
- name: Add additional information to XML report
51+
- name: Upload test results
52+
if: always()
5453
run: |
55-
filename=$(ls | grep -E '^[0-9]{12}_cli_test_report\.xml$')
54+
filename=$(ls | grep -E '^[0-9]{12}_cli_test_report\.xml$')
5655
python tod_scripts/add_to_xml_test_report.py \
5756
--branch_name "${GITHUB_REF#refs/*/}" \
5857
--gha_run_id "$GITHUB_RUN_ID" \
5958
--gha_run_number "$GITHUB_RUN_NUMBER" \
6059
--xmlfile "${filename}"
61-
62-
- name: Upload test results
63-
run: |
64-
filename=$(ls | grep -E '^[0-9]{12}_cli_test_report\.xml$')
60+
sync
6561
python tod_scripts/test_report_upload_script.py "${filename}"
6662
env:
6763
LINODE_CLI_OBJ_ACCESS_KEY: ${{ secrets.LINODE_CLI_OBJ_ACCESS_KEY }}
68-
LINODE_CLI_OBJ_SECRET_KEY: ${{ secrets.LINODE_CLI_OBJ_SECRET_KEY }}
69-
70-
- name: Test Execution Status Handler
71-
run: |
72-
if [[ "$EXIT_STATUS" != 0 ]]; then
73-
echo "Test execution contains failure(s)"
74-
exit $EXIT_STATUS
75-
else
76-
echo "Tests passed!"
77-
fi
64+
LINODE_CLI_OBJ_SECRET_KEY: ${{ secrets.LINODE_CLI_OBJ_SECRET_KEY }}

Makefile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#
44
MODULE :=
55
TEST_CASE_COMMAND :=
6+
TEST_ARGS :=
67

78
ifdef TEST_CASE
89
TEST_CASE_COMMAND = -k $(TEST_CASE)
@@ -71,7 +72,7 @@ testunit:
7172

7273
.PHONY: testint
7374
testint:
74-
pytest tests/integration/${MODULE} ${TEST_CASE_COMMAND}
75+
pytest tests/integration/${MODULE} ${TEST_CASE_COMMAND} ${TEST_ARGS}
7576

7677
.PHONY: testall
7778
testall:

linodecli/__init__.py

Lines changed: 31 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from sys import argv
1111

1212
from rich import print as rprint
13-
from rich.table import Table
13+
from rich.table import Column, Table
1414

1515
from linodecli import plugins
1616

@@ -23,9 +23,16 @@
2323
from .cli import CLI
2424
from .completion import get_completions
2525
from .configuration import ENV_TOKEN_NAME
26-
from .help_pages import print_help_action, print_help_default
26+
from .help_pages import (
27+
HELP_TOPICS,
28+
print_help_action,
29+
print_help_commands,
30+
print_help_default,
31+
print_help_env_vars,
32+
print_help_plugins,
33+
)
2734
from .helpers import handle_url_overrides
28-
from .output import OutputMode
35+
from .output.output_handler import OutputMode
2936
from .version import __version__
3037

3138
VERSION = __version__
@@ -57,54 +64,19 @@ def main(): # pylint: disable=too-many-branches,too-many-statements
5764
)
5865
parsed, args = register_args(parser).parse_known_args()
5966

60-
# output/formatting settings
61-
if parsed.text:
62-
cli.output_handler.mode = OutputMode.delimited
63-
elif parsed.json:
64-
cli.output_handler.mode = OutputMode.json
65-
cli.output_handler.columns = "*"
66-
elif parsed.markdown:
67-
cli.output_handler.mode = OutputMode.markdown
68-
elif parsed.ascii_table:
69-
cli.output_handler.mode = OutputMode.ascii_table
70-
71-
if parsed.delimiter:
72-
cli.output_handler.delimiter = parsed.delimiter
73-
if parsed.pretty:
74-
cli.output_handler.mode = OutputMode.json
75-
cli.output_handler.pretty_json = True
76-
cli.output_handler.columns = "*"
77-
if parsed.no_headers:
78-
cli.output_handler.headers = False
67+
cli.output_handler.configure(parsed, cli.suppress_warnings)
68+
7969
if parsed.all_rows:
8070
cli.pagination = False
81-
elif parsed.format:
82-
cli.output_handler.columns = parsed.format
8371

8472
cli.defaults = not parsed.no_defaults
8573
cli.retry_count = 0
8674
cli.no_retry = parsed.no_retry
8775
cli.suppress_warnings = parsed.suppress_warnings
88-
89-
if parsed.all_columns or parsed.all:
90-
if parsed.all and not cli.suppress_warnings:
91-
print(
92-
"WARNING: '--all' is a deprecated flag, "
93-
"and will be removed in a future version. "
94-
"Please consider use '--all-columns' instead."
95-
)
96-
cli.output_handler.columns = "*"
97-
9876
cli.page = parsed.page
9977
cli.page_size = parsed.page_size
10078
cli.debug_request = parsed.debug
10179

102-
cli.output_handler.suppress_warnings = parsed.suppress_warnings
103-
cli.output_handler.disable_truncation = parsed.no_truncation
104-
cli.output_handler.column_width = parsed.column_width
105-
cli.output_handler.single_table = parsed.single_table
106-
cli.output_handler.tables = parsed.table
107-
10880
if parsed.as_user and not skip_config:
10981
cli.config.set_user(parsed.as_user)
11082

@@ -154,7 +126,19 @@ def main(): # pylint: disable=too-many-branches,too-many-statements
154126
# handle a help for the CLI
155127
if parsed.command is None or (parsed.command is None and parsed.help):
156128
parser.print_help()
157-
print_help_default(cli.ops, cli.config)
129+
print_help_default()
130+
sys.exit(0)
131+
132+
if parsed.command == "env-vars":
133+
print_help_env_vars()
134+
sys.exit(0)
135+
136+
if parsed.command == "commands":
137+
print_help_commands(cli.ops)
138+
sys.exit(0)
139+
140+
if parsed.command == "plugins":
141+
print_help_plugins(cli.config)
158142
sys.exit(0)
159143

160144
# configure
@@ -224,6 +208,7 @@ def main(): # pylint: disable=too-many-branches,too-many-statements
224208
if (
225209
parsed.command not in cli.ops
226210
and parsed.command not in plugins.available(cli.config)
211+
and parsed.command not in HELP_TOPICS
227212
):
228213
print(f"Unrecognized command {parsed.command}")
229214
sys.exit(1)
@@ -243,9 +228,13 @@ def main(): # pylint: disable=too-many-branches,too-many-statements
243228
for action, op in cli.ops[parsed.command].items()
244229
]
245230

246-
table = Table("action", "summary")
231+
table = Table(
232+
Column(header="action", no_wrap=True),
233+
Column(header="summary", style="cyan"),
234+
)
247235
for row in content:
248236
table.add_row(*row)
237+
249238
rprint(table)
250239
sys.exit(0)
251240

linodecli/arg_helpers.py

Lines changed: 7 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,11 @@
1212

1313
from linodecli import plugins
1414
from linodecli.helpers import (
15-
pagination_args_shared,
1615
register_args_shared,
1716
register_debug_arg,
17+
register_pagination_args_shared,
1818
)
19+
from linodecli.output.helpers import register_output_args_shared
1920

2021

2122
def register_args(parser):
@@ -41,106 +42,29 @@ def register_args(parser):
4142
action="store_true",
4243
help="Display information about a command, action, or the CLI overall.",
4344
)
44-
parser.add_argument(
45-
"--text",
46-
action="store_true",
47-
help="Display text output with a delimiter (defaults to tabs).",
48-
)
49-
parser.add_argument(
50-
"--delimiter",
51-
metavar="DELIMITER",
52-
type=str,
53-
help="The delimiter when displaying raw output.",
54-
)
55-
parser.add_argument(
56-
"--json", action="store_true", help="Display output as JSON."
57-
)
58-
parser.add_argument(
59-
"--markdown",
60-
action="store_true",
61-
help="Display output in Markdown format.",
62-
)
63-
parser.add_argument(
64-
"--ascii-table",
65-
action="store_true",
66-
help="Display output in an ASCII table.",
67-
)
68-
parser.add_argument(
69-
"--pretty",
70-
action="store_true",
71-
help="If set, pretty-print JSON output.",
72-
)
73-
parser.add_argument(
74-
"--no-headers",
75-
action="store_true",
76-
help="If set, does not display headers in output.",
77-
)
78-
parser.add_argument(
79-
"--all",
80-
action="store_true",
81-
help=(
82-
"Deprecated flag. An alias of '--all-columns', "
83-
"scheduled to be removed in a future version."
84-
),
85-
)
86-
parser.add_argument(
87-
"--all-columns",
88-
action="store_true",
89-
help=(
90-
"If set, displays all possible columns instead of "
91-
"the default columns. This may not work well on some terminals."
92-
),
93-
)
94-
parser.add_argument(
95-
"--format",
96-
metavar="FORMAT",
97-
type=str,
98-
help="The columns to display in output. Provide a comma-"
99-
"separated list of column names.",
100-
)
45+
10146
parser.add_argument(
10247
"--no-defaults",
10348
action="store_true",
10449
help="Suppress default values for arguments. Default values "
10550
"are configured on initial setup or with linode-cli configure",
10651
)
107-
parser.add_argument(
108-
"--no-truncation",
109-
action="store_true",
110-
default=False,
111-
help="Prevent the truncation of long values in command outputs.",
112-
)
52+
11353
parser.add_argument(
11454
"--no-retry",
11555
action="store_true",
11656
help="Skip retrying on common errors like timeouts.",
11757
)
118-
parser.add_argument(
119-
"--single-table",
120-
action="store_true",
121-
help="Disable printing multiple tables for complex API responses.",
122-
)
123-
parser.add_argument(
124-
"--table",
125-
type=str,
126-
action="append",
127-
help="The specific table(s) to print in output of a command.",
128-
)
129-
parser.add_argument(
130-
"--column-width",
131-
type=int,
132-
default=None,
133-
help="Sets the maximum width of each column in outputted tables. "
134-
"By default, columns are dynamically sized to fit the terminal.",
135-
)
58+
13659
parser.add_argument(
13760
"--version",
13861
"-v",
13962
action="store_true",
14063
help="Prints version information and exits.",
14164
)
14265

143-
pagination_args_shared(parser)
66+
register_output_args_shared(parser)
67+
register_pagination_args_shared(parser)
14468
register_args_shared(parser)
14569
register_debug_arg(parser)
14670

linodecli/baked/colors.py

Lines changed: 0 additions & 64 deletions
This file was deleted.

linodecli/baked/operation.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818

1919
from linodecli.baked.request import OpenAPIFilteringRequest, OpenAPIRequest
2020
from linodecli.baked.response import OpenAPIResponse
21-
from linodecli.output import OutputHandler
21+
from linodecli.output.output_handler import OutputHandler
2222
from linodecli.overrides import OUTPUT_OVERRIDES
2323

2424

0 commit comments

Comments
 (0)