mirror of
https://github.com/OpenAPITools/openapi-generator.git
synced 2025-12-20 18:57:09 +00:00
Use Python uuid.UUID instead of StrictStr (#21740)
This commit is contained in:
@@ -2024,7 +2024,8 @@ public abstract class AbstractPythonCodegen extends DefaultCodegen implements Co
|
|||||||
}
|
}
|
||||||
|
|
||||||
private PythonType uuidType(IJsonSchemaValidationProperties cp) {
|
private PythonType uuidType(IJsonSchemaValidationProperties cp) {
|
||||||
return new PythonType(cp.getDataType());
|
moduleImports.add("uuid", "UUID");
|
||||||
|
return new PythonType("UUID");
|
||||||
}
|
}
|
||||||
|
|
||||||
private PythonType modelType(IJsonSchemaValidationProperties cp) {
|
private PythonType modelType(IJsonSchemaValidationProperties cp) {
|
||||||
@@ -2051,6 +2052,8 @@ public abstract class AbstractPythonCodegen extends DefaultCodegen implements Co
|
|||||||
return arrayType(cp);
|
return arrayType(cp);
|
||||||
} else if (cp.getIsMap() || cp.getIsFreeFormObject()) {
|
} else if (cp.getIsMap() || cp.getIsFreeFormObject()) {
|
||||||
return mapType(cp);
|
return mapType(cp);
|
||||||
|
} else if (cp.getIsUuid()) {
|
||||||
|
return uuidType(cp);
|
||||||
} else if (cp.getIsString()) {
|
} else if (cp.getIsString()) {
|
||||||
return stringType(cp);
|
return stringType(cp);
|
||||||
} else if (cp.getIsNumber() || cp.getIsFloat() || cp.getIsDouble()) {
|
} else if (cp.getIsNumber() || cp.getIsFloat() || cp.getIsDouble()) {
|
||||||
@@ -2067,8 +2070,6 @@ public abstract class AbstractPythonCodegen extends DefaultCodegen implements Co
|
|||||||
return anyType(cp);
|
return anyType(cp);
|
||||||
} else if (cp.getIsDate() || cp.getIsDateTime()) {
|
} else if (cp.getIsDate() || cp.getIsDateTime()) {
|
||||||
return dateType(cp);
|
return dateType(cp);
|
||||||
} else if (cp.getIsUuid()) {
|
|
||||||
return uuidType(cp);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import mimetypes
|
|||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import tempfile
|
import tempfile
|
||||||
|
import uuid
|
||||||
|
|
||||||
from urllib.parse import quote
|
from urllib.parse import quote
|
||||||
from typing import Tuple, Optional, List, Dict, Union
|
from typing import Tuple, Optional, List, Dict, Union
|
||||||
@@ -365,6 +366,8 @@ class ApiClient:
|
|||||||
return obj.get_secret_value()
|
return obj.get_secret_value()
|
||||||
elif isinstance(obj, self.PRIMITIVE_TYPES):
|
elif isinstance(obj, self.PRIMITIVE_TYPES):
|
||||||
return obj
|
return obj
|
||||||
|
elif isinstance(obj, uuid.UUID):
|
||||||
|
return str(obj)
|
||||||
elif isinstance(obj, list):
|
elif isinstance(obj, list):
|
||||||
return [
|
return [
|
||||||
self.sanitize_for_serialization(sub_obj) for sub_obj in obj
|
self.sanitize_for_serialization(sub_obj) for sub_obj in obj
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ import mimetypes
|
|||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import tempfile
|
import tempfile
|
||||||
|
import uuid
|
||||||
|
|
||||||
from urllib.parse import quote
|
from urllib.parse import quote
|
||||||
from typing import Tuple, Optional, List, Dict, Union
|
from typing import Tuple, Optional, List, Dict, Union
|
||||||
@@ -357,6 +358,8 @@ class ApiClient:
|
|||||||
return obj.get_secret_value()
|
return obj.get_secret_value()
|
||||||
elif isinstance(obj, self.PRIMITIVE_TYPES):
|
elif isinstance(obj, self.PRIMITIVE_TYPES):
|
||||||
return obj
|
return obj
|
||||||
|
elif isinstance(obj, uuid.UUID):
|
||||||
|
return str(obj)
|
||||||
elif isinstance(obj, list):
|
elif isinstance(obj, list):
|
||||||
return [
|
return [
|
||||||
self.sanitize_for_serialization(sub_obj) for sub_obj in obj
|
self.sanitize_for_serialization(sub_obj) for sub_obj in obj
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ import mimetypes
|
|||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import tempfile
|
import tempfile
|
||||||
|
import uuid
|
||||||
|
|
||||||
from urllib.parse import quote
|
from urllib.parse import quote
|
||||||
from typing import Tuple, Optional, List, Dict, Union
|
from typing import Tuple, Optional, List, Dict, Union
|
||||||
@@ -357,6 +358,8 @@ class ApiClient:
|
|||||||
return obj.get_secret_value()
|
return obj.get_secret_value()
|
||||||
elif isinstance(obj, self.PRIMITIVE_TYPES):
|
elif isinstance(obj, self.PRIMITIVE_TYPES):
|
||||||
return obj
|
return obj
|
||||||
|
elif isinstance(obj, uuid.UUID):
|
||||||
|
return str(obj)
|
||||||
elif isinstance(obj, list):
|
elif isinstance(obj, list):
|
||||||
return [
|
return [
|
||||||
self.sanitize_for_serialization(sub_obj) for sub_obj in obj
|
self.sanitize_for_serialization(sub_obj) for sub_obj in obj
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ from datetime import date, datetime
|
|||||||
from pydantic import Field, StrictBool, StrictBytes, StrictInt, StrictStr, field_validator
|
from pydantic import Field, StrictBool, StrictBytes, StrictInt, StrictStr, field_validator
|
||||||
from typing import Any, Dict, List, Optional, Tuple, Union
|
from typing import Any, Dict, List, Optional, Tuple, Union
|
||||||
from typing_extensions import Annotated
|
from typing_extensions import Annotated
|
||||||
|
from uuid import UUID
|
||||||
from petstore_api.models.client import Client
|
from petstore_api.models.client import Client
|
||||||
from petstore_api.models.enum_class import EnumClass
|
from petstore_api.models.enum_class import EnumClass
|
||||||
from petstore_api.models.file_schema_test_class import FileSchemaTestClass
|
from petstore_api.models.file_schema_test_class import FileSchemaTestClass
|
||||||
@@ -4913,7 +4914,7 @@ class FakeApi:
|
|||||||
@validate_call
|
@validate_call
|
||||||
async def fake_uuid_example(
|
async def fake_uuid_example(
|
||||||
self,
|
self,
|
||||||
uuid_example: Annotated[StrictStr, Field(description="uuid example")],
|
uuid_example: Annotated[UUID, Field(description="uuid example")],
|
||||||
_request_timeout: Union[
|
_request_timeout: Union[
|
||||||
None,
|
None,
|
||||||
Annotated[StrictFloat, Field(gt=0)],
|
Annotated[StrictFloat, Field(gt=0)],
|
||||||
@@ -4979,7 +4980,7 @@ class FakeApi:
|
|||||||
@validate_call
|
@validate_call
|
||||||
async def fake_uuid_example_with_http_info(
|
async def fake_uuid_example_with_http_info(
|
||||||
self,
|
self,
|
||||||
uuid_example: Annotated[StrictStr, Field(description="uuid example")],
|
uuid_example: Annotated[UUID, Field(description="uuid example")],
|
||||||
_request_timeout: Union[
|
_request_timeout: Union[
|
||||||
None,
|
None,
|
||||||
Annotated[StrictFloat, Field(gt=0)],
|
Annotated[StrictFloat, Field(gt=0)],
|
||||||
@@ -5045,7 +5046,7 @@ class FakeApi:
|
|||||||
@validate_call
|
@validate_call
|
||||||
async def fake_uuid_example_without_preload_content(
|
async def fake_uuid_example_without_preload_content(
|
||||||
self,
|
self,
|
||||||
uuid_example: Annotated[StrictStr, Field(description="uuid example")],
|
uuid_example: Annotated[UUID, Field(description="uuid example")],
|
||||||
_request_timeout: Union[
|
_request_timeout: Union[
|
||||||
None,
|
None,
|
||||||
Annotated[StrictFloat, Field(gt=0)],
|
Annotated[StrictFloat, Field(gt=0)],
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import mimetypes
|
|||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import tempfile
|
import tempfile
|
||||||
|
import uuid
|
||||||
|
|
||||||
from urllib.parse import quote
|
from urllib.parse import quote
|
||||||
from typing import Tuple, Optional, List, Dict, Union
|
from typing import Tuple, Optional, List, Dict, Union
|
||||||
@@ -359,6 +360,8 @@ class ApiClient:
|
|||||||
return obj.get_secret_value()
|
return obj.get_secret_value()
|
||||||
elif isinstance(obj, self.PRIMITIVE_TYPES):
|
elif isinstance(obj, self.PRIMITIVE_TYPES):
|
||||||
return obj
|
return obj
|
||||||
|
elif isinstance(obj, uuid.UUID):
|
||||||
|
return str(obj)
|
||||||
elif isinstance(obj, list):
|
elif isinstance(obj, list):
|
||||||
return [
|
return [
|
||||||
self.sanitize_for_serialization(sub_obj) for sub_obj in obj
|
self.sanitize_for_serialization(sub_obj) for sub_obj in obj
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ from decimal import Decimal
|
|||||||
from pydantic import BaseModel, ConfigDict, Field, StrictBytes, StrictInt, StrictStr, field_validator
|
from pydantic import BaseModel, ConfigDict, Field, StrictBytes, StrictInt, StrictStr, field_validator
|
||||||
from typing import Any, ClassVar, Dict, List, Optional, Tuple, Union
|
from typing import Any, ClassVar, Dict, List, Optional, Tuple, Union
|
||||||
from typing_extensions import Annotated
|
from typing_extensions import Annotated
|
||||||
|
from uuid import UUID
|
||||||
from typing import Optional, Set
|
from typing import Optional, Set
|
||||||
from typing_extensions import Self
|
from typing_extensions import Self
|
||||||
|
|
||||||
@@ -42,7 +43,7 @@ class FormatTest(BaseModel):
|
|||||||
binary: Optional[Union[StrictBytes, StrictStr, Tuple[StrictStr, StrictBytes]]] = None
|
binary: Optional[Union[StrictBytes, StrictStr, Tuple[StrictStr, StrictBytes]]] = None
|
||||||
var_date: date = Field(alias="date")
|
var_date: date = Field(alias="date")
|
||||||
date_time: Optional[datetime] = Field(default=None, alias="dateTime")
|
date_time: Optional[datetime] = Field(default=None, alias="dateTime")
|
||||||
uuid: Optional[StrictStr] = None
|
uuid: Optional[UUID] = None
|
||||||
password: Annotated[str, Field(min_length=10, strict=True, max_length=64)]
|
password: Annotated[str, Field(min_length=10, strict=True, max_length=64)]
|
||||||
pattern_with_digits: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="A string that is a 10 digit number. Can have leading zeros.")
|
pattern_with_digits: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="A string that is a 10 digit number. Can have leading zeros.")
|
||||||
pattern_with_digits_and_delimiter: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="A string starting with 'image_' (case insensitive) and one to three digits following i.e. Image_01.")
|
pattern_with_digits_and_delimiter: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="A string starting with 'image_' (case insensitive) and one to three digits following i.e. Image_01.")
|
||||||
|
|||||||
@@ -18,8 +18,9 @@ import re # noqa: F401
|
|||||||
import json
|
import json
|
||||||
|
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from pydantic import BaseModel, ConfigDict, Field, StrictStr
|
from pydantic import BaseModel, ConfigDict, Field
|
||||||
from typing import Any, ClassVar, Dict, List, Optional
|
from typing import Any, ClassVar, Dict, List, Optional
|
||||||
|
from uuid import UUID
|
||||||
from petstore_api.models.animal import Animal
|
from petstore_api.models.animal import Animal
|
||||||
from typing import Optional, Set
|
from typing import Optional, Set
|
||||||
from typing_extensions import Self
|
from typing_extensions import Self
|
||||||
@@ -28,7 +29,7 @@ class MixedPropertiesAndAdditionalPropertiesClass(BaseModel):
|
|||||||
"""
|
"""
|
||||||
MixedPropertiesAndAdditionalPropertiesClass
|
MixedPropertiesAndAdditionalPropertiesClass
|
||||||
""" # noqa: E501
|
""" # noqa: E501
|
||||||
uuid: Optional[StrictStr] = None
|
uuid: Optional[UUID] = None
|
||||||
date_time: Optional[datetime] = Field(default=None, alias="dateTime")
|
date_time: Optional[datetime] = Field(default=None, alias="dateTime")
|
||||||
map: Optional[Dict[str, Animal]] = None
|
map: Optional[Dict[str, Animal]] = None
|
||||||
__properties: ClassVar[List[str]] = ["uuid", "dateTime", "map"]
|
__properties: ClassVar[List[str]] = ["uuid", "dateTime", "map"]
|
||||||
|
|||||||
@@ -17,8 +17,9 @@ import pprint
|
|||||||
import re # noqa: F401
|
import re # noqa: F401
|
||||||
import json
|
import json
|
||||||
|
|
||||||
from pydantic import BaseModel, ConfigDict, StrictStr
|
from pydantic import BaseModel, ConfigDict
|
||||||
from typing import Any, ClassVar, Dict, List
|
from typing import Any, ClassVar, Dict, List
|
||||||
|
from uuid import UUID
|
||||||
from petstore_api.models.task_activity import TaskActivity
|
from petstore_api.models.task_activity import TaskActivity
|
||||||
from typing import Optional, Set
|
from typing import Optional, Set
|
||||||
from typing_extensions import Self
|
from typing_extensions import Self
|
||||||
@@ -27,7 +28,7 @@ class Task(BaseModel):
|
|||||||
"""
|
"""
|
||||||
Used to test oneOf enums with only one string value.
|
Used to test oneOf enums with only one string value.
|
||||||
""" # noqa: E501
|
""" # noqa: E501
|
||||||
id: StrictStr
|
id: UUID
|
||||||
activity: TaskActivity
|
activity: TaskActivity
|
||||||
__properties: ClassVar[List[str]] = ["id", "activity"]
|
__properties: ClassVar[List[str]] = ["id", "activity"]
|
||||||
|
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ from datetime import date, datetime
|
|||||||
from pydantic import Field, StrictBool, StrictBytes, StrictFloat, StrictInt, StrictStr, field_validator
|
from pydantic import Field, StrictBool, StrictBytes, StrictFloat, StrictInt, StrictStr, field_validator
|
||||||
from typing import Any, Dict, List, Optional, Tuple, Union
|
from typing import Any, Dict, List, Optional, Tuple, Union
|
||||||
from typing_extensions import Annotated
|
from typing_extensions import Annotated
|
||||||
|
from uuid import UUID
|
||||||
from petstore_api.models.client import Client
|
from petstore_api.models.client import Client
|
||||||
from petstore_api.models.enum_class import EnumClass
|
from petstore_api.models.enum_class import EnumClass
|
||||||
from petstore_api.models.file_schema_test_class import FileSchemaTestClass
|
from petstore_api.models.file_schema_test_class import FileSchemaTestClass
|
||||||
@@ -4913,7 +4914,7 @@ class FakeApi:
|
|||||||
@validate_call
|
@validate_call
|
||||||
def fake_uuid_example(
|
def fake_uuid_example(
|
||||||
self,
|
self,
|
||||||
uuid_example: Annotated[StrictStr, Field(description="uuid example")],
|
uuid_example: Annotated[UUID, Field(description="uuid example")],
|
||||||
_request_timeout: Union[
|
_request_timeout: Union[
|
||||||
None,
|
None,
|
||||||
Annotated[StrictFloat, Field(gt=0)],
|
Annotated[StrictFloat, Field(gt=0)],
|
||||||
@@ -4979,7 +4980,7 @@ class FakeApi:
|
|||||||
@validate_call
|
@validate_call
|
||||||
def fake_uuid_example_with_http_info(
|
def fake_uuid_example_with_http_info(
|
||||||
self,
|
self,
|
||||||
uuid_example: Annotated[StrictStr, Field(description="uuid example")],
|
uuid_example: Annotated[UUID, Field(description="uuid example")],
|
||||||
_request_timeout: Union[
|
_request_timeout: Union[
|
||||||
None,
|
None,
|
||||||
Annotated[StrictFloat, Field(gt=0)],
|
Annotated[StrictFloat, Field(gt=0)],
|
||||||
@@ -5045,7 +5046,7 @@ class FakeApi:
|
|||||||
@validate_call
|
@validate_call
|
||||||
def fake_uuid_example_without_preload_content(
|
def fake_uuid_example_without_preload_content(
|
||||||
self,
|
self,
|
||||||
uuid_example: Annotated[StrictStr, Field(description="uuid example")],
|
uuid_example: Annotated[UUID, Field(description="uuid example")],
|
||||||
_request_timeout: Union[
|
_request_timeout: Union[
|
||||||
None,
|
None,
|
||||||
Annotated[StrictFloat, Field(gt=0)],
|
Annotated[StrictFloat, Field(gt=0)],
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import mimetypes
|
|||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import tempfile
|
import tempfile
|
||||||
|
import uuid
|
||||||
|
|
||||||
from urllib.parse import quote
|
from urllib.parse import quote
|
||||||
from typing import Tuple, Optional, List, Dict, Union
|
from typing import Tuple, Optional, List, Dict, Union
|
||||||
@@ -356,6 +357,8 @@ class ApiClient:
|
|||||||
return obj.get_secret_value()
|
return obj.get_secret_value()
|
||||||
elif isinstance(obj, self.PRIMITIVE_TYPES):
|
elif isinstance(obj, self.PRIMITIVE_TYPES):
|
||||||
return obj
|
return obj
|
||||||
|
elif isinstance(obj, uuid.UUID):
|
||||||
|
return str(obj)
|
||||||
elif isinstance(obj, list):
|
elif isinstance(obj, list):
|
||||||
return [
|
return [
|
||||||
self.sanitize_for_serialization(sub_obj) for sub_obj in obj
|
self.sanitize_for_serialization(sub_obj) for sub_obj in obj
|
||||||
|
|||||||
@@ -22,6 +22,7 @@ from decimal import Decimal
|
|||||||
from pydantic import BaseModel, ConfigDict, Field, StrictBytes, StrictInt, StrictStr, field_validator
|
from pydantic import BaseModel, ConfigDict, Field, StrictBytes, StrictInt, StrictStr, field_validator
|
||||||
from typing import Any, ClassVar, Dict, List, Optional, Tuple, Union
|
from typing import Any, ClassVar, Dict, List, Optional, Tuple, Union
|
||||||
from typing_extensions import Annotated
|
from typing_extensions import Annotated
|
||||||
|
from uuid import UUID
|
||||||
from typing import Optional, Set
|
from typing import Optional, Set
|
||||||
from typing_extensions import Self
|
from typing_extensions import Self
|
||||||
|
|
||||||
@@ -42,7 +43,7 @@ class FormatTest(BaseModel):
|
|||||||
binary: Optional[Union[StrictBytes, StrictStr, Tuple[StrictStr, StrictBytes]]] = None
|
binary: Optional[Union[StrictBytes, StrictStr, Tuple[StrictStr, StrictBytes]]] = None
|
||||||
var_date: date = Field(alias="date")
|
var_date: date = Field(alias="date")
|
||||||
date_time: Optional[datetime] = Field(default=None, alias="dateTime")
|
date_time: Optional[datetime] = Field(default=None, alias="dateTime")
|
||||||
uuid: Optional[StrictStr] = None
|
uuid: Optional[UUID] = None
|
||||||
password: Annotated[str, Field(min_length=10, strict=True, max_length=64)]
|
password: Annotated[str, Field(min_length=10, strict=True, max_length=64)]
|
||||||
pattern_with_digits: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="A string that is a 10 digit number. Can have leading zeros.")
|
pattern_with_digits: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="A string that is a 10 digit number. Can have leading zeros.")
|
||||||
pattern_with_digits_and_delimiter: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="A string starting with 'image_' (case insensitive) and one to three digits following i.e. Image_01.")
|
pattern_with_digits_and_delimiter: Optional[Annotated[str, Field(strict=True)]] = Field(default=None, description="A string starting with 'image_' (case insensitive) and one to three digits following i.e. Image_01.")
|
||||||
|
|||||||
@@ -18,8 +18,9 @@ import re # noqa: F401
|
|||||||
import json
|
import json
|
||||||
|
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from pydantic import BaseModel, ConfigDict, Field, StrictStr
|
from pydantic import BaseModel, ConfigDict, Field
|
||||||
from typing import Any, ClassVar, Dict, List, Optional
|
from typing import Any, ClassVar, Dict, List, Optional
|
||||||
|
from uuid import UUID
|
||||||
from petstore_api.models.animal import Animal
|
from petstore_api.models.animal import Animal
|
||||||
from typing import Optional, Set
|
from typing import Optional, Set
|
||||||
from typing_extensions import Self
|
from typing_extensions import Self
|
||||||
@@ -28,7 +29,7 @@ class MixedPropertiesAndAdditionalPropertiesClass(BaseModel):
|
|||||||
"""
|
"""
|
||||||
MixedPropertiesAndAdditionalPropertiesClass
|
MixedPropertiesAndAdditionalPropertiesClass
|
||||||
""" # noqa: E501
|
""" # noqa: E501
|
||||||
uuid: Optional[StrictStr] = None
|
uuid: Optional[UUID] = None
|
||||||
date_time: Optional[datetime] = Field(default=None, alias="dateTime")
|
date_time: Optional[datetime] = Field(default=None, alias="dateTime")
|
||||||
map: Optional[Dict[str, Animal]] = None
|
map: Optional[Dict[str, Animal]] = None
|
||||||
additional_properties: Dict[str, Any] = {}
|
additional_properties: Dict[str, Any] = {}
|
||||||
|
|||||||
@@ -17,8 +17,9 @@ import pprint
|
|||||||
import re # noqa: F401
|
import re # noqa: F401
|
||||||
import json
|
import json
|
||||||
|
|
||||||
from pydantic import BaseModel, ConfigDict, StrictStr
|
from pydantic import BaseModel, ConfigDict
|
||||||
from typing import Any, ClassVar, Dict, List
|
from typing import Any, ClassVar, Dict, List
|
||||||
|
from uuid import UUID
|
||||||
from petstore_api.models.task_activity import TaskActivity
|
from petstore_api.models.task_activity import TaskActivity
|
||||||
from typing import Optional, Set
|
from typing import Optional, Set
|
||||||
from typing_extensions import Self
|
from typing_extensions import Self
|
||||||
@@ -27,7 +28,7 @@ class Task(BaseModel):
|
|||||||
"""
|
"""
|
||||||
Used to test oneOf enums with only one string value.
|
Used to test oneOf enums with only one string value.
|
||||||
""" # noqa: E501
|
""" # noqa: E501
|
||||||
id: StrictStr
|
id: UUID
|
||||||
activity: TaskActivity
|
activity: TaskActivity
|
||||||
additional_properties: Dict[str, Any] = {}
|
additional_properties: Dict[str, Any] = {}
|
||||||
__properties: ClassVar[List[str]] = ["id", "activity"]
|
__properties: ClassVar[List[str]] = ["id", "activity"]
|
||||||
|
|||||||
Reference in New Issue
Block a user