From 2f8f04276512f1dafdb28da33b27db8658ed488d Mon Sep 17 00:00:00 2001 From: "duanchao.bill" Date: Wed, 27 Apr 2022 17:37:14 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E4=BF=AE=E6=94=B9SqlResponseObject?= =?UTF-8?q?=E7=BB=A7=E6=89=BF=E5=85=B3=E7=B3=BB=EF=BC=9B=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?thriftpy2=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- httprunner/compat_test.py | 3 +- httprunner/loader_test.py | 6 ++- httprunner/make.py | 3 +- httprunner/make_test.py | 22 ++++++++--- httprunner/models.py | 4 +- httprunner/parser.py | 4 +- httprunner/response.py | 43 +++++++++++---------- httprunner/response_test.py | 5 ++- httprunner/step_request.py | 8 +++- httprunner/step_sql_request.py | 17 ++++----- httprunner/step_thrift_request.py | 24 +++++++----- httprunner/thrift/data_convertor.py | 16 +++----- poetry.lock | 58 ++++++++++++++++++++++++++++- pyproject.toml | 1 + 14 files changed, 150 insertions(+), 64 deletions(-) diff --git a/httprunner/compat_test.py b/httprunner/compat_test.py index 064d3813..391133a1 100644 --- a/httprunner/compat_test.py +++ b/httprunner/compat_test.py @@ -43,7 +43,8 @@ class TestCompat(unittest.TestCase): "body.data.buildings[0].building_id", ) self.assertEqual( - compat._convert_jmespath("body.users[-1]"), "body.users[-1]", + compat._convert_jmespath("body.users[-1]"), + "body.users[-1]", ) self.assertEqual( compat._convert_jmespath("body.result.WorkNode_-1"), diff --git a/httprunner/loader_test.py b/httprunner/loader_test.py index 95449f43..7b09d87b 100644 --- a/httprunner/loader_test.py +++ b/httprunner/loader_test.py @@ -97,7 +97,11 @@ class TestLoader(unittest.TestCase): ) def test_load_env_path_not_exist(self): - dot_env_path = os.path.join(os.getcwd(), "tests", "data",) + dot_env_path = os.path.join( + os.getcwd(), + "tests", + "data", + ) env_variables_mapping = loader.load_dot_env_file(dot_env_path) self.assertEqual(env_variables_mapping, {}) diff --git a/httprunner/make.py b/httprunner/make.py index c16dbc43..c2b3d3b2 100644 --- a/httprunner/make.py +++ b/httprunner/make.py @@ -534,7 +534,8 @@ def main_make(tests_paths: List[Text]) -> List[Text]: def init_make_parser(subparsers): """make testcases: parse command line options and run commands.""" parser = subparsers.add_parser( - "make", help="Convert YAML/JSON testcases to pytest cases.", + "make", + help="Convert YAML/JSON testcases to pytest cases.", ) parser.add_argument( "testcase_path", nargs="*", help="Specify YAML/JSON testcase file/folder path" diff --git a/httprunner/make_test.py b/httprunner/make_test.py index 9e4b3bc7..f3a80325 100644 --- a/httprunner/make_test.py +++ b/httprunner/make_test.py @@ -73,7 +73,8 @@ from request_methods.request_with_functions_test import ( content, ) self.assertIn( - ".call(RequestWithFunctions)", content, + ".call(RequestWithFunctions)", + content, ) def test_make_testcase_folder(self): @@ -111,7 +112,8 @@ from request_methods.request_with_functions_test import ( ) loader.project_meta = None self.assertEqual( - ensure_file_abs_path_valid(os.getcwd()), os.getcwd(), + ensure_file_abs_path_valid(os.getcwd()), + os.getcwd(), ) loader.project_meta = None self.assertEqual( @@ -122,11 +124,17 @@ from request_methods.request_with_functions_test import ( def test_convert_testcase_path(self): self.assertEqual( convert_testcase_path(os.path.join(self.data_dir, "a-b.c", "2 3.yml")), - (os.path.join(self.data_dir, "a_b_c", "T2_3_test.py"), "T23",), + ( + os.path.join(self.data_dir, "a_b_c", "T2_3_test.py"), + "T23", + ), ) self.assertEqual( convert_testcase_path(os.path.join(self.data_dir, "a-b.c", "中文case.yml")), - (os.path.join(self.data_dir, "a_b_c", "中文case_test.py"), "中文Case",), + ( + os.path.join(self.data_dir, "a_b_c", "中文case_test.py"), + "中文Case", + ), ) def test_make_config_chain_style(self): @@ -145,7 +153,11 @@ from request_methods.request_with_functions_test import ( def test_make_teststep_chain_style(self): step = { "name": "get with params", - "variables": {"foo1": "bar1", "foo2": 123, "sum_v": "${sum_two(1, 2)}",}, + "variables": { + "foo1": "bar1", + "foo2": 123, + "sum_v": "${sum_two(1, 2)}", + }, "request": { "method": "GET", "url": "/get", diff --git a/httprunner/models.py b/httprunner/models.py index 689d57d0..487371fe 100644 --- a/httprunner/models.py +++ b/httprunner/models.py @@ -76,7 +76,7 @@ class TransportEnum(Text, Enum): class TThriftRequest(BaseModel): - """ rpc request model""" + """rpc request model""" method: Text = "" params: Dict = {} @@ -106,7 +106,7 @@ class SqlMethodEnum(Text, Enum): class TSqlRequest(BaseModel): - """ sql request model""" + """sql request model""" db_config: TConfigDB = TConfigDB() method: SqlMethodEnum = None diff --git a/httprunner/parser.py b/httprunner/parser.py index 047847dd..e1adb7be 100644 --- a/httprunner/parser.py +++ b/httprunner/parser.py @@ -476,7 +476,9 @@ def parse_variables_mapping( return parsed_variables -def parse_parameters(parameters: Dict,) -> List[Dict]: +def parse_parameters( + parameters: Dict, +) -> List[Dict]: """parse parameters and generate cartesian product. Args: diff --git a/httprunner/response.py b/httprunner/response.py index 5d654654..730a7bf5 100644 --- a/httprunner/response.py +++ b/httprunner/response.py @@ -11,7 +11,7 @@ from httprunner.parser import parse_string_value, Parser def get_uniform_comparator(comparator: Text): - """ convert comparator alias to uniform name""" + """convert comparator alias to uniform name""" if comparator in ["eq", "equals", "equal"]: return "equal" elif comparator in ["lt", "less_than"]: @@ -114,7 +114,7 @@ def uniform_validator(validator): class ResponseObjectBase(object): def __init__(self, resp_obj, parser: Parser): - """ initialize with a response object + """initialize with a response object Args: resp_obj (instance): requests.Response instance @@ -125,7 +125,9 @@ class ResponseObjectBase(object): self.validation_results: Dict = {} def extract( - self, extractors: Dict[Text, Text], variables_mapping: VariablesMapping = None, + self, + extractors: Dict[Text, Text], + variables_mapping: VariablesMapping = None, ) -> Dict[Text, Any]: if not extractors: return {} @@ -142,10 +144,22 @@ class ResponseObjectBase(object): return extract_mapping def _search_jmespath(self, expr: Text) -> Any: - raise NotImplementedError("_search_jmespath not override") + try: + check_value = jmespath.search(expr, self.resp_obj) + except JMESPathError as ex: + logger.error( + f"failed to search with jmespath\n" + f"expression: {expr}\n" + f"data: {self.resp_obj}\n" + f"exception: {ex}" + ) + raise + return check_value def validate( - self, validators: Validators, variables_mapping: VariablesMapping = None, + self, + validators: Validators, + variables_mapping: VariablesMapping = None, ): variables_mapping = variables_mapping or {} @@ -277,19 +291,8 @@ class ResponseObject(ResponseObjectBase): class ThriftResponseObject(ResponseObjectBase): - def _search_jmespath(self, expr: Text) -> Any: - try: - check_value = jmespath.search(expr, self.resp_obj) - except JMESPathError as ex: - logger.error( - f"failed to search with jmespath\n" - f"expression: {expr}\n" - f"data: {self.resp_obj}\n" - f"exception: {ex}" - ) - raise - return check_value - - -class SqlResponseObject(ThriftResponseObject): + pass + + +class SqlResponseObject(ResponseObjectBase): pass diff --git a/httprunner/response_test.py b/httprunner/response_test.py index 4bf61dac..7ab7a6fb 100644 --- a/httprunner/response_test.py +++ b/httprunner/response_test.py @@ -61,6 +61,9 @@ class TestResponse(unittest.TestCase): def test_validate_functions(self): variables_mapping = {"index": 1} self.resp_obj.validate( - [{"eq": ["${get_num(0)}", 0]}, {"eq": ["${get_num($index)}", 1]},], + [ + {"eq": ["${get_num(0)}", 0]}, + {"eq": ["${get_num($index)}", 1]}, + ], variables_mapping=variables_mapping, ) diff --git a/httprunner/step_request.py b/httprunner/step_request.py index bbb6fa2b..9299cba2 100644 --- a/httprunner/step_request.py +++ b/httprunner/step_request.py @@ -67,7 +67,10 @@ def call_hooks( def run_step_request(runner: HttpRunner, step: TStep) -> StepResult: """run teststep: request""" - step_result = StepResult(name=step.name, success=False,) + step_result = StepResult( + name=step.name, + success=False, + ) start_time = time.time() step.variables = runner.merge_step_variables(step.variables) @@ -79,7 +82,8 @@ def run_step_request(runner: HttpRunner, step: TStep) -> StepResult: request_dict.pop("upload", None) parsed_request_dict = runner.parser.parse_data(request_dict, step.variables) parsed_request_dict["headers"].setdefault( - "HRUN-Request-ID", f"HRUN-{runner.case_id}-{str(int(time.time() * 1000))[-6:]}", + "HRUN-Request-ID", + f"HRUN-{runner.case_id}-{str(int(time.time() * 1000))[-6:]}", ) step.variables["request"] = parsed_request_dict diff --git a/httprunner/step_sql_request.py b/httprunner/step_sql_request.py index dd7b98cb..7851a3be 100644 --- a/httprunner/step_sql_request.py +++ b/httprunner/step_sql_request.py @@ -23,7 +23,10 @@ def run_step_sql_request(runner: HttpRunner, step: TStep) -> StepResult: """run teststep:sql request""" start_time = time.time() - step_result = StepResult(name=step.name, success=False,) + step_result = StepResult( + name=step.name, + success=False, + ) step.variables = runner.merge_step_variables(step.variables) # parse request_dict = step.sql_request.dict() @@ -48,11 +51,7 @@ def run_step_sql_request(runner: HttpRunner, step: TStep) -> StepResult: parsed_request_dict["db_config"]["database"] or config.db.database ) - if parsed_request_dict["db_config"]["psm"]: - runner.db_engine = DBEngine( - f'mysql+pymysql://:@/?charset=utf8mb4&db_psm={parsed_request_dict["psm"]}' - ) - else: + if not runner.db_engine: runner.db_engine = DBEngine( f'mysql+pymysql://{parsed_request_dict["db_config"]["user"]}:' f'{parsed_request_dict["db_config"]["password"]}@{parsed_request_dict["db_config"]["ip"]}:' @@ -171,10 +170,8 @@ class RunSqlRequest(IStep): return self def with_db_config( - self, psm=None, user=None, password=None, ip=None, port=None, database=None + self, user=None, password=None, ip=None, port=None, database=None, psm=None ): - if psm: - self.__step.sql_request.db_config.psm = psm if user: self.__step.sql_request.db_config.user = user if password: @@ -185,6 +182,8 @@ class RunSqlRequest(IStep): self.__step.sql_request.db_config.port = port if database: self.__step.sql_request.db_config.database = database + if psm: + self.__step.sql_request.db_config.psm = psm return self def fetchone(self, sql) -> "RunSqlRequest": diff --git a/httprunner/step_thrift_request.py b/httprunner/step_thrift_request.py index 55bf02ec..fe569032 100644 --- a/httprunner/step_thrift_request.py +++ b/httprunner/step_thrift_request.py @@ -22,7 +22,10 @@ def run_step_thrift_request(runner: HttpRunner, step: TStep) -> StepResult: """run teststep:thrift request""" start_time = time.time() - step_result = StepResult(name=step.name, success=False,) + step_result = StepResult( + name=step.name, + success=False, + ) step.variables = runner.merge_step_variables(step.variables) # parse request_dict = step.thrift_request.dict() @@ -65,17 +68,18 @@ def run_step_thrift_request(runner: HttpRunner, step: TStep) -> StepResult: step.variables["thrift_request"] = parsed_request_dict psm = parsed_request_dict["psm"] - - runner.thrift_client = parsed_request_dict["thrift_client"] + if not runner.thrift_client: + runner.thrift_client = parsed_request_dict["thrift_client"] if not runner.thrift_client: runner.thrift_client = ThriftClient( - parsed_request_dict["idl_path"], - parsed_request_dict["service_name"], - parsed_request_dict["ip"], - parsed_request_dict["port"], - parsed_request_dict["timeout"], - parsed_request_dict["proto_type"], - parsed_request_dict["trans_port"], + thrift_file=parsed_request_dict["idl_path"], + service_name=parsed_request_dict["service_name"], + ip=parsed_request_dict["ip"], + port=parsed_request_dict["port"], + include_dirs=parsed_request_dict["include_dirs"], + timeout=parsed_request_dict["timeout"], + proto_type=parsed_request_dict["proto_type"], + trans_type=parsed_request_dict["trans_port"], ) # setup hooks diff --git a/httprunner/thrift/data_convertor.py b/httprunner/thrift/data_convertor.py index c25e034b..45514926 100644 --- a/httprunner/thrift/data_convertor.py +++ b/httprunner/thrift/data_convertor.py @@ -78,9 +78,7 @@ def unicode_2_utf8_keep_native(para): def encode_basestring(s): - """Return a JSON representation of a Python string - - """ + """Return a JSON representation of a Python string""" def replace(match): return ESCAPE_DCT[match.group(0)] @@ -89,9 +87,7 @@ def encode_basestring(s): def py_encode_basestring_ascii(s): - """Return an ASCII-only JSON representation of a Python string - - """ + """Return an ASCII-only JSON representation of a Python string""" if isinstance(s, str) and HAS_UTF8.search(s) is not None: s = s.decode("utf-8") @@ -289,10 +285,10 @@ class MyJSONEncoder(json.JSONEncoder): def encode(self, o): """Return a JSON string representation of a Python data structure. - JSONEncoder().encode({"foo": ["bar", "baz"]}) - '{"foo": ["bar", "baz"]}' + JSONEncoder().encode({"foo": ["bar", "baz"]}) + '{"foo": ["bar", "baz"]}' - """ + """ # This is for extremely simple cases and benchmarks. if isinstance(o, str): @@ -363,7 +359,7 @@ class ThriftJSONEncoder(json.JSONEncoder): JSONEncoder().encode({"foo": ["bar", "baz"]}) '{"foo": ["bar", "baz"]}' - """ + """ # This is for extremely simple cases and benchmarks. if isinstance(o, str): diff --git a/poetry.lock b/poetry.lock index 41ec159b..d43d7ad6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -384,6 +384,19 @@ type = "legacy" url = "https://pypi.tuna.tsinghua.edu.cn/simple" reference = "tsinghua" +[[package]] +name = "ply" +version = "3.11" +description = "Python Lex & Yacc" +category = "main" +optional = false +python-versions = "*" + +[package.source] +type = "legacy" +url = "https://pypi.tuna.tsinghua.edu.cn/simple" +reference = "tsinghua" + [[package]] name = "py" version = "1.11.0" @@ -589,6 +602,26 @@ type = "legacy" url = "https://pypi.tuna.tsinghua.edu.cn/simple" reference = "tsinghua" +[[package]] +name = "thriftpy2" +version = "0.4.14" +description = "Pure python implementation of Apache Thrift." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[package.dependencies] +ply = ">=3.4,<4.0" + +[package.extras] +dev = ["cython (>=0.28.4)", "flake8 (>=2.5)", "pytest (>=2.8)", "sphinx-rtd-theme (>=0.1.9)", "sphinx (>=1.3)", "tornado (>=4.0,<6.0)"] +tornado = ["tornado (>=4.0,<6.0)"] + +[package.source] +type = "legacy" +url = "https://pypi.tuna.tsinghua.edu.cn/simple" +reference = "tsinghua" + [[package]] name = "toml" version = "0.10.2" @@ -699,7 +732,7 @@ upload = ["requests-toolbelt", "filetype"] [metadata] lock-version = "1.1" python-versions = "^3.7" -content-hash = "8dc444117b1b9a55f00d25b86e69a26d9ceaac2d331731b676415fd4a019f57a" +content-hash = "f521e769204610adda9594e1159c73c2215c6456c53e27ba1141e048d6aa8a54" [metadata.files] allure-pytest = [ @@ -755,6 +788,9 @@ brotli = [ {file = "Brotli-1.0.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ee83d3e3a024a9618e5be64648d6d11c37047ac48adff25f12fa4226cf23d1c"}, {file = "Brotli-1.0.9-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:19598ecddd8a212aedb1ffa15763dd52a388518c4550e615aed88dc3753c0f0c"}, {file = "Brotli-1.0.9-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:44bb8ff420c1d19d91d79d8c3574b8954288bdff0273bf788954064d260d7ab0"}, + {file = "Brotli-1.0.9-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e23281b9a08ec338469268f98f194658abfb13658ee98e2b7f85ee9dd06caa91"}, + {file = "Brotli-1.0.9-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:3496fc835370da351d37cada4cf744039616a6db7d13c430035e901443a34daa"}, + {file = "Brotli-1.0.9-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b83bb06a0192cccf1eb8d0a28672a1b79c74c3a8a5f2619625aeb6f28b3a82bb"}, {file = "Brotli-1.0.9-cp310-cp310-win32.whl", hash = "sha256:26d168aac4aaec9a4394221240e8a5436b5634adc3cd1cdf637f6645cecbf181"}, {file = "Brotli-1.0.9-cp310-cp310-win_amd64.whl", hash = "sha256:622a231b08899c864eb87e85f81c75e7b9ce05b001e59bbfbf43d4a71f5f32b2"}, {file = "Brotli-1.0.9-cp35-cp35m-macosx_10_6_intel.whl", hash = "sha256:c83aa123d56f2e060644427a882a36b3c12db93727ad7a7b9efd7d7f3e9cc2c4"}, @@ -766,12 +802,18 @@ brotli = [ {file = "Brotli-1.0.9-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:40d15c79f42e0a2c72892bf407979febd9cf91f36f495ffb333d1d04cebb34e4"}, {file = "Brotli-1.0.9-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:93130612b837103e15ac3f9cbacb4613f9e348b58b3aad53721d92e57f96d46a"}, {file = "Brotli-1.0.9-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87fdccbb6bb589095f413b1e05734ba492c962b4a45a13ff3408fa44ffe6479b"}, + {file = "Brotli-1.0.9-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:6d847b14f7ea89f6ad3c9e3901d1bc4835f6b390a9c71df999b0162d9bb1e20f"}, + {file = "Brotli-1.0.9-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:495ba7e49c2db22b046a53b469bbecea802efce200dffb69b93dd47397edc9b6"}, + {file = "Brotli-1.0.9-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:4688c1e42968ba52e57d8670ad2306fe92e0169c6f3af0089be75bbac0c64a3b"}, {file = "Brotli-1.0.9-cp36-cp36m-win32.whl", hash = "sha256:61a7ee1f13ab913897dac7da44a73c6d44d48a4adff42a5701e3239791c96e14"}, {file = "Brotli-1.0.9-cp36-cp36m-win_amd64.whl", hash = "sha256:1c48472a6ba3b113452355b9af0a60da5c2ae60477f8feda8346f8fd48e3e87c"}, {file = "Brotli-1.0.9-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3b78a24b5fd13c03ee2b7b86290ed20efdc95da75a3557cc06811764d5ad1126"}, {file = "Brotli-1.0.9-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:9d12cf2851759b8de8ca5fde36a59c08210a97ffca0eb94c532ce7b17c6a3d1d"}, {file = "Brotli-1.0.9-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:6c772d6c0a79ac0f414a9f8947cc407e119b8598de7621f39cacadae3cf57d12"}, {file = "Brotli-1.0.9-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29d1d350178e5225397e28ea1b7aca3648fcbab546d20e7475805437bfb0a130"}, + {file = "Brotli-1.0.9-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:7bbff90b63328013e1e8cb50650ae0b9bac54ffb4be6104378490193cd60f85a"}, + {file = "Brotli-1.0.9-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:ec1947eabbaf8e0531e8e899fc1d9876c179fc518989461f5d24e2223395a9e3"}, + {file = "Brotli-1.0.9-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:12effe280b8ebfd389022aa65114e30407540ccb89b177d3fbc9a4f177c4bd5d"}, {file = "Brotli-1.0.9-cp37-cp37m-win32.whl", hash = "sha256:f909bbbc433048b499cb9db9e713b5d8d949e8c109a2a548502fb9aa8630f0b1"}, {file = "Brotli-1.0.9-cp37-cp37m-win_amd64.whl", hash = "sha256:97f715cf371b16ac88b8c19da00029804e20e25f30d80203417255d239f228b5"}, {file = "Brotli-1.0.9-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e16eb9541f3dd1a3e92b89005e37b1257b157b7256df0e36bd7b33b50be73bcb"}, @@ -779,6 +821,9 @@ brotli = [ {file = "Brotli-1.0.9-cp38-cp38-manylinux1_i686.whl", hash = "sha256:b663f1e02de5d0573610756398e44c130add0eb9a3fc912a09665332942a2efb"}, {file = "Brotli-1.0.9-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:5b6ef7d9f9c38292df3690fe3e302b5b530999fa90014853dcd0d6902fb59f26"}, {file = "Brotli-1.0.9-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a674ac10e0a87b683f4fa2b6fa41090edfd686a6524bd8dedbd6138b309175c"}, + {file = "Brotli-1.0.9-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e2d9e1cbc1b25e22000328702b014227737756f4b5bf5c485ac1d8091ada078b"}, + {file = "Brotli-1.0.9-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b336c5e9cf03c7be40c47b5fd694c43c9f1358a80ba384a21969e0b4e66a9b17"}, + {file = "Brotli-1.0.9-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:85f7912459c67eaab2fb854ed2bc1cc25772b300545fe7ed2dc03954da638649"}, {file = "Brotli-1.0.9-cp38-cp38-win32.whl", hash = "sha256:35a3edbe18e876e596553c4007a087f8bcfd538f19bc116917b3c7522fca0429"}, {file = "Brotli-1.0.9-cp38-cp38-win_amd64.whl", hash = "sha256:269a5743a393c65db46a7bb982644c67ecba4b8d91b392403ad8a861ba6f495f"}, {file = "Brotli-1.0.9-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2aad0e0baa04517741c9bb5b07586c642302e5fb3e75319cb62087bd0995ab19"}, @@ -786,6 +831,9 @@ brotli = [ {file = "Brotli-1.0.9-cp39-cp39-manylinux1_i686.whl", hash = "sha256:16d528a45c2e1909c2798f27f7bf0a3feec1dc9e50948e738b961618e38b6a7b"}, {file = "Brotli-1.0.9-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:56d027eace784738457437df7331965473f2c0da2c70e1a1f6fdbae5402e0389"}, {file = "Brotli-1.0.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9bf919756d25e4114ace16a8ce91eb340eb57a08e2c6950c3cebcbe3dff2a5e7"}, + {file = "Brotli-1.0.9-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e4c4e92c14a57c9bd4cb4be678c25369bf7a092d55fd0866f759e425b9660806"}, + {file = "Brotli-1.0.9-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:e48f4234f2469ed012a98f4b7874e7f7e173c167bed4934912a29e03167cf6b1"}, + {file = "Brotli-1.0.9-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9ed4c92a0665002ff8ea852353aeb60d9141eb04109e88928026d3c8a9e5433c"}, {file = "Brotli-1.0.9-cp39-cp39-win32.whl", hash = "sha256:cfc391f4429ee0a9370aa93d812a52e1fee0f37a81861f4fdd1f4fb28e8547c3"}, {file = "Brotli-1.0.9-cp39-cp39-win_amd64.whl", hash = "sha256:854c33dad5ba0fbd6ab69185fec8dab89e13cda6b7d191ba111987df74f38761"}, {file = "Brotli-1.0.9-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:9749a124280a0ada4187a6cfd1ffd35c350fb3af79c706589d98e088c5044267"}, @@ -932,6 +980,10 @@ pluggy = [ {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, ] +ply = [ + {file = "ply-3.11-py2.py3-none-any.whl", hash = "sha256:096f9b8350b65ebd2fd1346b12452efe5b9607f7482813ffca50c22722a807ce"}, + {file = "ply-3.11.tar.gz", hash = "sha256:00c7c1aaa88358b9c765b6d3000c6eec0ba42abca5351b095321aef446081da3"}, +] py = [ {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, @@ -1023,6 +1075,10 @@ six = [ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, ] +thriftpy2 = [ + {file = "thriftpy2-0.4.14-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:b4aae6f6c1d8d12e63c45f68ec1a25267e7d3af1ced1e5a82cbabaaed4bcebc9"}, + {file = "thriftpy2-0.4.14.tar.gz", hash = "sha256:1758ccaeb2a40d8779b50cdd3d7a3b43e8c5752f21ad0a54ded7c251d05219e8"}, +] toml = [ {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, diff --git a/pyproject.toml b/pyproject.toml index 9c098cf6..55761635 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -45,6 +45,7 @@ filetype = {version = "^1.0.7", optional = true} Brotli = "^1.0.9" jinja2 = "^3.0.3" toml = "^0.10.2" +thriftpy2 = "^0.4.14" [tool.poetry.extras] allure = ["allure-pytest"] # pip install "httprunner[allure]", poetry install -E allure