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)
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)
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)
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)