Example #1
0
def _create_list(tab,
                 kw,
                 date=None,
                 pilot=None,
                 club=None,
                 airport=None,
                 pinned=None,
                 filter=None,
                 columns=None):
    pilot_alias = aliased(User, name='pilot')
    owner_alias = aliased(User, name='owner')

    subq = db.session \
        .query(FlightComment.flight_id, func.count('*').label('count')) \
        .group_by(FlightComment.flight_id).subquery()

    flights = db.session.query(Flight, subq.c.count) \
        .join(Flight.igc_file) \
        .options(contains_eager(Flight.igc_file)) \
        .join(owner_alias, IGCFile.owner) \
        .options(contains_eager(Flight.igc_file, IGCFile.owner, alias=owner_alias)) \
        .outerjoin(pilot_alias, Flight.pilot) \
        .options(contains_eager(Flight.pilot, alias=pilot_alias)) \
        .options(joinedload(Flight.co_pilot)) \
        .outerjoin(Flight.club) \
        .options(contains_eager(Flight.club)) \
        .outerjoin(Flight.takeoff_airport) \
        .options(contains_eager(Flight.takeoff_airport)) \
        .outerjoin(Flight.model) \
        .options(contains_eager(Flight.model)) \
        .outerjoin((subq, Flight.comments))

    if date:
        flights = flights.filter(Flight.date_local == date)

    if pilot:
        flights = flights.filter(
            or_(Flight.pilot == pilot, Flight.co_pilot == pilot))
    if club:
        flights = flights.filter(Flight.club == club)

    if airport:
        flights = flights.filter(Flight.takeoff_airport == airport)

    if pinned:
        flights = flights.filter(Flight.id.in_(pinned))

    if filter is not None:
        flights = flights.filter(filter)

    if request.is_xhr:
        if not columns:
            columns = {
                0: (Flight, 'date_local'),
                1: (Flight, 'index_score'),
                2: (pilot_alias, 'name'),
                3: (Flight, 'olc_classic_distance'),
                4: (Airport, 'name'),
                5: (Club, 'name'),
                6: (AircraftModel, 'name'),
                7: (Flight, 'takeoff_time'),
                8: (Flight, 'id'),
                9: (Flight, 'num_comments'),
            }

        flights, response_dict = GetDatatableRecords(kw, flights, columns)

        aaData = []
        for flight, num_comments in flights:
            aaData.append(
                dict(takeoff_time=flight.takeoff_time.strftime('%H:%M'),
                     landing_time=flight.landing_time.strftime('%H:%M'),
                     date=flight.date_local.strftime('%d.%m.%Y'),
                     date_formatted=format_date(flight.date_local),
                     index_score=format_decimal(flight.index_score,
                                                format='0'),
                     olc_classic_distance=flight.olc_classic_distance,
                     pilot_id=flight.pilot_id,
                     pilot=flight.pilot and flight.pilot.name,
                     pilot_name=flight.pilot_name,
                     co_pilot_id=flight.co_pilot_id,
                     co_pilot=flight.co_pilot and flight.co_pilot.name,
                     co_pilot_name=flight.co_pilot_name,
                     club_id=flight.club_id,
                     club=flight.club and truncate(flight.club.name, 25),
                     owner=flight.igc_file.owner.name,
                     takeoff_airport=flight.takeoff_airport
                     and flight.takeoff_airport.name,
                     takeoff_airport_id=flight.takeoff_airport
                     and flight.takeoff_airport.id,
                     takeoff_airport_country_code=flight.takeoff_airport
                     and flight.takeoff_airport.country_code.lower(),
                     takeoff_airport_country_name=flight.takeoff_airport
                     and country_name(flight.takeoff_airport.country_code),
                     aircraft=(flight.model and flight.model.name)
                     or (flight.igc_file.model
                         and '[' + flight.igc_file.model + ']'),
                     aircraft_reg=flight.registration
                     or flight.igc_file.registration or "Unknown",
                     flight_id=flight.id,
                     num_comments=num_comments))

        return jsonify(aaData=aaData, **response_dict)

    else:
        if not date:
            flights = flights.order_by(Flight.date_local.desc())

        flights_count = flights.count()
        if flights_count > int(
                current_app.config.get('SKYLINES_LISTS_SERVER_SIDE', 250)):
            limit = int(
                current_app.config.get('SKYLINES_LISTS_DISPLAY_LENGTH', 50))
        else:
            limit = int(
                current_app.config.get('SKYLINES_LISTS_SERVER_SIDE', 250))

        flights = flights.order_by(Flight.index_score.desc())
        flights = flights.limit(limit)

        return render_template('flights/list.jinja',
                               tab=tab,
                               date=date,
                               pilot=pilot,
                               club=club,
                               airport=airport,
                               flights=flights,
                               flights_count=flights_count)
