def run(results, cmdenv, tdb): origin = cmdenv.startStation if not origin.itemCount: raise CommandLineError( "No trade data available for {}".format(origin.name()) ) buying, selling = cmdenv.buying, cmdenv.selling results.summary = ResultRow() results.summary.origin = origin results.summary.buying = cmdenv.buying results.summary.selling = cmdenv.selling tdb.getAverageSelling() tdb.getAverageBuying() cur = tdb.query(""" SELECT item_id, demand_price, demand_units, demand_level, supply_price, supply_units, supply_level, JULIANDAY('now') - JULIANDAY(modified) FROM StationItem WHERE station_id = ? """, [origin.ID]) for row in cur: it = iter(row) item = tdb.itemByID[next(it)] row = ResultRow() row.item = item row.buyCr = int(next(it) or 0) row.avgBuy = tdb.avgBuying.get(item.ID, 0) units, level = int(next(it) or 0), int(next(it) or 0) row.buyUnits = units row.buyLevel = level row.demand = render_units(units, level) if not selling: hasBuy = (row.buyCr or units or level) else: hasBuy = False row.sellCr = int(next(it) or 0) row.avgSell = tdb.avgSelling.get(item.ID, 0) units, level = int(next(it) or 0), int(next(it) or 0) row.sellUnits = units row.sellLevel = level row.supply = render_units(units, level) if not buying: hasSell = (row.sellCr or units or level) else: hasSell = False row.age = float(next(it) or 0) if hasBuy or hasSell: results.rows.append(row) if not results.rows: raise CommandLineError("No items found") results.rows.sort(key=lambda row: row.item.dbname) results.rows.sort(key=lambda row: row.item.category.dbname) return results