1717
1818@author: Diego Torres Milano
1919"""
20-
20+ import re
2121import sys
22+ import textwrap
2223from collections import OrderedDict
2324
2425from culebratester_client import Selector
3233#
3334
3435DEBUG = False
36+ DEBUG_WRAPPER = False
3537
3638
3739class Kato :
@@ -41,6 +43,7 @@ def __init__(self):
4143 self .distances = OrderedDict ()
4244 # If pkg has been specified in the selector, only finds other selectors with the same pkg when True
4345 self .comply_with_pkg = False
46+ self .max_num_of_selectors = 5
4447
4548
4649def kato (func ):
@@ -54,7 +57,7 @@ def kato(func):
5457 """
5558
5659 def wrapper (* args , ** kwargs ):
57- if DEBUG :
60+ if DEBUG_WRAPPER :
5861 print ('kato.wrapper:' , args , kwargs )
5962 try :
6063 return func (* args , ** kwargs )
@@ -63,7 +66,8 @@ def wrapper(*args, **kwargs):
6366 if not helper .kato .enabled :
6467 raise e
6568 find_me_the_selectors (e , * args , ** kwargs , func = func .__name__ , distance_func = levenshtein_distance ,
66- distance_func_argument_mapper = str )
69+ distance_func_argument_mapper = str ,
70+ max_num_of_selectors = helper .kato .max_num_of_selectors )
6771
6872 return wrapper
6973
@@ -82,7 +86,7 @@ def find_me_the_selectors(e: ApiException, *args, **kwargs):
8286 :return: re-raise the original exception
8387 """
8488 if DEBUG :
85- print ('find_me_the_selectors' , args , kwargs , file = sys .stderr )
89+ print ('🐝 find_me_the_selectors' , args , kwargs , file = sys .stderr )
8690 helper = args [0 ].uiAutomatorHelper
8791 msg = ''
8892 if helper .kato .enabled :
@@ -96,10 +100,11 @@ def find_me_the_selectors(e: ApiException, *args, **kwargs):
96100 helper .kato .selectors = list (filter (lambda _s : _s .pkg == selector .pkg , helper .kato .selectors ))
97101 _d = dict ()
98102 for n , s in enumerate (helper .kato .selectors ):
99- if n == 0 :
100- msg += 'Kato: selector distances:\n '
101- d = distance (mapper (selector ), mapper (s ))
102- _d [d ] = s
103- msg += f'{ d } -> { s } \n '
103+ _d [distance (mapper (selector ), mapper (s ))] = s
104104 helper .kato .distances = OrderedDict (sorted (_d .items (), reverse = False ))
105+ msg = f"Kato: selector distances:\n "
106+ for n , (k , v ) in enumerate (helper .kato .distances .items ()):
107+ msg += textwrap .indent (f"{ k } ➡ { v } \n " , " " , lambda line : re .match (r"^\d+ " , line ) is None )
108+ if n >= kwargs ["max_num_of_selectors" ]:
109+ break
105110 raise ApiException (msg , e )
0 commit comments