def thread_controller(self): while True: try: util.STDOUT.write("Choose Discipline:\n") for discipline in self.profitable_items.keys(): util.STDOUT.write("\t"+str(discipline)+"\n") util.STDOUT.write("\tRefresh\n\tKill\n") discipline = raw_input() if discipline == "Refresh": continue elif discipline == "+v": self.verbosity += 1 continue elif discipline == "-v": self.verbosity -= 1 continue elif discipline == "Kill": util.STDOUT.write("Killing thread\n") self.kill = True break elif discipline[:5] == "exec ": exec discipline[5:] continue if not self.locks.get(discipline+"_lock").acquire(False): util.STDOUT.write("Could not acquire: "+discipline+"_lock\n") continue hq = self.profitable_items.get(discipline, []) top_5 = [] try: for i in range(0,5): top_5.append(heapq.heappop(hq)._item) except IndexError: pass except Exception as e: util.STDERR.write(str(e)+"\n") self.locks.get(discipline+"_lock").release() for i in top_5: qty, profit = i.crafting_profit(verbosity = self.verbosity) util.STDOUT.write(i.detailed_recipe(qty)) util.STDOUT.write("Make "+ str(qty) +" for total profit: " + util.gold_repr(profit) + "\n") for k, v in i.get_shoping_list(qty).iteritems(): util.STDOUT.write(str(v).ljust(4) + " x " + str(k.name) + "\n") except Exception as e: util.STDERR.write(str(e)+"\n")
def detailed_recipe(self, make_qty=1, verbosity=0): if self.best_location_name() != "Crafting": # Name Price @ Locations return ( self.name.ljust(45) + util.gold_repr(self.best_price()).rjust(12) + " @ " + self.best_location_name() + "\n" ) # Name [Recipe_Disciplies][Recipe_Flags] part_str = ( self.name.ljust(45) + str(self.best_recipe._disciplines) + str(self.best_recipe._flags if self.best_recipe._flags else "") + "\n" ) # 10 x Name Price @ Locations for sub_qty, sub_item in self.best_recipe._ingredients: part_str += ( str(make_qty * sub_qty / sub_item.best_recipe.serving) + " x " + sub_item.detailed_recipe(make_qty * sub_qty / sub_item.best_recipe.serving) ) part_str = ("\n ".join(part_str.split("\n")))[:-2] if verbosity >= 1: part_str += ( "Expense: " + util.gold_repr(self.best_price()) + " --- Revenue: " + util.gold_repr(self.buy_orders[0].value * 0.85) + " --- Profit: " + util.gold_repr(self.buy_orders[0].value * 0.85 - self.best_price()) + "\n" ) return part_str
def __repr__(self): return str(self.qty) + " @ " + util.gold_repr(self.value)
def test_gold_representation_str2(self): price = "34" str_price = util.gold_repr(price) self.assertEqual(" 34c", str_price)
def test_gold_representation_str(self): price = "hamburger" str_price = util.gold_repr(price) self.assertEqual("Non gold value (hamburger)", str_price)
def test_gold_representation_inf(self): price = float("inf") str_price = util.gold_repr(price) self.assertEqual("Non gold value (inf)", str_price)
def test_gold_representation_float(self): price = 12.5 str_price = util.gold_repr(price) self.assertEqual(" 12c", str_price)
def test_gold_representation_gold(self): price = 12345 str_price = util.gold_repr(price) self.assertEqual(" 1g 23s 45c", str_price)
def test_gold_representation_silver(self): price = 123 str_price = util.gold_repr(price) self.assertEqual(" 1s 23c", str_price)
def test_gold_representation_copper(self): price = 5 str_price = util.gold_repr(price) self.assertEqual(" 5c", str_price)
def test_gold_representation_small(self): price = 12 str_price = util.gold_repr(price) self.assertEqual(" 12c", str_price)
def test_gold_representation_large(self): price = 1234567 str_price = util.gold_repr(price) self.assertEqual(" 123g 45s 67c", str_price)
def test_gold_representation_negative(self): price = -500 str_price = util.gold_repr(price) self.assertEqual("-5s 00c", str_price)
def test_gold_representation_zero(self): price = 0 str_price = util.gold_repr(price) self.assertEqual(" 0c", str_price)
def test_gold_representation_positive(self): price = 500 str_price = util.gold_repr(price) self.assertEqual(" 5s 00c", str_price)