Esempio n. 1
0
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)
Esempio n. 2
0
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)
Esempio n. 3
0
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)
Esempio n. 4
0
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)
Esempio n. 5
0
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)
Esempio n. 6
0
def display_report_list(page, format):
    pagination = CadorsReport.query.paginate(page)
    title = "Reports"
    return render_list(pagination, title, format)