Merge branch 'master' into senslab2
[sfa.git] / sfa / senslab / parsing.py
1
2 # import modules used here -- sys is a very standard one
3 import sys
4 import httplib
5 import json
6 from collections import defaultdict
7
8 def strip_dictionnary (dict_to_strip):
9         stripped_filter = []
10         stripped_filterdict = {} 
11         for f in dict_to_strip :
12                 stripped_filter.append(str(f).strip('|'))
13                 
14         stripped_filterdict = dict(zip(stripped_filter, dict_to_strip.values()))
15         
16         return stripped_filterdict
17         
18
19 def filter_return_fields( dict_to_filter, return_fields):
20         filtered_dict = {}
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)
27         return filtered_dict
28         
29         
30         
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                 
38         print>>sys.stderr, " \r\n ___ parse_filter param_filter %s type %s  return fields %s " %(param_filter,type_of_list, return_fields)  
39         if  param_filter is None and return_fields is None:
40             return list_to_filter
41         
42         if type_of_list not in list_type:
43                 print>>sys.stderr, " \r\n type_of_list Error  parse_filter %s " %(type_of_list)
44                 return []
45
46         return_filtered_list= []
47         
48         for item in list_to_filter:
49                 tmp_item = {}
50                 
51                 if type(param_filter) is list :
52                         #print>>sys.stderr, " \r\n p_filter LIST %s " %(param_filter)
53                         
54                         for p_filter in param_filter:
55                                 #print>>sys.stderr, " \r\n p_filter %s \t item %s " %(p_filter,item)
56                                 if type(p_filter) is int:
57                                         if item[list_type[type_of_list]['int']] == p_filter :
58                                                 if return_fields:
59                                                         tmp_item = filter_return_fields(item,return_fields)
60                                                 else:
61                                                         tmp_item = item
62                                                 return_filtered_list.append(tmp_item)
63                                         #print>>sys.stderr, " \r\n 1tmp_item",tmp_item  
64                                         
65                                 if type(p_filter) is str:
66                                         if item[list_type[type_of_list]['str']] == str(p_filter) :
67                                                 print>>sys.stderr, " \r\n p_filter %s \t item %s "%(p_filter,item[list_type[type_of_list]['str']])
68                                                 if return_fields:
69                                                         tmp_item = filter_return_fields(item,return_fields)
70                                                 else:
71                                                         tmp_item = item
72                                                 return_filtered_list.append(tmp_item)
73                                         #print>>sys.stderr, " \r\n 2tmp_item",tmp_item
74                                         
75         
76                 elif type(param_filter) is dict:
77                         #stripped_filterdict = strip_dictionnary(param_filter)
78                         #tmp_copy = {}
79                         #tmp_copy = item.copy()
80                         #print>>sys.stderr, " \r\n \t\t ________tmp_copy %s " %(tmp_copy)
81                         #key_list = tmp_copy.keys()                     
82                         #for key in key_list:
83                                 #print>>sys.stderr, " \r\n \t\t  key %s " %(key)
84                                 #if key not in stripped_filterdict:
85                                         #del tmp_copy[key] 
86                                         
87                         #rif the item matches the filter, returns it
88                         founditem = []
89                         check =  [ True for  k in param_filter.keys() if 'id' in k ]
90                         if check :
91                             dflt= defaultdict(str,param_filter)
92                             
93                         else:
94                             dflt= defaultdict(str,param_filter)
95                               
96                         
97                         
98                         #founditem =  [ item for k in dflt if item[k] in dflt[k]]
99                         for k in dflt:
100                             if item[k] in dflt[k]:
101                                founditem = [item]
102
103                         if founditem: 
104                             if return_fields:
105                                 print>>sys.stderr, "  \r\n \r\n parsing.py param_filter dflt %s founditem %s " %(dflt, founditem)
106                                 tmp_item = filter_return_fields(founditem[0],return_fields)
107                             else:
108                                 tmp_item = founditem[0]
109                             return_filtered_list.append(tmp_item)
110                         
111                         #print>>sys.stderr, " \r\n tmp_copy %s param_filter %s cmp = %s " %(tmp_copy, param_filter,cmp(tmp_copy, stripped_filterdict))
112                         
113                         #if cmp(tmp_copy, stripped_filterdict) == 0:    
114                                 #if return_fields:
115                                         #tmp_item = filter_return_fields(item,return_fields)
116                                 #else:
117                                         
118                                         #tmp_item = item        
119                                 #return_filtered_list.append(tmp_item)
120         if return_filtered_list :
121            return return_filtered_list
122