From 9e814cf8210e22ac98adddf429a71290e4601324 Mon Sep 17 00:00:00 2001 From: oyunsky Date: Wed, 25 Sep 2024 03:48:14 +0700 Subject: [PATCH 1/2] test: added ignore_errors decorator --- tests/utils/test_unity_proxy_class.py | 54 +++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 tests/utils/test_unity_proxy_class.py diff --git a/tests/utils/test_unity_proxy_class.py b/tests/utils/test_unity_proxy_class.py new file mode 100644 index 0000000..b899b78 --- /dev/null +++ b/tests/utils/test_unity_proxy_class.py @@ -0,0 +1,54 @@ +import pytest + +from unityproxy.utils.unity import UnityProxy +from unityproxy.exceptions import invalid_params as exceptions + + +@pytest.mark.parametrize("line", + ( + "{login}:{password}@{ip}:{port}", + "{login}:{password}:{ip}:{port}", + "{ip}:{port}@{login}:{password}", + "{ip}:{port}:{login}:{password}", + "{ip};{port};{login};{password}", + "{login};{password};{ip};{port}", + "{ip}@{port}@{login}@{password}", + ) +) +def test_ignore_errors_true(line: str): + ip = "invalid" + port = 8080 + login = "login" + password = "password" + created_line = line.format(login=login, password=password, ip=ip, port=port) + + unity = UnityProxy(ignore_parse_errors=True) + unity.add_by_line(created_line, "socks5") + + assert (len(unity._UnityProxy__proxies) == 0) + + +@pytest.mark.parametrize("line", + ( + "{login}:{password}@{ip}:{port}", + "{login}:{password}:{ip}:{port}", + "{ip}:{port}@{login}:{password}", + "{ip}:{port}:{login}:{password}", + "{ip};{port};{login};{password}", + "{login};{password};{ip};{port}", + "{ip}@{port}@{login}@{password}", + ) +) +def test_ignore_errors_false(line: str): + ip = "invalid" + port = 8080 + login = "login" + password = "password" + created_line = line.format(login=login, password=password, ip=ip, port=port) + + unity = UnityProxy(ignore_parse_errors=False) + + with pytest.raises(exceptions.CanNotParseProxy): + unity.add_by_line(created_line, "socks5") + + assert (len(unity._UnityProxy__proxies) == 0) From 20c67cfaeca583a6031c35ee4ac1f2d56fdea1a8 Mon Sep 17 00:00:00 2001 From: oyunsky Date: Wed, 25 Sep 2024 03:48:36 +0700 Subject: [PATCH 2/2] feat: added ignore_errors decorator --- unityproxy/utils/unity.py | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/unityproxy/utils/unity.py b/unityproxy/utils/unity.py index 6d4a016..9aaa7d4 100644 --- a/unityproxy/utils/unity.py +++ b/unityproxy/utils/unity.py @@ -4,6 +4,7 @@ from io import TextIOWrapper from copy import deepcopy from typing import List, Union, Callable +from functools import wraps from .proxy import Proxy from ..types import PROXY_TYPEHINT @@ -26,23 +27,25 @@ def __init__(self, ignore_parse_errors: bool = True, custom_parser: Callable=Non self.from_ = UnityAddFrom(self) self.to = UnityConvertTo(self) + def ignore_errors(method): + @wraps(method) + def wrapper(self, *args, **kwargs): + if self.__ignore_err: + try: + return method(self, *args, **kwargs) + except Exception as err: + print(f"ignored error in {method.__name__}: {err}") + else: + return method(self, *args, **kwargs) + return wrapper + + @ignore_errors def add_by_line(self, line: str, proxy_type: PROXY_TYPEHINT): - if self.__ignore_err: - try: - self.__proxies.append(Proxy.from_line(line, proxy_type, self.__custom_parser)) - except:... - else: - self.__proxies.append(Proxy.from_line(line, proxy_type, self.__custom_parser)) + self.__proxies.append(Proxy.from_line(line, proxy_type, self.__custom_parser)) + @ignore_errors def add_by_values(self, ip: str, port: int, type_: PROXY_TYPEHINT, login: str=None, password: str=None): - #TODO mb create decorator - if self.__ignore_err: - try: - self.__proxies.append(Proxy(ip=ip, port=port, type_=type_, login=login, password=password)) - except: ... - else: - self.__proxies.append(Proxy(ip=ip, port=port, type_=type_, login=login, password=password)) - + self.__proxies.append(Proxy(ip=ip, port=port, type_=type_, login=login, password=password)) def remove(self, proxy: Proxy): self.__proxies.remove(proxy) @@ -119,4 +122,4 @@ def queue(self) -> Queue[Proxy]: q = Queue() for proxy in self.__obj: q.put(deepcopy(proxy)) - return q \ No newline at end of file + return q