def perform_query(): if not request.json or 'query' not in request.json or not request.json['query'] or not request.json['engines']: return jsonify(dict(message='Invalid query')), 400 selected_engines = [] for engine in request.json['engines']: if engine < 0 or engine >= len(engines): return jsonify(dict(message='Invalid engine.')), 400 selected_engines.append(engines[engine]()) available_sources = load_sources().items() selected_sources = {src: endpoint for src, endpoint in available_sources if src in request.json['sources']} if len(selected_sources) == 0: return jsonify(dict(message='You must select at least one valid source.')), 400 timeout = 0 if request.json['timeout']: timeout = request.json['timeout'] # Create job with associated UUID job_uuid = str(uuid.uuid4()) job = Job(timeout, request.json['query'], selected_engines, selected_sources) jobs[job_uuid] = job # Run job in separate thread job.run() return jsonify(dict(ticket=job_uuid))
def api_get_sources(): ret = {'available': [], 'active': [], 'filters': {}} for s in sources.load_sources(): ret['available'].append(s.to_obj(for_webui=True)) for s in settings.get_sources(): ret['active'].append(s.to_obj(for_webui=True)) ret['filters']['available'] = [f.to_js_obj() for f in filters.get_filters()] ret['filters']['operators'] = [f.value for f in filters.Operators] return ret
def test_unique_types(self): """ Source types should be unqiue """ types = [] for s in sources.load_sources(None): self.assertTrue( s.type, "Source is missing a type! %s" % s.__class__.__name__) self.assertNotIn(s.type, types, msg="Source type %s is not unique! (%s)" % (s.type, s.__class__.__name__)) types.append(s.type)
def test_unique_description(self): """ Source descriptions should be unique """ types = [] for s in sources.load_sources(None): self.assertTrue( s.description, "Source is missing a description! %s" % s.__class__.__name__) self.assertNotIn(s.description, types, msg="Source desc %s is not unique! (%s)" % (s.description, s.__class__.__name__)) types.append(s.description)
def api_save_sources(new_obj): print('Saving new source list:') output_settings = [] for so in new_obj: print('\tType:', so['type'], 'Alias:', so['alias'], so['filters']) for s in sources.load_sources(): if s.type == so['type']: s.set_alias(so['alias']) for k, v in so['data'].items(): s.insert_data(k, v) for f in so['filters']: for fi in filters.get_filters(): if f['field'] == fi.field: fi.set_operator(f['operator']) fi.set_limit(f['limit']) s.add_filter(fi) break output_settings.append(s) for s in settings.get_sources(): settings.remove_source(s, save_after=False) for s in output_settings: settings.add_source(s, prevent_duplicate=False, save_after=False) return settings.save()
def get_sources(): """ Builds and then returns a list of the Sources in this Settings config. """ import sources return sources.load_sources(get('sources'))
def get_sources(): sources = load_sources().items() return jsonify(dict(sources=[{'source': source, 'endpoint': endpoint} for source, endpoint in sources]))