def BuildIndex(self): current_index = self.LoadCurrentIndex() new_index = {} for responder in Responder.all(): version = common.GetLatestSoftware(responder) if not version: continue for param in version.supported_parameters: key = self.KeyFromPID(responder.manufacturer, param) pid = self._pid_cache.get(key, None) if not pid: continue new_index.setdefault(key, set()).add(responder.key()) # now diff the old and new for key, responders in new_index.iteritems(): if key in current_index: if current_index[key] != responders: logging.info('Responder set changed for %s' % str(key)) pid = self._pid_cache[key] pid.responders = list(responders) pid.put() del current_index[key] else: # this should never happen logging.warn('Missing key for %s' % str(key)) for key, responders in current_index.iteritems(): if responders: logging.info('Removed %s' % responders) pid = self._pid_cache[key] pid.responders = [] pid.put()
def BuildResponse(self): param_counts = {} responders = 0 max_manufacturer_pids = 0 max_manufacturer_responder = '' max_pids = 0 max_pids_responder = '' for responder in Responder.all(): params = [] version = common.GetLatestSoftware(responder) if version: params = version.supported_parameters manufacturer_pids = 0 for param in params: param_counts.setdefault(param, 0) param_counts[param] += 1 if param >= 0x8000: manufacturer_pids += 1 if params: responders += 1 if manufacturer_pids > max_manufacturer_pids: max_manufacturer_responder = responder.model_description max_manufacturer_pids = manufacturer_pids if len(params) > max_pids: max_pids_responder = responder.model_description max_pids = len(params) pids = [] for param, count in param_counts.iteritems(): param_info = { 'id': param, 'count': count, } if param < 0x8000: query = Pid.all() query.filter('pid_id = ', param) pid = query.fetch(1) if pid: param_info['name'] = pid[0].name pids.append(param_info) output = { 'count': responders, 'max_manufacturer_pids': (max_manufacturer_responder, max_manufacturer_pids), 'max_pids': (max_pids_responder, max_pids), 'pids': pids, } return json.dumps(output)
def get(self): responder = common.LookupModel(self.request.get('manufacturer'), self.request.get('model')) if responder is None: self.error(404) return version = common.GetLatestSoftware(responder) if version is None: self.error(404) output = { 'version': version.version_id, 'label': version.label, 'URL': '', } self.response.headers['Content-Type'] = 'text/json' self.response.headers['Cache-Control'] = 'public; max-age=300;' self.response.out.write(json.dumps(output))