def display_category_report_list(catid, page, format): cat = ReportCategory.query.get_or_404(catid) title = "Category: " + cat.text pagination = CadorsReport.query.filter( CadorsReport.categories.contains(cat)).paginate(page) return render_list(pagination, title, format)
def search_aerodrome(): code = request.args['aerodrome'].upper() primary = True if (request.args['primary'] == 'primary') else False page = int(request.args.get('page', '1')) format = request.args.get('format', 'html') aerodrome = lookup(code) if aerodrome is None: title = "No results" message = "Aerodrome %s not found." % code return render_template('message.html', title=title, message=message) query = CadorsReport.query.join(LocationRef).filter( LocationRef.location == aerodrome) if primary: query = query.filter(LocationRef.primary == True) relation = "at" else: relation = "involving" query = query.order_by(CadorsReport.timestamp.desc()) pagination = query.paginate(page) title = "Events %s %s" % (relation, aerodrome.name) return render_list(pagination, title, format)
def search_location(): latitude = request.args['latitude'] longitude = request.args['longitude'] radius = int(request.args['radius']) primary = True if (request.args['primary'] == 'primary') else False page = int(request.args.get('page', '1')) format = request.args.get('format', 'html') radius_m = radius * 1000 wkt = "POINT(%s %s)" % (longitude, latitude) location = WKTSpatialElement(wkt) loc = sql.cast(LocationBase.location, Geography) q_loc = sql.cast(location, Geography) query = CadorsReport.query.join(LocationRef).join(LocationBase).filter( functions.within_distance(loc, q_loc, radius_m)) if primary: query = query.filter(LocationRef.primary == True) if format == 'html': query = query.add_column(functions.distance(loc, q_loc).label('distance')) query = query.add_column( func.ST_Azimuth(location, LocationBase.location.RAW) * (180/func.pi())) query = query.add_column(LocationBase.name) query = query.order_by('distance ASC', CadorsReport.timestamp.desc()) pagination = query.paginate(page) response = make_response( render_template('sr_loc.html', reports=pagination.items, pagination=pagination, get_direction=get_direction, radius=radius, latitude=latitude, longitude=longitude)) return prepare_response(response, 300) else: pagination = query.paginate(page) title = "Events within %s km of %s, %s" % (radius, latitude, longitude) return render_list(pagination, title, format)
def search_flight(): operator = request.args['operator'].upper() flight = request.args.get('flight','') page = int(request.args.get('page', '1')) format = request.args.get('format', 'html') query = CadorsReport.query.join(Aircraft).filter( Aircraft.flight_number_operator == operator) if flight != '': query = query.filter(Aircraft.flight_number_flight == int(flight)) query = query.order_by(CadorsReport.timestamp.desc()) pagination = query.paginate(page) if flight == '': title = "Events involving operator %s" % (operator) else: title = "Events involving flight %s%s" % (operator, flight) return render_list(pagination, title, format)
def search_text(): terms = request.args['q'] page = int(request.args.get('page', '1')) format = request.args.get('format', 'html') query = CadorsReport.query.filter( 'cadors_report.narrative_agg_idx_col @@ plainto_tsquery(:terms)') query = query.params(terms=terms) query = query.order_by( 'ts_rank_cd(narrative_agg_idx_col, plainto_tsquery(:terms)) DESC', CadorsReport.timestamp.desc()) if format == 'html': query = query.add_column( func.ts_headline('pg_catalog.english', CadorsReport.narrative_agg, func.plainto_tsquery(terms), '''MaxFragments=2, MinWords=15, MaxWords=20, FragmentDelimiter=|||, StartSel="<b>", StopSel = "</b>"''', type_=types.Unicode)) pagination = query.paginate(page) response = make_response( render_template('sr_text.html', reports=pagination.items, pagination=pagination, terms=terms)) return prepare_response(response, 300) else: pagination = query.paginate(page) title = "Results for '%s'" % (terms) return render_list(pagination, title, format)
def display_report_list(page, format): pagination = CadorsReport.query.paginate(page) title = "Reports" return render_list(pagination, title, format)