[CI] fix dump_input for str type (#18697)

Signed-off-by: Andy Xie <andy.xning@gmail.com>
This commit is contained in:
Ning Xie 2025-05-26 18:23:35 +08:00 committed by GitHub
parent 38b13dfe78
commit 5a2c76cbe1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 40 additions and 4 deletions

View File

@ -1,10 +1,11 @@
# SPDX-License-Identifier: Apache-2.0 # SPDX-License-Identifier: Apache-2.0
import enum
import json import json
import logging import logging
import os import os
import sys import sys
import tempfile import tempfile
from dataclasses import dataclass
from json.decoder import JSONDecodeError from json.decoder import JSONDecodeError
from tempfile import NamedTemporaryFile from tempfile import NamedTemporaryFile
from typing import Any from typing import Any
@ -16,6 +17,7 @@ import pytest
from vllm.logger import (_DATE_FORMAT, _FORMAT, _configure_vllm_root_logger, from vllm.logger import (_DATE_FORMAT, _FORMAT, _configure_vllm_root_logger,
enable_trace_function_call, init_logger) enable_trace_function_call, init_logger)
from vllm.logging_utils import NewLineFormatter from vllm.logging_utils import NewLineFormatter
from vllm.logging_utils.dump_input import prepare_object_to_dump
def f1(x): def f1(x):
@ -216,3 +218,37 @@ def test_custom_logging_config_causes_an_error_if_configure_logging_is_off():
assert other_logger.handlers != root_logger.handlers assert other_logger.handlers != root_logger.handlers
assert other_logger.level != root_logger.level assert other_logger.level != root_logger.level
assert other_logger.propagate assert other_logger.propagate
def test_prepare_object_to_dump():
str_obj = 'str'
assert prepare_object_to_dump(str_obj) == "'str'"
list_obj = [1, 2, 3]
assert prepare_object_to_dump(list_obj) == '[1, 2, 3]'
dict_obj = {'a': 1, 'b': 'b'}
assert prepare_object_to_dump(dict_obj) in [
"{a: 1, b: 'b'}", "{b: 'b', a: 1}"
]
set_obj = {1, 2, 3}
assert prepare_object_to_dump(set_obj) == '[1, 2, 3]'
tuple_obj = ('a', 'b', 'c')
assert prepare_object_to_dump(tuple_obj) == "['a', 'b', 'c']"
class CustomEnum(enum.Enum):
A = enum.auto()
B = enum.auto()
C = enum.auto()
assert prepare_object_to_dump(CustomEnum.A) == repr(CustomEnum.A)
@dataclass
class CustomClass:
a: int
b: str
assert (prepare_object_to_dump(CustomClass(
1, 'b')) == "CustomClass(a=1, b='b')")

View File

@ -18,7 +18,7 @@ logger = init_logger(__name__)
def prepare_object_to_dump(obj) -> str: def prepare_object_to_dump(obj) -> str:
if isinstance(obj, str): if isinstance(obj, str):
return "'{obj}'" # Double quotes return f"'{obj}'" # Double quotes
elif isinstance(obj, dict): elif isinstance(obj, dict):
dict_str = ', '.join({f'{str(k)}: {prepare_object_to_dump(v)}' \ dict_str = ', '.join({f'{str(k)}: {prepare_object_to_dump(v)}' \
for k, v in obj.items()}) for k, v in obj.items()})
@ -42,9 +42,9 @@ def prepare_object_to_dump(obj) -> str:
return obj.anon_repr() return obj.anon_repr()
elif hasattr(obj, '__dict__'): elif hasattr(obj, '__dict__'):
items = obj.__dict__.items() items = obj.__dict__.items()
dict_str = ','.join([f'{str(k)}={prepare_object_to_dump(v)}' \ dict_str = ', '.join([f'{str(k)}={prepare_object_to_dump(v)}' \
for k, v in items]) for k, v in items])
return (f"{type(obj).__name__}({dict_str})") return f"{type(obj).__name__}({dict_str})"
else: else:
# Hacky way to make sure we can serialize the object in JSON format # Hacky way to make sure we can serialize the object in JSON format
try: try: