2 # import modules used here -- sys is a very standard one
6 from collections import defaultdict
8 def strip_dictionnary (dict_to_strip):
10 stripped_filterdict = {}
11 for f in dict_to_strip :
12 stripped_filter.append(str(f).strip('|'))
14 stripped_filterdict = dict(zip(stripped_filter, dict_to_strip.values()))
16 return stripped_filterdict
19 def filter_return_fields( dict_to_filter, return_fields):
21 print>>sys.stderr, " \r\n \t \tfilter_return_fields return fields %s " %(return_fields)
22 for field in return_fields:
23 #print>>sys.stderr, " \r\n \t \tfield %s " %(field)
24 if field in dict_to_filter:
25 filtered_dict[field] = dict_to_filter[field]
26 print>>sys.stderr, " \r\n \t\t filter_return_fields filtered_dict %s " %(filtered_dict)
31 def parse_filter(list_to_filter, param_filter, type_of_list, return_fields=None) :
32 list_type = { 'persons': {'str': 'hrn','int':'record_id'},\
33 'keys':{'int':'key_id'},\
34 'site':{'str':'login_base','int':'site_id'},\
35 'node':{'str':'hostname','int':'node_id'},\
36 'slice':{'str':'slice_hrn','int':'record_id_slice'},\
37 'peers':{'str':'hrn'}}
39 print>>sys.stderr, " \r\n ___ parse_filter param_filter %s type %s return fields %s " %(param_filter,type_of_list, return_fields)
40 if param_filter is None and return_fields is None:
43 if type_of_list not in list_type:
44 print>>sys.stderr, " \r\n type_of_list Error parse_filter %s " %(type_of_list)
47 return_filtered_list= []
49 for item in list_to_filter:
52 if type(param_filter) is list :
53 #print>>sys.stderr, " \r\n p_filter LIST %s " %(param_filter)
55 for p_filter in param_filter:
56 #print>>sys.stderr, " \r\n p_filter %s \t item %s " %(p_filter,item)
57 if type(p_filter) is int:
58 if item[list_type[type_of_list]['int']] == p_filter :
60 tmp_item = filter_return_fields(item,return_fields)
63 return_filtered_list.append(tmp_item)
64 #print>>sys.stderr, " \r\n 1tmp_item",tmp_item
66 if type(p_filter) is str:
67 if item[list_type[type_of_list]['str']] == str(p_filter) :
68 print>>sys.stderr, " \r\n p_filter %s \t item %s "%(p_filter,item[list_type[type_of_list]['str']])
70 tmp_item = filter_return_fields(item,return_fields)
73 return_filtered_list.append(tmp_item)
74 #print>>sys.stderr, " \r\n 2tmp_item",tmp_item
77 elif type(param_filter) is dict:
78 #stripped_filterdict = strip_dictionnary(param_filter)
80 #tmp_copy = item.copy()
81 #print>>sys.stderr, " \r\n \t\t ________tmp_copy %s " %(tmp_copy)
82 #key_list = tmp_copy.keys()
84 #print>>sys.stderr, " \r\n \t\t key %s " %(key)
85 #if key not in stripped_filterdict:
88 #rif the item matches the filter, returns it
90 check = [ True for k in param_filter.keys() if 'id' in k ]
91 dflt= defaultdict(str,param_filter)
95 #founditem = [ item for k in dflt if item[k] in dflt[k]]
97 if item[k] in dflt[k]:
102 print>>sys.stderr, " \r\n \r\n parsing.py param_filter dflt %s founditem %s " %(dflt, founditem)
103 tmp_item = filter_return_fields(founditem[0],return_fields)
105 tmp_item = founditem[0]
106 return_filtered_list.append(tmp_item)
108 #print>>sys.stderr, " \r\n tmp_copy %s param_filter %s cmp = %s " %(tmp_copy, param_filter,cmp(tmp_copy, stripped_filterdict))
110 #if cmp(tmp_copy, stripped_filterdict) == 0:
112 #tmp_item = filter_return_fields(item,return_fields)
116 #return_filtered_list.append(tmp_item)
117 if return_filtered_list :
118 return return_filtered_list