Commit b6c00f5235248f747a7a2356fd0ee843650c7593

Authored by Tássia Camões Araújo
1 parent ca3ad958
Exists in master and in 1 other branch add_vagrant

Cleaned code and populated strategies set.

Showing 1 changed file with 86 additions and 107 deletions   Show diff stats
src/web/survey.py
... ... @@ -25,65 +25,25 @@ sys.setrecursionlimit(50000)
25 25  
26 26 class Index:
27 27 def GET(self):
28   - return render.survey_index()
  28 + return render.index_survey()
29 29  
30 30 class About:
31 31 def GET(self):
32   - return render.about()
  32 + return render.about_survey()
33 33  
34 34 class Thanks:
35 35 def POST(self):
36 36 web_input = web.input()
37 37 user_id = web_input['user_id'].encode('utf8')
38   - with open("/var/www/AppRecommender/src/web/submissions/%s/ident" % user_id,'w') as ident:
  38 + with open("/var/www/AppRecommender/src/web/submissions/%s/personal" % user_id,'w') as ident:
39 39 for key in ["name","email","comments"]:
40 40 if web_input.has_key(key):
41   - ident.write("%s: %s\n" % (key,web_input[key].encode("utf-8")))
  41 + ident.write("# %s\n%s\n" % (key.capitalize(),web_input[key].encode("utf-8")))
42 42 return render.thanks_id()
43 43  
44 44 class Fake:
45 45 def GET(self):
46   - return render.index()
47   - #return render_plain.fake()
48   -
49   -class Package:
50   - def GET(self, pkg):
51   - result = self.get_details_from_dde(pkg)
52   - return render_plain.package(result)
53   -
54   - def get_details_from_dde(self, pkg):
55   - json_source = Config().dde_url % pkg
56   - json_data = json.load(urllib.urlopen(json_source))
57   - # parse tags
58   - tags = self._debtags_list_to_dict(json_data['r']['tag'])
59   - json_data['r']['tag'] = tags
60   - return json_data['r']
61   -
62   - def _debtags_list_to_dict(self, debtags_list):
63   - """ in:
64   - ['use::editing',
65   - 'works-with-format::gif',
66   - 'works-with-format::jpg',
67   - 'works-with-format::pdf']
68   - out:
69   - {'use': [editing],
70   - 'works-with-format': ['gif', 'jpg', 'pdf']'
71   - }
72   - """
73   - debtags = {}
74   - subtags = []
75   - for tag in debtags_list:
76   - match = re.search(r'^(.*)::(.*)$', tag)
77   - if not match:
78   - log.error("Could not parse debtags format from tag: %s", tag)
79   - facet, subtag = match.groups()
80   - subtags.append(subtag)
81   - if facet not in debtags:
82   - debtags[facet] = subtags
83   - else:
84   - debtags[facet].append(subtag)
85   - subtags = []
86   - return debtags
  46 + return render_plain.fake()
87 47  
88 48 class Save:
89 49 def POST(self):
... ... @@ -110,16 +70,18 @@ class Save:
110 70 for item in value:
111 71 output.write(item+"\n")
112 72 with open(os.path.join(output_dir,"report"),'w') as report:
113   - report.write("# User: %s\n# Strategy: %s\n# TP FP\n%d %d\n" %
  73 + report.write("# User: %s\n# Strategy: %s\n# TP FP S\n%d %d %d\n" %
114 74 (user_id,strategy,
115 75 len(evaluations["good"])+len(evaluations["surprising"]),
116   - len(evaluations["poor"])))
  76 + len(evaluations["poor"]),len(evaluations["surprising"])))
  77 + if web_input.has_key("comments"):
  78 + report.write("# Comments\n%s\n" % web_input['comments'].encode("utf-8"))
117 79 if web_input.has_key('continue_button'):
118 80 return Survey().POST()
119 81 elif web_input.has_key('finish_button'):
120 82 return render.thanks(user_id)
121 83 else:
122   - return render.survey_index()
  84 + return render.index_survey()
123 85  
124 86 class Request:
125 87 def __init__(self,web_input,submissions_dir):
... ... @@ -170,26 +132,30 @@ class Survey:
170 132 def POST(self):
171 133 web_input = web.input(pkgs_file={})
172 134 logging.debug("Survey web_input %s" % str(web_input))
173   - self.strategies = ["knn","knn_eset","cbd_eset","knnco"]#,"demo_colco"]
  135 + self.strategies = ["cb","cbh","cb_eset","cbh_eset",
  136 + "knn","knn_eset","knn_plus",
  137 + "knnco","knnco_eset"]
174 138 request = Request(web_input,self.submissions_dir)
175   - if not request.validates():
176   - return render.error_survey()
  139 + if len(request.user.pkg_profile)<10:
  140 + return render.error(["Could not extract profile from uploaded file. It must have at least 10 applications."],
  141 + "/survey/","START")