Example #2
0
def _create_list(tab, kw, date=None, pilot=None, club=None, airport=None,
                 pinned=None, filter=None, columns=None):
    pilot_alias = aliased(User, name='pilot')
    owner_alias = aliased(User, name='owner')

    subq = db.session \
        .query(FlightComment.flight_id, func.count('*').label('count')) \
        .group_by(FlightComment.flight_id).subquery()

    flights = db.session.query(Flight, subq.c.count) \
        .join(Flight.igc_file) \
        .options(contains_eager(Flight.igc_file)) \
        .join(owner_alias, IGCFile.owner) \
        .options(contains_eager(Flight.igc_file, IGCFile.owner, alias=owner_alias)) \
        .outerjoin(pilot_alias, Flight.pilot) \
        .options(contains_eager(Flight.pilot, alias=pilot_alias)) \
        .options(joinedload(Flight.co_pilot)) \
        .outerjoin(Flight.club) \
        .options(contains_eager(Flight.club)) \
        .outerjoin(Flight.takeoff_airport) \
        .options(contains_eager(Flight.takeoff_airport)) \
        .outerjoin(Flight.model) \
        .options(contains_eager(Flight.model)) \
        .outerjoin((subq, Flight.comments))

    if date:
        flights = flights.filter(Flight.date_local == date)

    if pilot:
        flights = flights.filter(or_(Flight.pilot == pilot,
                                     Flight.co_pilot == pilot))
    if club:
        flights = flights.filter(Flight.club == club)

    if airport:
        flights = flights.filter(Flight.takeoff_airport == airport)

    if pinned:
        flights = flights.filter(Flight.id.in_(pinned))

    if filter is not None:
        flights = flights.filter(filter)

    if request.is_xhr:
        if not columns:
            columns = {
                0: (Flight, 'date_local'),
                1: (Flight, 'index_score'),
                2: (pilot_alias, 'name'),
                3: (Flight, 'olc_classic_distance'),
                4: (Airport, 'name'),
                5: (Club, 'name'),
                6: (AircraftModel, 'name'),
                7: (Flight, 'takeoff_time'),
                8: (Flight, 'id'),
                9: (Flight, 'num_comments'),
            }

        flights, response_dict = GetDatatableRecords(kw, flights, columns)

        aaData = []
        for flight, num_comments in flights:
            aaData.append(dict(takeoff_time=flight.takeoff_time.strftime('%H:%M'),
                               landing_time=flight.landing_time.strftime('%H:%M'),
                               date=flight.date_local.strftime('%d.%m.%Y'),
                               date_formatted=format_date(flight.date_local),
                               index_score=format_decimal(flight.index_score, format='0'),
                               olc_classic_distance=flight.olc_classic_distance,
                               pilot_id=flight.pilot_id,
                               pilot=flight.pilot and flight.pilot.name,
                               pilot_name=flight.pilot_name,
                               co_pilot_id=flight.co_pilot_id,
                               co_pilot=flight.co_pilot and flight.co_pilot.name,
                               co_pilot_name=flight.co_pilot_name,
                               club_id=flight.club_id,
                               club=flight.club and truncate(flight.club.name, 25),
                               owner=flight.igc_file.owner.name,
                               takeoff_airport=flight.takeoff_airport and flight.takeoff_airport.name,
                               takeoff_airport_id=flight.takeoff_airport and flight.takeoff_airport.id,
                               takeoff_airport_country_code=flight.takeoff_airport and flight.takeoff_airport.country_code.lower(),
                               takeoff_airport_country_name=flight.takeoff_airport and country_name(flight.takeoff_airport.country_code),
                               aircraft=(flight.model and flight.model.name) or (flight.igc_file.model and '[' + flight.igc_file.model + ']'),
                               aircraft_reg=flight.registration or flight.igc_file.registration or "Unknown",
                               flight_id=flight.id,
                               num_comments=num_comments))

        return jsonify(aaData=aaData, **response_dict)

    else:
        if not date:
            flights = flights.order_by(Flight.date_local.desc())

        flights_count = flights.count()
        if flights_count > int(current_app.config.get('SKYLINES_LISTS_SERVER_SIDE', 250)):
            limit = int(current_app.config.get('SKYLINES_LISTS_DISPLAY_LENGTH', 50))
        else:
            limit = int(current_app.config.get('SKYLINES_LISTS_SERVER_SIDE', 250))

        flights = flights.order_by(Flight.index_score.desc())
        flights = flights.limit(limit)

        return render_template('flights/list.jinja',
                               tab=tab, date=date, pilot=pilot, club=club,
                               airport=airport, flights=flights,
                               flights_count=flights_count)
