mirror of
https://github.com/Ladebeze66/llm_ticket3.git
synced 2025-12-18 07:07:46 +01:00
156 lines
5.1 KiB
Python
156 lines
5.1 KiB
Python
"""Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
|
|
|
|
from decimal import Decimal
|
|
from typing import (
|
|
Any,
|
|
Dict,
|
|
get_type_hints,
|
|
List,
|
|
Optional,
|
|
Union,
|
|
get_args,
|
|
get_origin,
|
|
)
|
|
from pydantic import BaseModel
|
|
from pydantic.fields import FieldInfo
|
|
|
|
from .metadata import (
|
|
PathParamMetadata,
|
|
find_field_metadata,
|
|
)
|
|
from .values import (
|
|
_get_serialized_params,
|
|
_is_set,
|
|
_populate_from_globals,
|
|
_val_to_string,
|
|
)
|
|
|
|
|
|
def generate_url(
|
|
server_url: str,
|
|
path: str,
|
|
path_params: Any,
|
|
gbls: Optional[Any] = None,
|
|
) -> str:
|
|
path_param_values: Dict[str, str] = {}
|
|
|
|
globals_already_populated = _populate_path_params(
|
|
path_params, gbls, path_param_values, []
|
|
)
|
|
if _is_set(gbls):
|
|
_populate_path_params(gbls, None, path_param_values, globals_already_populated)
|
|
|
|
for key, value in path_param_values.items():
|
|
path = path.replace("{" + key + "}", value, 1)
|
|
|
|
return remove_suffix(server_url, "/") + path
|
|
|
|
|
|
def _populate_path_params(
|
|
path_params: Any,
|
|
gbls: Any,
|
|
path_param_values: Dict[str, str],
|
|
skip_fields: List[str],
|
|
) -> List[str]:
|
|
globals_already_populated: List[str] = []
|
|
|
|
if not isinstance(path_params, BaseModel):
|
|
return globals_already_populated
|
|
|
|
path_param_fields: Dict[str, FieldInfo] = path_params.__class__.model_fields
|
|
path_param_field_types = get_type_hints(path_params.__class__)
|
|
for name in path_param_fields:
|
|
if name in skip_fields:
|
|
continue
|
|
|
|
field = path_param_fields[name]
|
|
|
|
param_metadata = find_field_metadata(field, PathParamMetadata)
|
|
if param_metadata is None:
|
|
continue
|
|
|
|
param = getattr(path_params, name) if _is_set(path_params) else None
|
|
param, global_found = _populate_from_globals(
|
|
name, param, PathParamMetadata, gbls
|
|
)
|
|
if global_found:
|
|
globals_already_populated.append(name)
|
|
|
|
if not _is_set(param):
|
|
continue
|
|
|
|
f_name = field.alias if field.alias is not None else name
|
|
serialization = param_metadata.serialization
|
|
if serialization is not None:
|
|
serialized_params = _get_serialized_params(
|
|
param_metadata, f_name, param, path_param_field_types[name]
|
|
)
|
|
for key, value in serialized_params.items():
|
|
path_param_values[key] = value
|
|
else:
|
|
pp_vals: List[str] = []
|
|
if param_metadata.style == "simple":
|
|
if isinstance(param, List):
|
|
for pp_val in param:
|
|
if not _is_set(pp_val):
|
|
continue
|
|
pp_vals.append(_val_to_string(pp_val))
|
|
path_param_values[f_name] = ",".join(pp_vals)
|
|
elif isinstance(param, Dict):
|
|
for pp_key in param:
|
|
if not _is_set(param[pp_key]):
|
|
continue
|
|
if param_metadata.explode:
|
|
pp_vals.append(f"{pp_key}={_val_to_string(param[pp_key])}")
|
|
else:
|
|
pp_vals.append(f"{pp_key},{_val_to_string(param[pp_key])}")
|
|
path_param_values[f_name] = ",".join(pp_vals)
|
|
elif not isinstance(param, (str, int, float, complex, bool, Decimal)):
|
|
param_fields: Dict[str, FieldInfo] = param.__class__.model_fields
|
|
for name in param_fields:
|
|
param_field = param_fields[name]
|
|
|
|
param_value_metadata = find_field_metadata(
|
|
param_field, PathParamMetadata
|
|
)
|
|
if param_value_metadata is None:
|
|
continue
|
|
|
|
param_name = (
|
|
param_field.alias if param_field.alias is not None else name
|
|
)
|
|
|
|
param_field_val = getattr(param, name)
|
|
if not _is_set(param_field_val):
|
|
continue
|
|
if param_metadata.explode:
|
|
pp_vals.append(
|
|
f"{param_name}={_val_to_string(param_field_val)}"
|
|
)
|
|
else:
|
|
pp_vals.append(
|
|
f"{param_name},{_val_to_string(param_field_val)}"
|
|
)
|
|
path_param_values[f_name] = ",".join(pp_vals)
|
|
elif _is_set(param):
|
|
path_param_values[f_name] = _val_to_string(param)
|
|
|
|
return globals_already_populated
|
|
|
|
|
|
def is_optional(field):
|
|
return get_origin(field) is Union and type(None) in get_args(field)
|
|
|
|
|
|
def template_url(url_with_params: str, params: Dict[str, str]) -> str:
|
|
for key, value in params.items():
|
|
url_with_params = url_with_params.replace("{" + key + "}", value)
|
|
|
|
return url_with_params
|
|
|
|
|
|
def remove_suffix(input_string, suffix):
|
|
if suffix and input_string.endswith(suffix):
|
|
return input_string[: -len(suffix)]
|
|
return input_string
|