mirror of
https://github.com/davidhalter/typeshed.git
synced 2025-12-08 13:04:46 +08:00
Add files for Py 3.3 and 3.2
This commit is contained in:
19
stdlib/3.2/xml/etree/ElementInclude.pyi
Normal file
19
stdlib/3.2/xml/etree/ElementInclude.pyi
Normal file
@@ -0,0 +1,19 @@
|
||||
# Stubs for xml.etree.ElementInclude (Python 3.4)
|
||||
#
|
||||
# NOTE: This dynamically typed stub was automatically generated by stubgen.
|
||||
|
||||
from typing import Union, Optional, Callable
|
||||
from .ElementTree import Element
|
||||
|
||||
XINCLUDE = ... # type: str
|
||||
XINCLUDE_INCLUDE = ... # type: str
|
||||
XINCLUDE_FALLBACK = ... # type: str
|
||||
|
||||
class FatalIncludeError(SyntaxError): ...
|
||||
|
||||
def default_loader(href: Union[str, bytes, int], parse: str, encoding: Optional[str]=...) -> Union[str, Element]: ...
|
||||
|
||||
# TODO: loader is of type default_loader ie it takes a callable that has the
|
||||
# same signature as default_loader. But default_loader has a keyword argument
|
||||
# Which can't be represented using Callable...
|
||||
def include(elem: Element, loader: Callable[..., Union[str, Element]]=...) -> None: ...
|
||||
35
stdlib/3.2/xml/etree/ElementPath.pyi
Normal file
35
stdlib/3.2/xml/etree/ElementPath.pyi
Normal file
@@ -0,0 +1,35 @@
|
||||
# Stubs for xml.etree.ElementPath (Python 3.4)
|
||||
#
|
||||
# NOTE: This dynamically typed stub was automatically generated by stubgen.
|
||||
|
||||
from typing import Pattern, Dict, Generator, Tuple, List, Union, TypeVar, Callable, Optional
|
||||
from .ElementTree import Element
|
||||
|
||||
xpath_tokenizer_re = ... # type: Pattern
|
||||
|
||||
_token = Tuple[str, str]
|
||||
_next = Callable[[], _token]
|
||||
_callback = Callable[[_SelectorContext, List[Element]], Generator[Element, None, None]]
|
||||
|
||||
def xpath_tokenizer(pattern: str, namespaces: Dict[str, str]=...) -> Generator[_token, None, None]: ...
|
||||
def get_parent_map(context: _SelectorContext) -> Dict[Element, Element]: ...
|
||||
def prepare_child(next: _next, token: _token) -> _callback: ...
|
||||
def prepare_star(next: _next, token: _token) -> _callback: ...
|
||||
def prepare_self(next: _next, token: _token) -> _callback: ...
|
||||
def prepare_descendant(next: _next, token: _token) -> _callback: ...
|
||||
def prepare_parent(next: _next, token: _token) -> _callback: ...
|
||||
def prepare_predicate(next: _next, token: _token) -> _callback: ...
|
||||
|
||||
ops = ... # type: Dict[str, Callable[[_next, _token], _callback]]
|
||||
|
||||
class _SelectorContext:
|
||||
parent_map = ... # type: Dict[Element, Element]
|
||||
root = ... # type: Element
|
||||
def __init__(self, root: Element) -> None: ...
|
||||
|
||||
_T = TypeVar('_T')
|
||||
|
||||
def iterfind(elem: Element, path: str, namespaces: Dict[str, str]=...) -> List[Element]: ...
|
||||
def find(elem: Element, path: str, namespaces: Dict[str, str]=...) -> Optional[Element]: ...
|
||||
def findall(elem: Element, path: str, namespaces: Dict[str, str]=...) -> List[Element]: ...
|
||||
def findtext(elem: Element, path: str, default: _T=..., namespaces: Dict[str, str]=...) -> Union[_T, str]: ...
|
||||
120
stdlib/3.2/xml/etree/ElementTree.pyi
Normal file
120
stdlib/3.2/xml/etree/ElementTree.pyi
Normal file
@@ -0,0 +1,120 @@
|
||||
# Stubs for xml.etree.ElementTree (Python 3.4)
|
||||
#
|
||||
# NOTE: This dynamically typed stub was automatically generated by stubgen.
|
||||
|
||||
from typing import Any, AnyStr, Union, IO, Callable, Dict, List, Tuple, Sequence, Iterator, TypeVar, Optional, KeysView, ItemsView, Generator
|
||||
import io
|
||||
|
||||
VERSION = ... # type: str
|
||||
|
||||
_Ss = TypeVar('_Ss', str, bytes)
|
||||
_T = TypeVar('_T')
|
||||
_str_or_bytes = Union[str, bytes]
|
||||
|
||||
class _SimpleElementPath:
|
||||
def find(self, element: Element, tag: _str_or_bytes, namespaces: Any=...) -> Optional[Element]: ...
|
||||
def findtext(self, element: Element, tag: _str_or_bytes, default: _T=..., namespaces: Any=...) -> Union[str, bytes, _T]: ...
|
||||
def iterfind(self, element: Element, tag: _str_or_bytes, namespaces: Any=...) -> Generator[Element, None, None]: ...
|
||||
def findall(self, element: Element, tag: _str_or_bytes, namespaces: Any=...) -> List[Element]: ...
|
||||
|
||||
class ParseError(SyntaxError): ...
|
||||
|
||||
def iselement(element: Element) -> bool: ...
|
||||
|
||||
class Element:
|
||||
tag = ... # type: _str_or_bytes
|
||||
attrib = ... # type: Dict[_str_or_bytes, _str_or_bytes]
|
||||
text = ... # type: Optional[_str_or_bytes]
|
||||
tail = ... # type: Optional[_str_or_bytes]
|
||||
def __init__(self, tag: Union[AnyStr, Callable[..., Element]], attrib: Dict[AnyStr, AnyStr]=..., **extra: Dict[str, AnyStr]) -> None: ...
|
||||
def append(self, subelement: Element) -> None: ...
|
||||
def clear(self) -> None: ...
|
||||
def copy(self) -> Element: ...
|
||||
def extend(self, elements: Sequence[Element]) -> None: ...
|
||||
def find(self, path: str, namespaces: Dict[str, str]=...) -> Optional[Element]: ...
|
||||
def findall(self, path: str, namespaces: Dict[str, str]=...) -> List[Element]: ...
|
||||
def findtext(self, path: str, default: _T=..., namespaces: Dict[str, str]=...) -> Union[_T, str]: ...
|
||||
def get(self, key: AnyStr, default: _T=...) -> Union[AnyStr, _T]: ...
|
||||
def getchildren(self) -> List[Element]: ...
|
||||
def getiterator(self, tag: Union[str, AnyStr]=...) -> List[Element]: ...
|
||||
def insert(self, index: int, subelement: Element) -> None: ...
|
||||
def items(self) -> ItemsView[AnyStr, AnyStr]: ...
|
||||
def iter(self, tag: Union[str, AnyStr]=...) -> Generator[Element, None, None]: ...
|
||||
def iterfind(self, path: str, namespaces: Dict[str, str]=...) -> List[Element]: ...
|
||||
def itertext(self) -> Generator[str, None, None]: ...
|
||||
def keys(self) -> KeysView[AnyStr]: ...
|
||||
def makeelement(self, tag: _Ss, attrib: Dict[_Ss, _Ss]) -> Element: ...
|
||||
def remove(self, subelement: Element) -> None: ...
|
||||
def set(self, key: AnyStr, value: AnyStr) -> None: ...
|
||||
def __bool__(self) -> bool: ...
|
||||
def __delitem__(self, index: int) -> None: ...
|
||||
def __getitem__(self, index) -> Element: ...
|
||||
def __len__(self) -> int: ...
|
||||
def __setitem__(self, index: int, element: Element) -> None: ...
|
||||
|
||||
def SubElement(parent: Element, tag: AnyStr, attrib: Dict[AnyStr, AnyStr]=..., **extra: Dict[str, AnyStr]) -> Element: ...
|
||||
def Comment(text: _str_or_bytes=...) -> Element: ...
|
||||
def ProcessingInstruction(target: str, text: str=...) -> Element: ...
|
||||
|
||||
PI = ... # type: Callable[..., Element]
|
||||
|
||||
class QName:
|
||||
text = ... # type: str
|
||||
def __init__(self, text_or_uri: str, tag: str=...) -> None: ...
|
||||
|
||||
|
||||
_file_or_filename = Union[str, bytes, int, IO[Any]]
|
||||
|
||||
class ElementTree:
|
||||
def __init__(self, element: Element=..., file: _file_or_filename=...) -> None: ...
|
||||
def getroot(self) -> Element: ...
|
||||
def parse(self, source: _file_or_filename, parser: XMLParser=...) -> Element: ...
|
||||
def iter(self, tag: Union[str, AnyStr]=...) -> Generator[Element, None, None]: ...
|
||||
def getiterator(self, tag: Union[str, AnyStr]=...) -> List[Element]: ...
|
||||
def find(self, path: str, namespaces: Dict[str, str]=...) -> Optional[Element]: ...
|
||||
def findtext(self, path: str, default: _T=..., namespaces: Dict[str, str]=...) -> Union[_T, str]: ...
|
||||
def findall(self, path: str, namespaces: Dict[str, str]=...) -> List[Element]: ...
|
||||
def iterfind(self, path: str, namespaces: Dict[str, str]=...) -> List[Element]: ...
|
||||
def write(self, file_or_filename: _file_or_filename, encoding: str=..., xml_declaration: Optional[bool]=..., default_namespace: str=..., method: str=...) -> None: ...
|
||||
def write_c14n(self, file: _file_or_filename) -> None: ...
|
||||
|
||||
def register_namespace(prefix: str, uri: str) -> None: ...
|
||||
def tostring(element: Element, encoding: str=..., method: str=...) -> str: ...
|
||||
|
||||
def tostringlist(element: Element, encoding: str=..., method: str=...) -> List[str]: ...
|
||||
def dump(elem: Element) -> None: ...
|
||||
def parse(source: _file_or_filename, parser: XMLParser=...) -> ElementTree: ...
|
||||
def iterparse(source: _file_or_filename, events: Sequence[str]=..., parser: XMLParser=...) -> Iterator[Tuple[str, Element]]: ...
|
||||
|
||||
|
||||
class _IterParseIterator:
|
||||
root = ... # type: Any
|
||||
def __init__(self, source: _file_or_filename, events: Sequence[str], parser: XMLParser, close_source: bool=...) -> None: ...
|
||||
def __next__(self) -> Tuple[str, Element]: ...
|
||||
def __iter__(self) -> _IterParseIterator: ...
|
||||
|
||||
def XML(text: AnyStr, parser: XMLParser=...) -> Element: ...
|
||||
def XMLID(text: AnyStr, parser: XMLParser=...) -> Tuple[Element, Dict[str, Element]]: ...
|
||||
|
||||
# TODO-improve this type
|
||||
fromstring = ... # type: Callable[..., Element]
|
||||
|
||||
def fromstringlist(sequence: Sequence[AnyStr], parser: XMLParser=...) -> Element: ...
|
||||
|
||||
class TreeBuilder:
|
||||
def __init__(self, element_factory: Callable[[AnyStr, Dict[AnyStr, AnyStr]], Element]=...) -> None: ...
|
||||
def close(self) -> Element: ...
|
||||
def data(self, data: AnyStr) -> None: ...
|
||||
def start(self, tag: AnyStr, attrs: Dict[AnyStr, AnyStr]) -> Element: ...
|
||||
def end(self, tag: AnyStr) -> Element: ...
|
||||
|
||||
class XMLParser:
|
||||
parser = ... # type: Any
|
||||
target = ... # type: TreeBuilder
|
||||
# TODO-what is entity used for???
|
||||
entity = ... # type: Any
|
||||
version = ... # type: str
|
||||
def __init__(self, html: int=..., target: TreeBuilder=..., encoding: str=...) -> None: ...
|
||||
def doctype(self, name: str, pubid: str, system: str) -> None: ...
|
||||
def close(self) -> Any: ... # TODO-most of the time, this will be Element, but it can be anything target.close() returns
|
||||
def feed(self, data: AnyStr)-> None: ...
|
||||
0
stdlib/3.2/xml/etree/__init__.pyi
Normal file
0
stdlib/3.2/xml/etree/__init__.pyi
Normal file
5
stdlib/3.2/xml/etree/cElementTree.pyi
Normal file
5
stdlib/3.2/xml/etree/cElementTree.pyi
Normal file
@@ -0,0 +1,5 @@
|
||||
# Stubs for xml.etree.cElementTree (Python 3.4)
|
||||
#
|
||||
# NOTE: This dynamically typed stub was automatically generated by stubgen.
|
||||
|
||||
from xml.etree.ElementTree import *
|
||||
19
stdlib/3.3/xml/etree/ElementInclude.pyi
Normal file
19
stdlib/3.3/xml/etree/ElementInclude.pyi
Normal file
@@ -0,0 +1,19 @@
|
||||
# Stubs for xml.etree.ElementInclude (Python 3.4)
|
||||
#
|
||||
# NOTE: This dynamically typed stub was automatically generated by stubgen.
|
||||
|
||||
from typing import Union, Optional, Callable
|
||||
from .ElementTree import Element
|
||||
|
||||
XINCLUDE = ... # type: str
|
||||
XINCLUDE_INCLUDE = ... # type: str
|
||||
XINCLUDE_FALLBACK = ... # type: str
|
||||
|
||||
class FatalIncludeError(SyntaxError): ...
|
||||
|
||||
def default_loader(href: Union[str, bytes, int], parse: str, encoding: Optional[str]=...) -> Union[str, Element]: ...
|
||||
|
||||
# TODO: loader is of type default_loader ie it takes a callable that has the
|
||||
# same signature as default_loader. But default_loader has a keyword argument
|
||||
# Which can't be represented using Callable...
|
||||
def include(elem: Element, loader: Callable[..., Union[str, Element]]=...) -> None: ...
|
||||
35
stdlib/3.3/xml/etree/ElementPath.pyi
Normal file
35
stdlib/3.3/xml/etree/ElementPath.pyi
Normal file
@@ -0,0 +1,35 @@
|
||||
# Stubs for xml.etree.ElementPath (Python 3.4)
|
||||
#
|
||||
# NOTE: This dynamically typed stub was automatically generated by stubgen.
|
||||
|
||||
from typing import Pattern, Dict, Generator, Tuple, List, Union, TypeVar, Callable, Optional
|
||||
from .ElementTree import Element
|
||||
|
||||
xpath_tokenizer_re = ... # type: Pattern
|
||||
|
||||
_token = Tuple[str, str]
|
||||
_next = Callable[[], _token]
|
||||
_callback = Callable[[_SelectorContext, List[Element]], Generator[Element, None, None]]
|
||||
|
||||
def xpath_tokenizer(pattern: str, namespaces: Dict[str, str]=...) -> Generator[_token, None, None]: ...
|
||||
def get_parent_map(context: _SelectorContext) -> Dict[Element, Element]: ...
|
||||
def prepare_child(next: _next, token: _token) -> _callback: ...
|
||||
def prepare_star(next: _next, token: _token) -> _callback: ...
|
||||
def prepare_self(next: _next, token: _token) -> _callback: ...
|
||||
def prepare_descendant(next: _next, token: _token) -> _callback: ...
|
||||
def prepare_parent(next: _next, token: _token) -> _callback: ...
|
||||
def prepare_predicate(next: _next, token: _token) -> _callback: ...
|
||||
|
||||
ops = ... # type: Dict[str, Callable[[_next, _token], _callback]]
|
||||
|
||||
class _SelectorContext:
|
||||
parent_map = ... # type: Dict[Element, Element]
|
||||
root = ... # type: Element
|
||||
def __init__(self, root: Element) -> None: ...
|
||||
|
||||
_T = TypeVar('_T')
|
||||
|
||||
def iterfind(elem: Element, path: str, namespaces: Dict[str, str]=...) -> List[Element]: ...
|
||||
def find(elem: Element, path: str, namespaces: Dict[str, str]=...) -> Optional[Element]: ...
|
||||
def findall(elem: Element, path: str, namespaces: Dict[str, str]=...) -> List[Element]: ...
|
||||
def findtext(elem: Element, path: str, default: _T=..., namespaces: Dict[str, str]=...) -> Union[_T, str]: ...
|
||||
122
stdlib/3.3/xml/etree/ElementTree.pyi
Normal file
122
stdlib/3.3/xml/etree/ElementTree.pyi
Normal file
@@ -0,0 +1,122 @@
|
||||
# Stubs for xml.etree.ElementTree (Python 3.4)
|
||||
#
|
||||
# NOTE: This dynamically typed stub was automatically generated by stubgen.
|
||||
|
||||
from typing import Any, AnyStr, Union, IO, Callable, Dict, List, Tuple, Sequence, Iterator, TypeVar, Optional, KeysView, ItemsView, Generator
|
||||
import io
|
||||
|
||||
VERSION = ... # type: str
|
||||
|
||||
class ParseError(SyntaxError): ...
|
||||
|
||||
def iselement(element: Element) -> bool: ...
|
||||
|
||||
_Ss = TypeVar('_Ss', str, bytes)
|
||||
_T = TypeVar('_T')
|
||||
_str_or_bytes = Union[str, bytes]
|
||||
|
||||
class Element:
|
||||
tag = ... # type: _str_or_bytes
|
||||
attrib = ... # type: Dict[_str_or_bytes, _str_or_bytes]
|
||||
text = ... # type: Optional[_str_or_bytes]
|
||||
tail = ... # type: Optional[_str_or_bytes]
|
||||
def __init__(self, tag: Union[AnyStr, Callable[..., Element]], attrib: Dict[AnyStr, AnyStr]=..., **extra: Dict[str, AnyStr]) -> None: ...
|
||||
def append(self, subelement: Element) -> None: ...
|
||||
def clear(self) -> None: ...
|
||||
def copy(self) -> Element: ...
|
||||
def extend(self, elements: Sequence[Element]) -> None: ...
|
||||
def find(self, path: str, namespaces: Dict[str, str]=...) -> Optional[Element]: ...
|
||||
def findall(self, path: str, namespaces: Dict[str, str]=...) -> List[Element]: ...
|
||||
def findtext(self, path: str, default: _T=..., namespaces: Dict[str, str]=...) -> Union[_T, str]: ...
|
||||
def get(self, key: AnyStr, default: _T=...) -> Union[AnyStr, _T]: ...
|
||||
def getchildren(self) -> List[Element]: ...
|
||||
def getiterator(self, tag: Union[str, AnyStr]=...) -> List[Element]: ...
|
||||
def insert(self, index: int, subelement: Element) -> None: ...
|
||||
def items(self) -> ItemsView[AnyStr, AnyStr]: ...
|
||||
def iter(self, tag: Union[str, AnyStr]=...) -> Generator[Element, None, None]: ...
|
||||
def iterfind(self, path: str, namespaces: Dict[str, str]=...) -> List[Element]: ...
|
||||
def itertext(self) -> Generator[str, None, None]: ...
|
||||
def keys(self) -> KeysView[AnyStr]: ...
|
||||
def makeelement(self, tag: _Ss, attrib: Dict[_Ss, _Ss]) -> Element: ...
|
||||
def remove(self, subelement: Element) -> None: ...
|
||||
def set(self, key: AnyStr, value: AnyStr) -> None: ...
|
||||
def __bool__(self) -> bool: ...
|
||||
def __delitem__(self, index: int) -> None: ...
|
||||
def __getitem__(self, index) -> Element: ...
|
||||
def __len__(self) -> int: ...
|
||||
def __setitem__(self, index: int, element: Element) -> None: ...
|
||||
|
||||
def SubElement(parent: Element, tag: AnyStr, attrib: Dict[AnyStr, AnyStr]=..., **extra: Dict[str, AnyStr]) -> Element: ...
|
||||
def Comment(text: _str_or_bytes=...) -> Element: ...
|
||||
def ProcessingInstruction(target: str, text: str=...) -> Element: ...
|
||||
|
||||
PI = ... # type: Callable[..., Element]
|
||||
|
||||
class QName:
|
||||
text = ... # type: str
|
||||
def __init__(self, text_or_uri: str, tag: str=...) -> None: ...
|
||||
|
||||
|
||||
_file_or_filename = Union[str, bytes, int, IO[Any]]
|
||||
|
||||
class ElementTree:
|
||||
def __init__(self, element: Element=..., file: _file_or_filename=...) -> None: ...
|
||||
def getroot(self) -> Element: ...
|
||||
def parse(self, source: _file_or_filename, parser: XMLParser=...) -> Element: ...
|
||||
def iter(self, tag: Union[str, AnyStr]=...) -> Generator[Element, None, None]: ...
|
||||
def getiterator(self, tag: Union[str, AnyStr]=...) -> List[Element]: ...
|
||||
def find(self, path: str, namespaces: Dict[str, str]=...) -> Optional[Element]: ...
|
||||
def findtext(self, path: str, default: _T=..., namespaces: Dict[str, str]=...) -> Union[_T, str]: ...
|
||||
def findall(self, path: str, namespaces: Dict[str, str]=...) -> List[Element]: ...
|
||||
def iterfind(self, path: str, namespaces: Dict[str, str]=...) -> List[Element]: ...
|
||||
def write(self, file_or_filename: _file_or_filename, encoding: str=..., xml_declaration: Optional[bool]=..., default_namespace: str=..., method: str=...) -> None: ...
|
||||
def write_c14n(self, file: _file_or_filename) -> None: ...
|
||||
|
||||
def register_namespace(prefix: str, uri: str) -> None: ...
|
||||
def tostring(element: Element, encoding: str=..., method: str=...) -> str: ...
|
||||
|
||||
class _ListDataStream(io.BufferedIOBase):
|
||||
lst = ... # type: List[str]
|
||||
def __init__(self, lst) -> None: ...
|
||||
def writable(self) -> bool: ...
|
||||
def seekable(self) -> bool: ...
|
||||
def write(self, b: str) -> None: ...
|
||||
def tell(self) -> int: ...
|
||||
|
||||
def tostringlist(element: Element, encoding: str=..., method: str=...) -> List[str]: ...
|
||||
def dump(elem: Element) -> None: ...
|
||||
def parse(source: _file_or_filename, parser: XMLParser=...) -> ElementTree: ...
|
||||
def iterparse(source: _file_or_filename, events: Sequence[str]=..., parser: XMLParser=...) -> Iterator[Tuple[str, Element]]: ...
|
||||
|
||||
|
||||
class _IterParseIterator:
|
||||
root = ... # type: Any
|
||||
def __init__(self, source: _file_or_filename, events: Sequence[str], parser: XMLParser, close_source: bool=...) -> None: ...
|
||||
def __next__(self) -> Tuple[str, Element]: ...
|
||||
def __iter__(self) -> _IterParseIterator: ...
|
||||
|
||||
def XML(text: AnyStr, parser: XMLParser=...) -> Element: ...
|
||||
def XMLID(text: AnyStr, parser: XMLParser=...) -> Tuple[Element, Dict[str, Element]]: ...
|
||||
|
||||
# TODO-improve this type
|
||||
fromstring = ... # type: Callable[..., Element]
|
||||
|
||||
def fromstringlist(sequence: Sequence[AnyStr], parser: XMLParser=...) -> Element: ...
|
||||
|
||||
class TreeBuilder:
|
||||
def __init__(self, element_factory: Callable[[AnyStr, Dict[AnyStr, AnyStr]], Element]=...) -> None: ...
|
||||
def close(self) -> Element: ...
|
||||
def data(self, data: AnyStr) -> None: ...
|
||||
def start(self, tag: AnyStr, attrs: Dict[AnyStr, AnyStr]) -> Element: ...
|
||||
def end(self, tag: AnyStr) -> Element: ...
|
||||
|
||||
class XMLParser:
|
||||
parser = ... # type: Any
|
||||
target = ... # type: TreeBuilder
|
||||
# TODO-what is entity used for???
|
||||
entity = ... # type: Any
|
||||
version = ... # type: str
|
||||
def __init__(self, html: int=..., target: TreeBuilder=..., encoding: str=...) -> None: ...
|
||||
def doctype(self, name: str, pubid: str, system: str) -> None: ...
|
||||
def close(self) -> Any: ... # TODO-most of the time, this will be Element, but it can be anything target.close() returns
|
||||
def feed(self, data: AnyStr)-> None: ...
|
||||
0
stdlib/3.3/xml/etree/__init__.pyi
Normal file
0
stdlib/3.3/xml/etree/__init__.pyi
Normal file
5
stdlib/3.3/xml/etree/cElementTree.pyi
Normal file
5
stdlib/3.3/xml/etree/cElementTree.pyi
Normal file
@@ -0,0 +1,5 @@
|
||||
# Stubs for xml.etree.cElementTree (Python 3.4)
|
||||
#
|
||||
# NOTE: This dynamically typed stub was automatically generated by stubgen.
|
||||
|
||||
from xml.etree.ElementTree import *
|
||||
Reference in New Issue
Block a user