def dokument(identifier): """ Gibt Dokumenten-Detailseite aus """ result = db.get_submissions(references=[identifier], get_attachments=True, get_consultations=True, get_thumbnails=True) if len(result) == 0: abort(404) return render_template('dokument_detailseite.html', submission=result[0])
def api_documents(): """ API-Methode zur Suche von Dokumenten bzw. zum Abruf eines einzelnen Dokuments anhand einer Kennung (reference). Ist der URL-Parameter "reference" angegeben, handelt es sich um eine Dokumentenabfrage anhand der Kennung(en). Ansonsten ist es eine Suche. """ start_time = time.time() jsonp_callback = request.args.get('callback', None) ref = request.args.get('reference', '') references = ref.split(',') if references == ['']: references = None output = request.args.get('output', '').split(',') q = request.args.get('q', '*:*') fq = request.args.get('fq', '') sort = request.args.get('sort', 'score desc') start = int(request.args.get('start', '0')) numdocs = int(request.args.get('docs', '10')) date_param = request.args.get('date', '') get_attachments = 'attachments' in output get_thumbnails = 'thumbnails' in output and get_attachments get_consultations = 'consultations' in output get_facets = 'facets' in output #get_relations = 'relations' in output request_info = {} # Info über die Anfrage query = False docs = False submission_ids = [] # TODO: entscheiden, was mit get_relations passiert """ Anhand der übergebenen Parameter wird entschieden, ob eine Solr-Suche durchgeführt wird, oder ob die Abfrage direkt anhand von Kennungen (references) erfolgen kann. """ if references is None: # Suche wird durchgeführt # (References-Liste via Suchmaschine füllen) query = db.query_submissions(q=q, fq=fq, sort=sort, start=start, docs=numdocs, date=date_param, facets=get_facets) if query['numhits'] > 0: submission_ids = [x['_id'] for x in query['result']] else: docs = [] else: # Direkte Abfrage request_info = { 'references': references } request_info['output'] = output # Abrufen der benötigten Dokumente aus der Datenbank if references is not None: docs = db.get_submissions(references=references, get_attachments=get_attachments, get_consultations=get_consultations, get_thumbnails=get_thumbnails) elif len(submission_ids) > 0: docs = db.get_submissions(submission_ids=submission_ids, get_attachments=get_attachments, get_consultations=get_consultations, get_thumbnails=get_thumbnails) ret = { 'status': 0, 'duration': int((time.time() - start_time) * 1000), 'request': request_info, 'response': {} } if docs: ret['response']['documents'] = docs ret['response']['numdocs'] = len(docs) if query and 'maxscore' in query: ret['response']['maxscore'] = query['maxscore'] for n in range(len(docs)): docs[n]['reference'] = docs[n]['identifier'] del docs[n]['identifier'] if query: ret['response']['numhits'] = query['numhits'] if get_facets and 'facets' in query: ret['response']['facets'] = query['facets'] ret['response']['start'] = start ret['request']['sort'] = sort json_output = json.dumps(ret, cls=util.MyEncoder, sort_keys=True) if jsonp_callback is not None: json_output = jsonp_callback + '(' + json_output + ')' response = make_response(json_output, 200) response.mimetype = 'application/json' response.headers['Expires'] = util.expires_date(hours=24) response.headers['Cache-Control'] = util.cache_max_age(hours=24) return response
def api_documents(): """ API-Methode zur Suche von Dokumenten bzw. zum Abruf eines einzelnen Dokuments anhand einer Kennung (reference). Ist der URL-Parameter "reference" angegeben, handelt es sich um eine Dokumentenabfrage anhand der Kennung(en). Ansonsten ist es eine Suche. """ start_time = time.time() jsonp_callback = request.args.get('callback', None) ref = request.args.get('reference', '') references = ref.split(',') if references == ['']: references = None output = request.args.get('output', '').split(',') q = request.args.get('q', '*:*') fq = request.args.get('fq', '') sort = request.args.get('sort', 'score desc') start = int(request.args.get('start', '0')) numdocs = int(request.args.get('docs', '10')) date_param = request.args.get('date', '') get_attachments = 'attachments' in output get_thumbnails = 'thumbnails' in output and get_attachments get_consultations = 'consultations' in output get_facets = 'facets' in output #get_relations = 'relations' in output request_info = {} # Info über die Anfrage query = False docs = False submission_ids = [] # TODO: entscheiden, was mit get_relations passiert """ Anhand der übergebenen Parameter wird entschieden, ob eine ES-Suche durchgeführt wird, oder ob die Abfrage direkt anhand von Kennungen (references) erfolgen kann. """ if references is None: # Suche wird durchgeführt # (References-Liste via Suchmaschine füllen) query = db.query_submissions(q=q, fq=fq, sort=sort, start=start, docs=numdocs, date=date_param, facets=get_facets) if query['numhits'] > 0: submission_ids = [x['_id'] for x in query['result']] else: docs = [] else: # Direkte Abfrage request_info = {'references': references} request_info['output'] = output # Abrufen der benötigten Dokumente aus der Datenbank if references is not None: docs = db.get_submissions(references=references, get_attachments=get_attachments, get_consultations=get_consultations, get_thumbnails=get_thumbnails) elif len(submission_ids) > 0: docs = db.get_submissions(submission_ids=submission_ids, get_attachments=get_attachments, get_consultations=get_consultations, get_thumbnails=get_thumbnails) ret = { 'status': 0, 'duration': int((time.time() - start_time) * 1000), 'request': request_info, 'response': {} } if docs: ret['response']['documents'] = docs ret['response']['numdocs'] = len(docs) if query and 'maxscore' in query: ret['response']['maxscore'] = query['maxscore'] for n in range(len(docs)): docs[n]['reference'] = docs[n]['identifier'] del docs[n]['identifier'] if query: ret['response']['numhits'] = query['numhits'] if get_facets and 'facets' in query: ret['response']['facets'] = query['facets'] ret['response']['start'] = start ret['request']['sort'] = sort ret['request']['fq'] = fq json_output = json.dumps(ret, cls=util.MyEncoder, sort_keys=True) if jsonp_callback is not None: json_output = jsonp_callback + '(' + json_output + ')' response = make_response(json_output, 200) response.mimetype = 'application/json' response.headers['Expires'] = util.expires_date(hours=24) response.headers['Cache-Control'] = util.cache_max_age(hours=24) return response
async def search_submissions(template): query = request.args.get('query') return jsonify(await (db.search_submissions(template, query) if query else db.get_submissions(template)))
def api_documents(): """ API-Methode zur Suche von Dokumenten bzw. zum Abruf eines einzelnen Dokuments anhand einer Kennung (reference). Ist der URL-Parameter "reference" angegeben, handelt es sich um eine Dokumentenabfrage anhand der Kennung(en). Ansonsten ist es eine Suche. """ start_time = time.time() jsonp_callback = request.args.get("callback", None) ref = request.args.get("reference", "") references = ref.split(",") if references == [""]: references = None output = request.args.get("output", "").split(",") q = request.args.get("q", "*:*") fq = request.args.get("fq", "") sort = request.args.get("sort", "score desc") start = int(request.args.get("start", "0")) numdocs = int(request.args.get("docs", "10")) date_param = request.args.get("date", "") get_attachments = "attachments" in output get_thumbnails = "thumbnails" in output and get_attachments get_consultations = "consultations" in output get_facets = "facets" in output # get_relations = 'relations' in output request_info = {} # Info über die Anfrage query = False docs = False submission_ids = [] # TODO: entscheiden, was mit get_relations passiert """ Anhand der übergebenen Parameter wird entschieden, ob eine Solr-Suche durchgeführt wird, oder ob die Abfrage direkt anhand von Kennungen (references) erfolgen kann. """ if references is None: # Suche wird durchgeführt # (References-Liste via Suchmaschine füllen) query = db.query_submissions( q=q, fq=fq, sort=sort, start=start, docs=numdocs, date=date_param, facets=get_facets ) if query["numhits"] > 0: submission_ids = [x["_id"] for x in query["result"]] else: docs = [] else: # Direkte Abfrage request_info = {"references": references} request_info["output"] = output # Abrufen der benötigten Dokumente aus der Datenbank if references is not None: docs = db.get_submissions( references=references, get_attachments=get_attachments, get_consultations=get_consultations, get_thumbnails=get_thumbnails, ) elif len(submission_ids) > 0: docs = db.get_submissions( submission_ids=submission_ids, get_attachments=get_attachments, get_consultations=get_consultations, get_thumbnails=get_thumbnails, ) ret = {"status": 0, "duration": int((time.time() - start_time) * 1000), "request": request_info, "response": {}} if docs: ret["response"]["documents"] = docs ret["response"]["numdocs"] = len(docs) if query and "maxscore" in query: ret["response"]["maxscore"] = query["maxscore"] for n in range(len(docs)): docs[n]["reference"] = docs[n]["identifier"] del docs[n]["identifier"] if query: ret["response"]["numhits"] = query["numhits"] if get_facets and "facets" in query: ret["response"]["facets"] = query["facets"] ret["response"]["start"] = start ret["request"]["sort"] = sort json_output = json.dumps(ret, cls=util.MyEncoder, sort_keys=True) if jsonp_callback is not None: json_output = jsonp_callback + "(" + json_output + ")" response = make_response(json_output, 200) response.mimetype = "application/json" response.headers["Expires"] = util.expires_date(hours=24) response.headers["Cache-Control"] = util.cache_max_age(hours=24) return response