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")
Example #2
0
    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
Example #3
0
 def __repr__(self):
     return str(self.qty) + " @ " + util.gold_repr(self.value)
Example #4
0
 def test_gold_representation_str2(self):
     price =  "34"
     str_price = util.gold_repr(price)
     self.assertEqual(" 34c", str_price)
Example #5
0
 def test_gold_representation_str(self):
     price =  "hamburger"
     str_price = util.gold_repr(price)
     self.assertEqual("Non gold value (hamburger)", str_price)
Example #6
0
 def test_gold_representation_inf(self):
     price =  float("inf")
     str_price = util.gold_repr(price)
     self.assertEqual("Non gold value (inf)", str_price)
Example #7
0
 def test_gold_representation_float(self):
     price =  12.5
     str_price = util.gold_repr(price)
     self.assertEqual(" 12c", str_price)
Example #8
0
 def test_gold_representation_gold(self):
     price =  12345
     str_price = util.gold_repr(price)
     self.assertEqual(" 1g 23s 45c", str_price)
Example #9
0
 def test_gold_representation_silver(self):
     price = 123
     str_price = util.gold_repr(price)
     self.assertEqual(" 1s 23c", str_price)
Example #10
0
 def test_gold_representation_copper(self):
     price = 5
     str_price = util.gold_repr(price)
     self.assertEqual(" 5c", str_price)
Example #11
0
 def test_gold_representation_small(self):
     price = 12
     str_price = util.gold_repr(price)
     self.assertEqual(" 12c", str_price)
Example #12
0
 def test_gold_representation_large(self):
     price = 1234567
     str_price = util.gold_repr(price)
     self.assertEqual(" 123g 45s 67c", str_price)
Example #13
0
 def test_gold_representation_negative(self):
     price = -500
     str_price = util.gold_repr(price)
     self.assertEqual("-5s 00c", str_price)
Example #14
0
 def test_gold_representation_zero(self):
     price = 0
     str_price = util.gold_repr(price)
     self.assertEqual(" 0c", str_price)
Example #15
0
 def test_gold_representation_positive(self):
     price = 500
     str_price = util.gold_repr(price)
     self.assertEqual(" 5s 00c", str_price)