diff --git a/stacklet/client/platform/client.py b/stacklet/client/platform/client.py index e651d2f..05d153c 100644 --- a/stacklet/client/platform/client.py +++ b/stacklet/client/platform/client.py @@ -11,7 +11,7 @@ from .config import DEFAULT_CONFIG_FILE from .context import StackletContext from .executor import StackletGraphqlExecutor -from .utils import _PAGINATION_OPTIONS +from .utils import PAGINATION_OPTIONS def platform_client(pager=False, expr=False): @@ -78,14 +78,14 @@ def _method(executor, function_name, snippet, pager, expr): doc.append("") if snippet.pagination: doc.append("pagination: ") - for p in _PAGINATION_OPTIONS: + for p in PAGINATION_OPTIONS: doc.append(f" - {p}") doc.append("") doc = "\n".join(doc) defaults = {} if snippet.pagination: - for k, v in _PAGINATION_OPTIONS.items(): + for k, v in PAGINATION_OPTIONS.items(): defaults[k] = v["default"] for k, v in snippet.optional.items(): defaults[k] = None diff --git a/stacklet/client/platform/commands/cube.py b/stacklet/client/platform/commands/cube.py index a44b418..caf02ef 100644 --- a/stacklet/client/platform/commands/cube.py +++ b/stacklet/client/platform/commands/cube.py @@ -14,6 +14,7 @@ from ..context import StackletContext from ..exceptions import MissingToken +from ..utils import get_user_agent @click.group() @@ -71,6 +72,7 @@ def _request(context: StackletContext, method: str, path: str, payload: Any = No headers={ "Authorization": f"Bearer {token}", "Content-Type": "application/json", + "User-Agent": get_user_agent(), }, json=payload, ) diff --git a/stacklet/client/platform/executor.py b/stacklet/client/platform/executor.py index 90e8460..6f14008 100644 --- a/stacklet/client/platform/executor.py +++ b/stacklet/client/platform/executor.py @@ -9,7 +9,7 @@ from .context import StackletContext from .exceptions import MissingToken from .registry import PluginRegistry -from .utils import _PAGINATION_OPTIONS, wrap_command +from .utils import PAGINATION_OPTIONS, get_user_agent, wrap_command class StackletGraphqlExecutor: @@ -31,6 +31,7 @@ def __init__(self, context: StackletContext): self.session.headers.update( { "Authorization": f"Bearer {token}", + "User-Agent": get_user_agent(), } ) @@ -54,7 +55,7 @@ def wrapper(func): func = wrap_command(func, snippet.required, required=True) func = wrap_command(func, snippet.optional) if snippet.pagination: - func = wrap_command(func, _PAGINATION_OPTIONS) + func = wrap_command(func, PAGINATION_OPTIONS) return func return wrapper diff --git a/stacklet/client/platform/utils.py b/stacklet/client/platform/utils.py index f9496f2..27e83b8 100644 --- a/stacklet/client/platform/utils.py +++ b/stacklet/client/platform/utils.py @@ -1,6 +1,7 @@ # Copyright Stacklet, Inc. # SPDX-License-Identifier: Apache-2.0 +import importlib.metadata import logging from pathlib import Path @@ -16,7 +17,7 @@ def expand_user_path(ctx, param, value): return value.expanduser() -_PAGINATION_OPTIONS = { +PAGINATION_OPTIONS = { "first": { "help": "For use with pagination. Return the first n results.", "default": 20, @@ -78,3 +79,9 @@ def setup_logging(level): root_handler = logging.getLogger() if level: root_handler.setLevel(level=get_log_level(level)) + + +def get_user_agent(): + package = "stacklet.client.platform" + version = importlib.metadata.version(package) + return f"{package}/{version}"