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()
Example #2
0
    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)
Example #3
0
    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))