Example #3
0
    def __do_list(self, tab, kw, date=None, pilot=None, club=None, airport=None, \
                  pinned=None, filter=None, columns=None):
        pilot_alias = aliased(User, name='pilot')
        owner_alias = aliased(User, name='owner')

        subq = DBSession.query(FlightComment.flight_id,
                               func.count('*').label('count')) \
               .group_by(FlightComment.flight_id).subquery()

        flights = DBSession.query(Flight, subq.c.count) \
            .outerjoin(Flight.igc_file) \
            .options(contains_eager(Flight.igc_file)) \
            .outerjoin(owner_alias, IGCFile.owner) \
            .options(contains_eager(Flight.igc_file, IGCFile.owner, alias=owner_alias)) \
            .outerjoin(pilot_alias, Flight.pilot) \
            .options(contains_eager(Flight.pilot, alias=pilot_alias)) \
            .options(joinedload(Flight.co_pilot)) \
            .outerjoin(Flight.club) \
            .options(contains_eager(Flight.club)) \
            .outerjoin(Flight.takeoff_airport) \
            .options(contains_eager(Flight.takeoff_airport)) \
            .outerjoin(Flight.model) \
            .options(contains_eager(Flight.model)) \
            .outerjoin((subq, Flight.comments))

        if date:
            flights = flights.filter(Flight.date_local == date)

        if pilot:
            flights = flights.filter(or_(Flight.pilot == pilot,
                                         Flight.co_pilot == pilot))
        if club:
            flights = flights.filter(Flight.club == club)

        if airport:
            flights = flights.filter(Flight.takeoff_airport == airport)

        if pinned:
            flights = flights.filter(Flight.id.in_(pinned))

        if filter is not None:
            flights = flights.filter(filter)

        if request.response_type == 'application/json':
            if not columns:
                columns = {
                    0: (Flight, 'date_local'),
                    1: (Flight, 'index_score'),
                    2: (pilot_alias, 'display_name'),
                    3: (Flight, 'olc_classic_distance'),
                    4: (Airport, 'name'),
                    5: (Club, 'name'),
                    6: (AircraftModel, 'name'),
                    7: (Flight, 'takeoff_time'),
                    8: (Flight, 'id'),
                    9: (Flight, 'num_comments'),
                }

            flights, response_dict = GetDatatableRecords(kw, flights, columns)

            aaData = []
            for flight, num_comments in flights:
                aaData.append(dict(takeoff_time=flight.takeoff_time.strftime('%H:%M'),
                                   landing_time=flight.landing_time.strftime('%H:%M'),
                                   date=flight.date_local.strftime('%d.%m.%Y'),
                                   date_formatted=format_date(flight.date_local),
                                   index_score=flight.index_score,
                                   olc_classic_distance=flight.olc_classic_distance,
                                   pilot_id=flight.pilot_id,
                                   pilot=flight.pilot and flight.pilot.display_name,
                                   co_pilot_id=flight.co_pilot_id,
                                   co_pilot=flight.co_pilot and flight.co_pilot.display_name,
                                   club_id=flight.club_id,
                                   club=flight.club and truncate(flight.club.name, 25),
                                   owner=flight.igc_file.owner.display_name,
                                   takeoff_airport=flight.takeoff_airport and flight.takeoff_airport.name,
                                   takeoff_airport_id=flight.takeoff_airport and flight.takeoff_airport.id,
                                   takeoff_airport_country_code=flight.takeoff_airport and flight.takeoff_airport.country_code.lower(),
                                   takeoff_airport_country_name=flight.takeoff_airport and country_name(flight.takeoff_airport.country_code),
                                   aircraft=(flight.model and flight.model.name) or (flight.igc_file.model and '[' + flight.igc_file.model + ']'),
                                   aircraft_reg=flight.registration or flight.igc_file.registration or "Unknown",
                                   flight_id=flight.id,
                                   num_comments=num_comments))

            return dict(response_dict, aaData=aaData)

        else:
            if not date:
                flights = flights.order_by(desc(Flight.date_local))

            flights_count = flights.count()
            if flights_count > int(config.get('skylines.lists.server_side', 250)):
                limit = int(config.get('skylines.lists.display_length', 50))
            else:
                limit = int(config.get('skylines.lists.server_side', 250))

            flights = flights.order_by(desc(Flight.index_score))
            flights = flights.limit(limit)
            return dict(tab=tab, date=date, pilot=pilot, club=club, airport=airport,
                        flights=flights, flights_count=flights_count)
