Exemple #1
0
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))
Exemple #2
0
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
Exemple #3
0
 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)
Exemple #4
0
 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)
Exemple #5
0
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()
Exemple #6
0
def get_sources():
    """ Builds and then returns a list of the Sources in this Settings config. """
    import sources
    return sources.load_sources(get('sources'))
Exemple #7
0
def get_sources():
    sources = load_sources().items()
    return jsonify(dict(sources=[{'source': source, 'endpoint': endpoint} for source, endpoint in sources]))