177 142 else:
178   - # Check the remaining strategies and select a new one
179   - old_strategies = [dirs for root, dirs, files in
180   - os.walk(os.path.join(self.submissions_dir,
181   - request.user_id))]
182   - if old_strategies:
183   - strategies = [s for s in self.strategies if s not in old_strategies[0]]
184   - logging.info("Already used strategies %s" % old_strategies[0])
185   - else:
186   - strategies = self.strategies
187   - if not strategies:
188   - return render.thanks(request.user_id)
189   - request.strategy = random.choice(strategies)
190   - logging.info("Selected \'%s\' from %s" % (request.strategy,strategies))
191   - # Get recommendation
192   - self.rec.set_strategy(request.strategy)
  143 + ## Check the remaining strategies and select a new one
  144 + #old_strategies = [dirs for root, dirs, files in
  145 + # os.walk(os.path.join(self.submissions_dir,
  146 + # request.user_id))]
  147 + #if old_strategies:
  148 + # strategies = [s for s in self.strategies if s not in old_strategies[0]]
  149 + # logging.info("Already used strategies %s" % old_strategies[0])
  150 + #else:
  151 + # strategies = self.strategies
  152 + #if not strategies:
  153 + # return render.thanks(request.user_id)
  154 + #request.strategy = random.choice(strategies)
  155 + #logging.info("Selected \'%s\' from %s" % (request.strategy,strategies))
  156 + ## Get recommendation
  157 + #self.rec.set_strategy(request.strategy)
  158 + request.strategy = self.set_rec_strategy(request.user_id)
193 159 prediction = self.rec.get_recommendation(request.user,10).get_prediction()
194 160 logging.info("Prediction for user %s" % request.user_id)
195 161 logging.info(str(prediction))
... ... @@ -202,64 +168,77 @@ class Survey:
202 168 (request.user_id,request.strategy))
203 169 recommendation = [result[0] for result in prediction]
204 170  
205   - # Check connection to DDE
206   - try:
207   - s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
208   - s.connect((self.cfg.dde_server,self.cfg.dde_port))
209   - dde = 1
210   - s.close()
211   - except:
212   - dde =0
213   - logging.debug("Could not connect to dde")
214 171 # Load packages details
215 172 pkgs_details = []
216 173 for pkg_name in recommendation:
217 174 logging.info("Getting details of package %s" % pkg_name)
218 175 pkg = DebianPackage(pkg_name)
219   - if dde:
220   - pkg.load_details_from_dde(self.cfg.dde_server,self.cfg.dde_port)
221   - else:
222   - pkg.load_details_from_apt()
  176 + pkg.load_details()
223 177 pkgs_details.append(pkg)
  178 +
224 179 if pkgs_details:
225 180 logging.info("Rendering survey slide...")
226 181 return render.survey(pkgs_details, request)
227 182 else:
228   - return render.error_survey()
229   -
230   -def add_global_hook():
231   - g = web.storage({"counter": "1"})
232   - def _wrapper(handler):
233   - web.ctx.globals = g
234   - return handler()
235   - return _wrapper
  183 + return render.error(["No recommendation produced for the uploaded file."],"/survey/","START")
  184 +
  185 + def set_rec_strategy(self,user_id):
  186 + # Check the remaining strategies and select a new one
  187 + old_strategies = [dirs for root, dirs, files in
  188 + os.walk(os.path.join(self.submissions_dir,
  189 + user_id))]
  190 + if old_strategies:
  191 + strategies = [s for s in self.strategies if s not in old_strategies[0]]
  192 + logging.info("Already used strategies %s" % old_strategies[0])
  193 + else:
  194 + strategies = self.strategies
  195 + if not strategies:
  196 + return render.thanks(request.user_id)
  197 + selected_strategy = random.choice(strategies)
  198 + logging.info("Selected \'%s\' from %s" % (selected_strategy,strategies))
  199 + k=50
  200 + n=50
  201 + if selected_strategy == "cb":
  202 + pass
  203 + if selected_strategy == "cbh":
  204 + pass
  205 + if selected_strategy == "cb_eset":
  206 + pass
  207 + if selected_strategy == "cbh_eset":
  208 + pass
  209 + if selected_strategy == "knn":
  210 + pass
  211 + if selected_strategy == "knn_eset":
  212 + pass
  213 + if selected_strategy == "knn_plus":
  214 + pass
  215 + if selected_strategy == "knnco":
  216 + pass
  217 + if selected_strategy == "knnco_eset":
  218 + pass
  219 + self.rec.set_strategy(selected_strategy,k,n)
  220 + return selected_strategy
  221 +
  222 +#def add_global_hook():
  223 +# g = web.storage({"counter": "1"})
  224 +# def _wrapper(handler):
  225 +# web.ctx.globals = g
  226 +# return handler()
  227 +# return _wrapper
236 228  
237 229 render = web.template.render('/var/www/AppRecommender/src/web/templates/', base='layout', globals={'hasattr':hasattr})
238   -render_plain = web.template.render('/var/www/AppRecommender/src/web/templates/')
239 230  
240   -urls = ('/survey', 'Index',
241   - '/survey/', 'Index',
242   - '/survey/survey', 'Survey',
243   - '/survey/apprec', 'Survey',
244   - '/survey/thanks', 'Thanks',
245   - '/survey/save', 'Save',
246   - '/survey/thanks', 'Thanks',
247   - '/survey/about', 'About',
248   - '/survey/package/(.*)', 'Package',
249   - '/', 'Index',
250   - '/index', 'Index'
251   - #'/', 'Fake',
252   - #'/index', 'Fake'
  231 +urls = ('', 'Index',
  232 + '/', 'Index',
  233 + '/survey', 'Survey',
  234 + '/apprec', 'Survey',
  235 + '/thanks', 'Thanks',
  236 + '/save', 'Save',
  237 + '/about', 'About',
253 238 )
254 239  
255 240 web.webapi.internalerror = web.debugerror
256 241  
257   -#if __name__ == "__main__":
258 242 cfg = Config()
259   -# apprec = web.application(urls, globals())
260   -# application = web.application(urls, globals()).wsgifunc()
261 243 app = web.application(urls, globals(), autoreload=False)
262 244 application = app.wsgifunc()
263   -
264   -# apprec.add_processor(add_global_hook())
265   -# apprec.run()
... ...