Example #4
0
    def __do_list(self, tab, kw, date=None, pilot=None, club=None, airport=None, \
                  pinned=None, filter=None, columns=None):
        flights = DBSession.query(Flight) \
            .outerjoin(Flight.pilot) \
            .outerjoin(Flight.igc_file) \
            .outerjoin(Flight.takeoff_airport) \
            .outerjoin(Flight.model)

        if date:
            flights = flights.filter(between(Flight.takeoff_time,
                                             date, date + timedelta(days=1)))
        if pilot:
            flights = flights.filter(or_(Flight.pilot == pilot,
                                         Flight.co_pilot == pilot))
        if club:
            flights = flights.filter(Flight.club == club)

        if airport:
            flights = flights.filter(Flight.takeoff_airport == airport)

        if pinned:
            flights = flights.filter(Flight.id.in_(pinned))

        if filter is not None:
            flights = flights.filter(filter)

        if request.response_type == 'application/json':
            if not columns:
                columns = {
                    0: 'takeoff_time',
                    1: 'olc_plus_score',
                    2: 'display_name',
                    3: 'olc_classic_distance',
                    4: 'airports.name',
                    5: 'flights.club_id',
                    6: 'models.name',
                    7: 'takeoff_time',
                    8: 'id',
                    9: 'num_comments',
                }

            flights, response_dict = GetDatatableRecords(kw, flights, columns)

            aaData = []
            for flight in flights:
                aaData.append(dict(takeoff_time = flight.takeoff_time.strftime('%H:%M'),
                                   landing_time = flight.landing_time.strftime('%H:%M'),
                                   date = flight.takeoff_time.strftime('%d.%m.%Y'),
                                   date_formatted = format_date(flight.takeoff_time),
                                   olc_plus_score = flight.olc_plus_score,
                                   olc_classic_distance = flight.olc_classic_distance,
                                   pilot_id = flight.pilot_id,
                                   pilot = flight.pilot and flight.pilot.display_name,
                                   co_pilot_id = flight.co_pilot_id,
                                   co_pilot = flight.co_pilot and flight.co_pilot.display_name,
                                   club_id = flight.club_id,
                                   club = flight.club and truncate(flight.club.name, 25),
                                   owner = flight.igc_file.owner.display_name,
                                   takeoff_airport = flight.takeoff_airport and flight.takeoff_airport.name,
                                   takeoff_airport_id = flight.takeoff_airport and flight.takeoff_airport.id,
                                   takeoff_airport_country_code = flight.takeoff_airport and flight.takeoff_airport.country_code.lower(),
                                   aircraft = (flight.model and flight.model.name) or (flight.igc_file.model and '[' + flight.igc_file.model + ']'),
                                   aircraft_reg = flight.registration or flight.igc_file.registration or "Unknown",
                                   flight_id = flight.id,
                                   num_comments = len(flight.comments)))

            return dict(response_dict, aaData = aaData)

        else:
            if date:
                flights = flights.order_by(desc(Flight.olc_plus_score))
            else:
                flights = flights.order_by(desc(Flight.takeoff_time))

            flights_count = flights.count()
            if flights_count > int(config.get('skylines.lists.server_side', 250)):
                limit = int(config.get('skylines.lists.display_length', 50))
            else:
                limit = int(config.get('skylines.lists.server_side', 250))

            flights = flights.order_by(desc(Flight.takeoff_time)).limit(limit)
            return dict(tab = tab, date=date, pilot=pilot, club=club, airport=airport,
                        flights = flights, flights_count = flights_count)