def togglePin(request): if request.session.get('player') and request.method == "POST": post_payload = get_payload(request) player = getPlayer(request.session["player"].get("tId")) pinnedAwards = json.loads(player.awardsPinn) awardId = post_payload.get("awardId") if awardId is not None and not post_payload.get("check", False): if awardId in pinnedAwards: pinnedAwards.remove(awardId) else: if awardId.split("_")[-1].isdigit(): if len(pinnedAwards) == 3: pinnedAwards.pop(0) pinnedAwards.append(awardId) player.awardsPinn = json.dumps(pinnedAwards) player.save() if request.session.get('json-output'): return JsonResponse({"awardId": awardId, "pinnedAwards": pinnedAwards}, status=200) else: return render(request, "awards/pin-button.html", {"player": player, "awardId": awardId, "pinnedAwards": pinnedAwards}) else: message = "You might want to log in." if request.method == "POST" else "You need to post. Don\'t try to be a smart ass." return returnError(type=403, msg=message)
def my(request): try: if request.session.get('player'): player = getPlayer( request.session.get("player", {}).get("tId", -1)) # get/update inventory inventory = player.getInventory(force=True) error = inventory if 'apiError' in inventory else False # get items itemsOnMarket = Item.objects.filter( tId__in=inventory.get("bazaar", {})).order_by('tName') tTypes = { r["tType"] for r in itemsOnMarket.values("tType").distinct() } items = [] # build item list for tType in tTypes: item_list = [] for item in itemsOnMarket.filter(tType=tType): item.stockI = inventory.get("inventory", {}).get(str(item.tId), [0, 0])[0] item.stockB = inventory.get("bazaar", {}).get(str(item.tId), [0, 0])[0] item.stockBP = inventory.get("bazaar", {}).get( str(item.tId), [0, 0])[1] item.stockD = inventory.get("display", {}).get(str(item.tId), [0, 0])[0] item.stock = item.stockI + item.stockB + item.stockD item_list.append(item) items.append((tType, item_list)) context = { "player": player, 'list': json.loads(player.bazaarList), "bazaarcat": True, "allItemsOnMarket": items, "view": { "refreshType": True, "timer": True, "summaryByType": True, "loopType": True }, "keyLevelRequired": 2 } if error: context.update(error) page = 'bazaar/content-reload.html' if request.method == 'POST' else "bazaar.html" return render(request, page, context) else: return returnError(type=403, msg="You might want to log in.") except Exception as e: return returnError(exc=e, session=request.session)
def togglePin(request): try: if request.session.get('player') and request.method == "POST": player = getPlayer(request.session["player"].get("tId")) pinnedAwards = json.loads(player.awardsPinn) awardId = request.POST.get("awardId") if awardId is not None and not request.POST.get("check", False): if awardId in pinnedAwards: pinnedAwards.remove(awardId) else: if len(pinnedAwards) == 3: pinnedAwards.pop(0) pinnedAwards.append(awardId) player.awardsPinn = json.dumps(pinnedAwards) player.save() return render(request, "awards/pin-button.html", { "player": player, "awardId": awardId, "pinnedAwards": pinnedAwards }) else: message = "You might want to log in." if request.method == "POST" else "You need to post. Don\'t try to be a smart ass." return returnError(type=403, msg=message) except Exception as e: return returnError(exc=e, session=request.session)
def index(request): try: tId = request.session["player"].get("tId") if request.session.get( 'player') else -1 player = getPlayer(tId) awardsPlayer, awardsTorn, error = player.getAwards(force=True) # get graph data awards = awardsPlayer.get('awards') pinnedAwards = awardsPlayer.get('pinnedAwards') graph = [] for k, h in sorted(awardsTorn.get("honors").items(), key=lambda x: x[1]["circulation"], reverse=True): # if h.get("rarity") not in ["Unknown Rarity"]: if h.get("circulation", 0) > 0: graph.append([ h.get("name", "?"), h.get("circulation", 0), int(h.get("achieve", 0)), h.get("img", ""), h.get("rScore", 0), h.get("unreach", 0) ]) graph2 = [] for k, h in sorted(awardsTorn.get("medals").items(), key=lambda x: x[1]["circulation"], reverse=True): # if h.get("rarity") not in ["Unknown Rarity"]: if h.get("circulation", 0) > 0: graph2.append([ h.get("name", "?"), h.get("circulation", 0), int(h.get("achieve", 0)), h.get("img", ""), h.get("rScore", 0), h.get("unreach", 0) ]) context = { "player": player, "pinnedAwards": pinnedAwards, "graph": graph, "graph2": graph2, "awardscat": True, "view": { "awards": True } } for k, v in awardsPlayer.items(): context[k] = v if error: context.update(error) return render(request, "awards.html", context) except Exception as e: return returnError(exc=e, session=request.session)
def hofList(request): try: tId = request.session["player"].get("tId") if request.session.get('player') else -1 hof = [{"player": p, "rank": i + 1} for i, p in enumerate(Player.objects.order_by('-awardsScor').exclude(tId=-1))] awardsTorn = AwardsData.objects.first().loadAPICall() return render(request, "awards/hof-list.html", {"player": getPlayer(tId), "nAwards": len(awardsTorn["medals"]) + len(awardsTorn["honors"]), "hof": Paginator(hof, 50).get_page(request.GET.get("p_hof"))}) except Exception as e: return returnError(exc=e, session=request.session)
def documentation(request): # error codes: # 1: server error -> status 500 # 2: user error -> status 400 # 3: rate limit -> 429 # 4: torn API error -> 400 return render(request, 'api.html', { 'player': getPlayer(request.session.get('player', {'tId': -1})['tId']) })
def list(request, type): try: tId = request.session["player"].get("tId") if request.session.get('player') else -1 player = getPlayer(tId) awardsPlayer, awardsTorn, error = player.getAwards() userInfo = awardsPlayer.get('userInfo') summaryByType = awardsPlayer.get('summaryByType') pinnedAwards = awardsPlayer.get('pinnedAwards') if type in AWARDS_CAT: awards, awardsSummary = createAwards(awardsTorn, userInfo, type) graph = [] graph2 = [] for type, honors in awards.items(): for k, h in honors.items(): # if h.get("rarity", "Unknown Rarity") not in ["Unknown Rarity"]: if h.get("circulation", 0) > 0: if h.get("awardType") in ["Honor"]: graph.append([h.get("name", "?"), h.get("circulation", 0), int(h.get("achieve", 0)), h.get("img", ""), h.get("rScore", 0), h.get("unreach", 0)]) elif h.get("awardType") in ["Medal"]: graph2.append([h.get("name", "?"), h.get("circulation", 0), int(h.get("achieve", 0)), h.get("img", ""), h.get("rScore", 0), h.get("unreach", 0)]) graph = sorted(graph, key=lambda x: -x[1]) graph2 = sorted(graph2, key=lambda x: -x[1]) context = {"player": player, "view": {"awards": True}, "pinnedAwards": pinnedAwards, "awardscat": True, "awards": awards, "awardsSummary": awardsSummary, "summaryByType": summaryByType, "graph": graph, "graph2": graph2} if error: selectError = 'apiErrorSub' if request.method == 'POST' else 'apiError' context.update({selectError: error['apiError']}) page = 'awards/content-reload.html' if request.method == 'POST' else "awards.html" return render(request, page, context) else: awards = awardsPlayer.get('awards') graph = [] for k, h in sorted(awardsTorn.get("honors").items(), key=lambda x: x[1]["circulation"], reverse=True): if h.get("circulation", 0) > 0: graph.append([h.get("name", "?"), h.get("circulation", 0), int(h.get("achieve", 0)), h.get("img", ""), h.get("rScore", 0), h.get("unreach", 0)]) graph2 = [] for k, h in sorted(awardsTorn.get("medals").items(), key=lambda x: x[1]["circulation"], reverse=True): if h.get("circulation", 0) > 0: graph2.append([h.get("name", "?"), h.get("circulation", 0), int(h.get("achieve", 0)), h.get("img", ""), h.get("rScore", 0), h.get("unreach", 0)]) context = {"player": player, "view": {"awards": True}, "pinnedAwards": pinnedAwards, "awardscat": True, "awards": awards, "summaryByType": summaryByType, "graph": graph, "graph2": graph2} page = 'awards/content-reload.html' if request.method == 'POST' else "awards.html" return render(request, page, context) except Exception as e: return returnError(exc=e, session=request.session)
def showPinned(request): try: if request.session.get('player') and request.method == "POST": player = getPlayer(request.session["player"].get("tId")) awardsPlayer, awardsTorn, error = player.getAwards() pinnedAwards = awardsPlayer.get('pinnedAwards') return render(request, "awards/pin.html", {"player": player, "pinnedAwards": pinnedAwards}) else: message = "You might want to log in." if request.method == "POST" else "You need to post. Don\'t try to be a smart ass." return returnError(type=403, msg=message) except Exception as e: return returnError(exc=e, session=request.session)
def top10(request): try: player = getPlayer(request.session.get("player", {}).get("tId", -1)) bazaarJson = json.loads(player.bazaarJson) playerList = bazaarJson.get("list", []) print('[view.bazaar.default] create output items') items = {"Sell": [], "Buy": []} inventory = bazaarJson.get("inventory", dict({})) bazaar = bazaarJson.get("bazaar", dict({})) display = bazaarJson.get("display", dict({})) for item in Item.objects.filter( onMarket=True).order_by('weekTendency')[:10]: item.stockI = inventory.get(str(item.tId), 0) item.stockB = bazaar.get(str(item.tId), 0) item.stockD = display.get(str(item.tId), 0) item.stock = item.stockI + item.stockB + item.stockD items["Buy"].append(item) # item.save() for item in Item.objects.filter( onMarket=True).order_by('-weekTendency')[:10]: item.stockI = inventory.get(str(item.tId), 0) item.stockB = bazaar.get(str(item.tId), 0) item.stockD = display.get(str(item.tId), 0) item.stock = item.stockI + item.stockB + item.stockD items["Sell"].append(item) # item.save() context = { "player": player, 'list': playerList, "bazaarcat": True, "allItemsOnMarket": items, "view": { "refreshType": True, "timer": True, "loopType": True } } page = 'bazaar/content-reload.html' if request.method == 'POST' else "bazaar.html" return render(request, page, context) except Exception as e: return returnError(exc=e, session=request.session)
def hof(request): try: tId = request.session["player"].get("tId") if request.session.get('player') else -1 player = getPlayer(tId) awardsPlayer, awardsTorn, error = player.getAwards() pinnedAwards = awardsPlayer.get('pinnedAwards') userInfo = awardsPlayer.get('userInfo') summaryByType = awardsPlayer.get('summaryByType') hof_full = [{"player": p, "rank": i + 1} for i, p in enumerate(Player.objects.order_by('-awardsScor').exclude(tId=-1))] hof = Paginator(hof_full, 50).get_page(1) graph = [] for k, h in sorted(awardsTorn.get("honors").items(), key=lambda x: x[1]["circulation"], reverse=True): if h.get("circulation", 0) > 0: graph.append([h.get("name", "?"), h.get("circulation", 0), int(h.get("achieve", 0)), h.get("img", ""), h.get("rScore", 0), h.get("unreach", 0)]) graph2 = [] for k, h in sorted(awardsTorn.get("medals").items(), key=lambda x: x[1]["circulation"], reverse=True): if h.get("circulation", 0) > 0: graph2.append([h.get("name", "?"), h.get("circulation", 0), int(h.get("achieve", 0)), h.get("img", ""), h.get("rScore", 0), h.get("unreach", 0)]) context = {"player": player, "view": {"hof": True}, "nAwards": len(awardsTorn["medals"]) + len(awardsTorn["honors"]), "awardscat": True, # "awards": awardsPlayer.get('awards'), "summaryByType": summaryByType, "graph": graph, "graph2": graph2, "hof": hof, "pinnedAwards": pinnedAwards, "hofGraph": json.loads(AwardsData.objects.first().hofHistogram)} if request.session.get('json-output'): del context["player"] context["hof"] = [{"player_name": v["player"].name, "player_id": v["player"].tId, "player_faction_name": v["player"].factionNa, "player_faction_id": v["player"].factionId, "rank": v["rank"]} for v in hof_full] return JsonResponse(context, status=200) else: page = 'awards/content-reload.html' if request.method == 'POST' else "awards.html" return render(request, page, context) except Exception as e: return returnError(exc=e, session=request.session)
def default(request): try: player = getPlayer(request.session.get("player", {}).get("tId", -1)) bazaarJson = json.loads(player.bazaarJson) playerList = bazaarJson.get("list", []) print('[view.bazaar.default] get all items on market') itemsOnMarket = Item.objects.filter(onMarket=True).order_by('tName') print('[view.bazaar.default] get all tTypes') tTypes = [r["tType"] for r in itemsOnMarket.values("tType").distinct()] # print('[view.bazaar.default] {}'.format(tTypes)) print('[view.bazaar.default] create output items') items = {tType: [] for tType in tTypes} inventory = bazaarJson.get("inventory", dict({})) bazaar = bazaarJson.get("bazaar", dict({})) display = bazaarJson.get("display", dict({})) for tType in items: for item in itemsOnMarket.filter(tType=tType): item.stockI = inventory.get(str(item.tId), 0) item.stockB = bazaar.get(str(item.tId), 0) item.stockD = display.get(str(item.tId), 0) item.stock = item.stockI + item.stockB + item.stockD items[tType].append(item) # item.save() context = { "player": player, 'list': playerList, "bazaarcat": True, "allItemsOnMarket": items, "view": { "refreshType": True, "timer": True, "hideType": True, "loopType": True } } page = 'bazaar/content-reload.html' if request.method == 'POST' else "bazaar.html" return render(request, page, context) except Exception as e: return returnError(exc=e, session=request.session)
def toggle(request, itemId): try: if request.session.get('player') and request.method == "POST": player = getPlayer( request.session.get("player", {}).get("tId", -1)) playerList = json.loads(player.bazaarList) item = Item.objects.filter(tId=itemId).first() if itemId in playerList: playerList.remove(itemId) else: playerList.append(itemId) player.bazaarList = json.dumps(playerList) player.bazaarInfo = len(playerList) player.save() # get/update inventory inventory = player.getInventory() item.stockI = inventory.get("inventory", {}).get(str(item.tId), [0, 0])[0] item.stockB = inventory.get("bazaar", {}).get(str(item.tId), [0, 0])[0] item.stockBP = inventory.get("bazaar", {}).get(str(item.tId), [0, 0])[1] item.stockD = inventory.get("display", {}).get(str(item.tId), [0, 0])[0] item.stock = item.stockI + item.stockB + item.stockD context = { 'player': player, 'item': item, 'list': json.loads(player.bazaarList), "view": { "timer": True } } return render(request, "bazaar/item.html", context) else: message = "You might want to log in." if request.method == "POST" else "You need to post. Don\'t try to be a smart ass." return returnError(type=403, msg=message) except Exception as e: return returnError(exc=e, session=request.session)
def custom(request): try: if request.session.get('player'): player = getPlayer( request.session.get("player", {}).get("tId", -1)) bazaarJson = json.loads(player.bazaarJson) playerList = bazaarJson.get("list", []) print('[view.bazaar.default] get all items on player\'s list') itemsOnMarket = Item.objects.filter( tId__in=playerList).order_by('tName') print('[view.bazaar.default] create output items') items = {"Custom": []} inventory = bazaarJson.get("inventory", dict({})) bazaar = bazaarJson.get("bazaar", dict({})) display = bazaarJson.get("display", dict({})) for item in itemsOnMarket: item.stockI = inventory.get(str(item.tId), 0) item.stockB = bazaar.get(str(item.tId), 0) item.stockD = display.get(str(item.tId), 0) item.stock = item.stockI + item.stockB + item.stockD items["Custom"].append(item) # item.save() context = { "player": player, 'list': playerList, "bazaarcat": True, "allItemsOnMarket": items, "view": { "refreshType": True, "timer": True, "loopType": True } } page = 'bazaar/content-reload.html' if request.method == 'POST' else "bazaar.html" return render(request, page, context) else: return returnError(type=403, msg="You might want to log in.") except Exception as e: return returnError(exc=e, session=request.session)
def update(request, itemId): try: if request.session.get('player') and request.method == "POST": player = getPlayer( request.session.get("player", {}).get("tId", -1)) key = player.getKey() item = Item.objects.filter(tId=itemId).first() baz = item.update_bazaar(key=key, n=BazaarData.objects.first().nItems) error = baz if 'apiError' in baz else False # get/update inventory inventory = player.getInventory() item.stockI = inventory.get("inventory", {}).get(str(item.tId), [0, 0])[0] item.stockB = inventory.get("bazaar", {}).get(str(item.tId), [0, 0])[0] item.stockBP = inventory.get("bazaar", {}).get(str(item.tId), [0, 0])[1] item.stockD = inventory.get("display", {}).get(str(item.tId), [0, 0])[0] item.stock = item.stockI + item.stockB + item.stockD context = { 'player': player, 'list': json.loads(player.bazaarList), 'item': item, "view": { "timer": True } } if error: context.update(error) return render(request, "bazaar/item.html", context) else: message = "You might want to log in." if request.method == "POST" else "You need to post. Don\'t try to be a smart ass." return returnError(type=403, msg=message) except Exception as e: return returnError(exc=e, session=request.session)
def index(request): try: player = getPlayer(request.session.get("player", {}).get("tId", -1)) awardsPlayer, awardsTorn, error = player.getAwards(force=True) # get graph data # awards = awardsPlayer.get('awards') pinnedAwards = awardsPlayer.get('pinnedAwards') graph = [] for k, h in sorted(awardsTorn.get("honors").items(), key=lambda x: x[1]["circulation"], reverse=True): # if h.get("rarity") not in ["Unknown Rarity"]: if h.get("circulation", 0) > 0: graph.append([h.get("name", "?"), h.get("circulation", 0), int(h.get("achieve", 0)), h.get("img", ""), h.get("rScore", 0), h.get("unreach", 0)]) graph2 = [] for k, h in sorted(awardsTorn.get("medals").items(), key=lambda x: x[1]["circulation"], reverse=True): # if h.get("rarity") not in ["Unknown Rarity"]: if h.get("circulation", 0) > 0: graph2.append([h.get("name", "?"), h.get("circulation", 0), int(h.get("achieve", 0)), h.get("img", ""), h.get("rScore", 0), h.get("unreach", 0)]) context = {"player": player, "pinnedAwards": pinnedAwards, "graph": graph, "graph2": graph2, "awardscat": True, "view": {"awards": True}} for k, v in awardsPlayer.items(): context[k] = v if error: context.update(error) if request.session.get('json-output'): context["player"] = {"awardsUpda": player.awardsUpda, "awardsScor": player.awardsScor, "awardsNumb": player.awardsNumb, "awardsPinn": json.loads(player.awardsPinn)} return JsonResponse(context, status=200) else: return render(request, "awards.html", context) except Exception as e: return returnError(exc=e, session=request.session)
def prices(request, tId, period=None): try: if request.method == "POST": player = getPlayer( request.session.get("player", {}).get("tId", -1)) stock = {'t': Stock.objects.filter(tId=tId).first()} # timestamp rounded at the hour ts = int(timezone.now().timestamp()) ts = int(ts) - int(ts) % 3600 page = "stock/prices.html" if period is None else "stock/prices-graphs.html" period = "7" if period is None else period try: periodS = int(period) * 24 * 3600 except BaseException: periodS = ts history = stock.get('t').history_set.filter( timestamp__gte=(ts - periodS)).order_by('timestamp') av = stock.get('t').averagePrice graph = [] firstTS = history.first().timestamp lastTS = history.last().timestamp # if periodS > 2592000: # use averaged values for larg graphs (> 1 month) if periodS > 1209600: # use averaged values for larg graphs (> 2 weeks) floatingTS = history.first().timestamp avg_val = [0, 0, 0, 0] n = 0 for h in history: n += 1 t = h.timestamp dt = stock.get('t').dayTendencyA * float(t) + stock.get( 't').dayTendencyB # day tendancy wt = stock.get('t').weekTendencyA * float(t) + stock.get( 't').weekTendencyB # week tendancy avg_val[0] += h.timestamp avg_val[1] += h.tCurrentPrice avg_val[2] += h.tAvailableShares avg_val[3] += h.tTotalShares # make the average and save the line every week if t - floatingTS > (lastTS - firstTS) / 256: floatingTS = t line = [ avg_val[0] // n, avg_val[1] / float(n), dt, wt, avg_val[2] // n, avg_val[3] // n, h.tForecast, h.tDemand, av ] graph.append(line) avg_val = [0, 0, 0, 0] n = 0 # record last point if n > 0: line = [ avg_val[0] // n, avg_val[1] / float(n), dt, wt, avg_val[2] // n, avg_val[3] // n, h.tForecast, h.tDemand, av ] graph.append(line) else: # use all values for recent data for h in history: t = h.timestamp dt = stock.get('t').dayTendencyA * float(t) + stock.get( 't').dayTendencyB # day tendancy wt = stock.get('t').weekTendencyA * float(t) + stock.get( 't').weekTendencyB # week tendancy line = [ t, h.tCurrentPrice, dt, wt, h.tAvailableShares, h.tTotalShares, h.tForecast, h.tDemand, av ] graph.append(line) # convert timestamp to date and remove clean interplation lines # keep last point as is (for interpolation problems) graphLength = 0 maxTS = ts for i, (t, p, dt, wt, _, _, _, _, _) in enumerate(graph[:-1]): # remove 0 prices if not int(p): graph[i][1] = "null" else: graphLength += 1 if int(maxTS) - int(t) > 3600 * 24 or dt < 0: graph[i][2] = "null" if int(maxTS) - int(t) > 3600 * 24 * 7 or wt < 0: graph[i][3] = "null" # convert timestamp to date graph[i][0] = timestampToDate(int(t)) graph[-1][0] = timestampToDate(graph[-1][0]) # add personal stocks to torn stocks for k, v in json.loads(player.stocksJson).items(): if int(v['stock_id']) == int(tId): # add profit v['profit'] = (float(stock.get('t').tCurrentPrice) - float( v["bought_price"])) / float(v["bought_price"]) # add if bonus if stock.get('t').tRequirement: v['bonus'] = 1 if v['shares'] >= stock.get( 't').tRequirement else 0 if stock.get('p') is None: stock['p'] = [v] else: stock['p'].append(v) context = { 'stock': stock, "graph": graph, "graphLength": graphLength, "period": period } return render(request, page, context) else: message = "You might want to log in." if request.method == "POST" else "You need to post. Don\'t try to be a smart ass." return returnError(type=403, msg=message) except Exception: return returnError()
def sets(request): try: player = getPlayer(request.session.get("player", {}).get("tId", -1)) bazaarJson = json.loads(player.bazaarJson) playerList = bazaarJson.get("list", []) print('[view.bazaar.default] get all items on market') allItems = Item.objects.all().order_by('tName') print('[view.bazaar.default] get all tTypes') tTypes = ["Flower", "Plushie"] # print('[view.bazaar.default] {}'.format(tTypes)) print('[view.bazaar.default] create output items') sets = { "Plushie set": { "ids": [ 186, 187, 215, 258, 261, 266, 268, 269, 273, 274, 281, 384, 618 ], "type": "Plushie", "items": [], "quantities": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], "points": 10, "market_value": 0, }, "Exotic flower set": { "ids": [260, 263, 264, 267, 271, 272, 276, 277, 282, 385, 617], "type": "Flower", "items": [], "quantities": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], "points": 10, "market_value": 0, }, "Medieval coin set": { "ids": [450, 451, 452], "type": "Coins", "items": [], "quantities": [1, 1, 1], "points": 100, "market_value": 0, }, "Quran Scripts set": { "ids": [455, 456, 457], "type": "Scripts", "items": [], "quantities": [1, 1, 1], "points": 1000, "market_value": 0, }, "Senet game set": { "ids": [460, 461, 462], "type": "Senet", "items": [], "quantities": [5, 5, 1], "points": 2000, "market_value": 0, }, "Vairocana Buddha": { "ids": [454], "type": "Vairocana", "items": [], "quantities": [1], "points": 100, "market_value": 0, }, "Ganesha Sculpture": { "ids": [453], "type": "Ganesha", "items": [], "quantities": [1], "points": 250, "market_value": 0, }, "Shabti Sculpture": { "ids": [458], "type": "Shabti", "items": [], "quantities": [1], "points": 500, "market_value": 0, }, "Egyptian Amulet": { "ids": [459], "type": "Egyptian", "items": [], "quantities": [1], "points": 10000, "market_value": 0, }, } inventory = bazaarJson.get("inventory", dict({})) bazaar = bazaarJson.get("bazaar", dict({})) display = bazaarJson.get("display", dict({})) point_value = BazaarData.objects.first().pointsValue for tType, set in sets.items(): for item in allItems.filter(tId__in=set.get('ids', [])): item.stockI = inventory.get(str(item.tId), 0) item.stockB = bazaar.get(str(item.tId), 0) item.stockD = display.get(str(item.tId), 0) item.stock = item.stockI + item.stockB + item.stockD set["items"].append(item) set["market_value"] += set["quantities"][set["ids"].index( item.tId)] * item.tMarketValue set["points_value"] = point_value * set["points"] set["benefits"] = set["points_value"] - set["market_value"] set["benefitsps"] = 100 * ( set["points_value"] - set["market_value"]) / set["points_value"] # item.save() context = { "player": player, 'list': playerList, "bazaarcat": True, "sets": sets, "view": { "refreshType": True, "timer": True, "loopSets": True } } page = 'bazaar/content-reload.html' if request.method == 'POST' else "bazaar.html" return render(request, page, context) except Exception as e: return returnError(exc=e, session=request.session)
def index(request): try: player = getPlayer(request.session.get("player", {}).get("tId", -1)) key = player.getKey() bazaarJson = json.loads(player.bazaarJson) playerList = bazaarJson.get("list", []) player.bazaarInfo = "{}".format(len(playerList)) # update inventory of bazaarJson error = False if player.tId > 0: invtmp = apiCall("user", "", "inventory,display,bazaar", key) for k, v in invtmp.items(): if v is None: invtmp[k] = dict({}) if 'apiError' in invtmp: error = invtmp else: bazaarJson["inventory"] = { str(v["ID"]): v["quantity"] for v in invtmp.get("inventory", dict({})) } bazaarJson["bazaar"] = { str(v["ID"]): v["quantity"] for v in invtmp.get("bazaar", dict({})) } bazaarJson["display"] = { str(v["ID"]): v["quantity"] for v in invtmp.get("display", dict({})) } player.bazaarJson = json.dumps(bazaarJson) player.save() print('[view.bazaar.default] get all items on market') itemsOnMarket = Item.objects.filter(onMarket=True).order_by('tName') print('[view.bazaar.default] get all tTypes') tTypes = [r["tType"] for r in itemsOnMarket.values("tType").distinct()] # print('[view.bazaar.default] {}'.format(tTypes)) print('[view.bazaar.default] create output items') items = {tType: [] for tType in tTypes} inventory = bazaarJson.get("inventory", dict({})) bazaar = bazaarJson.get("bazaar", dict({})) display = bazaarJson.get("display", dict({})) for tType in items: for item in itemsOnMarket.filter(tType=tType): item.stockI = inventory.get(str(item.tId), 0) item.stockB = bazaar.get(str(item.tId), 0) item.stockD = display.get(str(item.tId), 0) item.stock = item.stockI + item.stockB + item.stockD items[tType].append(item) # item.save() context = { "player": player, 'list': playerList, "bazaarcat": True, "allItemsOnMarket": items, "view": { "refreshType": True, "timer": True, "hideType": True, "loopType": True } } if error: context.update(error) return render(request, 'bazaar.html', context) # else: # return returnError(type=403, msg="You might want to log in.") except Exception as e: return returnError(exc=e, session=request.session)
def sets(request): try: player = getPlayer(request.session.get("player", {}).get("tId", -1)) # get items allItems = Item.objects.all().order_by('tName') tTypes = ["Flower", "Plushie"] sets = { "Plushie set": { "ids": [ 186, 187, 215, 258, 261, 266, 268, 269, 273, 274, 281, 384, 618 ], "type": "Plushie", "items": [], "quantities": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], "points": 10, "market_value": 0, }, "Exotic flower set": { "ids": [260, 263, 264, 267, 271, 272, 276, 277, 282, 385, 617], "type": "Flower", "items": [], "quantities": [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], "points": 10, "market_value": 0, }, "Medieval coin set": { "ids": [450, 451, 452], "type": "Coins", "items": [], "quantities": [1, 1, 1], "points": 100, "market_value": 0, }, "Quran Scripts set": { "ids": [455, 456, 457], "type": "Scripts", "items": [], "quantities": [1, 1, 1], "points": 1000, "market_value": 0, }, "Senet game set": { "ids": [460, 461, 462], "type": "Senet", "items": [], "quantities": [5, 5, 1], "points": 2000, "market_value": 0, }, "Vairocana Buddha": { "ids": [454], "type": "Vairocana", "items": [], "quantities": [1], "points": 100, "market_value": 0, }, "Ganesha Sculpture": { "ids": [453], "type": "Ganesha", "items": [], "quantities": [1], "points": 250, "market_value": 0, }, "Shabti Sculpture": { "ids": [458], "type": "Shabti", "items": [], "quantities": [1], "points": 500, "market_value": 0, }, "Egyptian Amulet": { "ids": [459], "type": "Egyptian", "items": [], "quantities": [1], "points": 10000, "market_value": 0, }, } # get/update inventory inventory = player.getInventory() error = inventory if 'apiError' in inventory else False point_value = BazaarData.objects.first().pointsValue for tType, set in sets.items(): for item in allItems.filter(tId__in=set.get('ids', [])): item.stockI = inventory.get("inventory", {}).get(str(item.tId), [0, 0])[0] item.stockB = inventory.get("bazaar", {}).get(str(item.tId), [0, 0])[0] item.stockBP = inventory.get("bazaar", {}).get(str(item.tId), [0, 0])[1] item.stockD = inventory.get("display", {}).get(str(item.tId), [0, 0])[0] item.stock = item.stockI + item.stockB + item.stockD set["items"].append(item) set["market_value"] += set["quantities"][set["ids"].index( item.tId)] * item.tMarketValue # item.save() set["points_value"] = point_value * set["points"] set["benefits"] = set["points_value"] - set["market_value"] set["benefitsps"] = 100 * ( set["points_value"] - set["market_value"]) / set["points_value"] context = { "player": player, 'list': json.loads(player.bazaarList), "bazaarcat": True, "sets": sets, "view": { "refreshType": True, "timer": True, "loopSets": True }, "keyLevelRequired": 2 } if error: context.update(error) page = 'bazaar/content-reload.html' if request.method == 'POST' else "bazaar.html" return render(request, page, context) except Exception as e: return returnError(exc=e, session=request.session)
def top10(request): try: player = getPlayer(request.session.get("player", {}).get("tId", -1)) # get items items = [] # get/update inventory inventory = player.getInventory() error = inventory if 'apiError' in inventory else False # build item list item_list = [] for item in Item.objects.filter( onMarket=True).order_by('weekTendency')[:10]: item.stockI = inventory.get("inventory", {}).get(str(item.tId), [0, 0])[0] item.stockB = inventory.get("bazaar", {}).get(str(item.tId), [0, 0])[0] item.stockBP = inventory.get("bazaar", {}).get(str(item.tId), [0, 0])[1] item.stockD = inventory.get("display", {}).get(str(item.tId), [0, 0])[0] item.stock = item.stockI + item.stockB + item.stockD item_list.append(item) items.append(('Buy', item_list)) item_list = [] for item in Item.objects.filter( onMarket=True).order_by('-weekTendency')[:10]: item.stockI = inventory.get("inventory", {}).get(str(item.tId), [0, 0])[0] item.stockB = inventory.get("bazaar", {}).get(str(item.tId), [0, 0])[0] item.stockBP = inventory.get("bazaar", {}).get(str(item.tId), [0, 0])[1] item.stockD = inventory.get("display", {}).get(str(item.tId), [0, 0])[0] item.stock = item.stockI + item.stockB + item.stockD item_list.append(item) items.append(('Sell', item_list)) context = { "player": player, 'list': json.loads(player.bazaarList), "bazaarcat": True, "allItemsOnMarket": items, "view": { "refreshType": True, "timer": True, "loopType": True }, "keyLevelRequired": 2 } if error: context.update(error) page = 'bazaar/content-reload.html' if request.method == 'POST' else "bazaar.html" return render(request, page, context) except Exception as e: return returnError(exc=e, session=request.session)
def abroad(request): try: # build up filters list from bazaar.countries import countries as country_list from bazaar.countries import types as type_list country_list["all"] = {"name": "All", "n": 0} type_list["all"] = {"name": "All", "n": 0} # get player and page player = getPlayer(request.session.get("player", {}).get("tId", -1)) page = 'bazaar/content-reload.html' if request.method == 'POST' else "bazaar.html" # get filters filters = request.session.get('stocks-filters', { "countries": "all", "types": ["all"] }) if not isinstance(filters["types"], list): filters["types"] = ["all"] # set filters if request.POST.get("filter", False) and request.POST.get("key"): page = "bazaar/abroad/list.html" post_filter = request.POST.get("filter") post_key = request.POST.get("key") if post_filter in "types" and post_key in type_list: if post_key != "all": if "all" in filters[post_filter]: filters[post_filter].remove("all") if post_key in filters[post_filter]: filters[post_filter].remove(post_key) else: filters[post_filter].append(post_key) if not len(filters[post_filter]) or post_key == "all": filters[post_filter] = ["all"] elif post_filter in "countries" and post_key in country_list: filters[post_filter] = post_key if post_key != filters[ post_filter] else "all" request.session["stocks-filters"] = filters # old stocks old = tsnow() - 48 * 3600 AbroadStocks.objects.filter(timestamp__lt=old).delete() stocks = AbroadStocks.objects.filter(last=True) bd = BazaarData.objects.first() if bd is None: clients = {} else: clients = json.loads(bd.clientsStats) if filters["countries"] != "all": stocks = stocks.filter(country_key=filters["countries"]) if "all" not in filters["types"]: stocks = stocks.filter(item__tType__in=filters["types"]) # add fields for stock in stocks: stock.profit = stock.item.tMarketValue - stock.cost stock.profitperhour = round(30 * stock.profit / stock.get_country()["fly_time"]) stock.update = tsnow() - stock.timestamp context = { "player": player, "filters": filters, "country_list": country_list, "type_list": type_list, "stocks": stocks, "clients": sorted(clients.items(), key=lambda x: -x[1][0]), "bazaarcat": True, "view": { "abroad": True } } return render(request, page, context) except Exception as e: del request.session["stocks-filters"] return returnError(exc=e, session=request.session)
def index(request, select='all'): try: player = getPlayer(request.session.get("player", {}).get("tId", -1)) key = player.getKey() # update personal stocks error = False if player.tId > 0: myStocks = apiCall("user", "", "stocks,timestamp", key=key) if 'apiError' in myStocks: error = {"apiErrorSub": myStocks["apiError"]} else: print('[view.stock.list] save my stocks') if myStocks.get("stocks") is not None: myStocks["stocks"] = myStocks.get("stocks") else: myStocks["stocks"] = dict({}) player.stocksJson = json.dumps(myStocks.get( "stocks", dict({}))) player.stocksInfo = len(myStocks.get("stocks", [])) player.stocksUpda = int(myStocks.get("timestamp", 0)) player.save() # load torn stocks and add personal stocks to torn stocks stocks = {s.tId: {'t': s} for s in Stock.objects.all()} ts = stocks[0]['t'].timestamp for k, v in json.loads(player.stocksJson).items(): tId = v['stock_id'] if tId in stocks: tstock = stocks[tId].get('t') # ts = max(ts, tstock.timestamp) # add profit v['profit'] = (float(tstock.tCurrentPrice) - float( v["bought_price"])) / float(v["bought_price"]) # add if bonus if tstock.tRequirement: v['bonus'] = 1 if v['shares'] >= tstock.tRequirement else 0 if stocks[tId].get('p') is None: stocks[tId]['p'] = [v] else: stocks[tId]['p'].append(v) # select stocks if select in ['hd']: stocks = { k: v for k, v in sorted(stocks.items(), key=lambda x: x[1]['t'].dayTendency) if v['t'].tDemand in ["High", "Very High"] } elif select in ['ld']: stocks = { k: v for k, v in sorted(stocks.items(), key=lambda x: -x[1]['t'].dayTendency) if v['t'].tDemand in ["Low", "Very Low"] } elif select in ['gf']: stocks = { k: v for k, v in sorted(stocks.items(), key=lambda x: x[1]['t'].dayTendency) if v['t'].tForecast in ["Good", "Very Good"] } elif select in ['pf']: stocks = { k: v for k, v in sorted(stocks.items(), key=lambda x: -x[1]['t'].dayTendency) if v['t'].tForecast in ["Poor", "Very Poor"] } elif select in ['ns']: stocks = { k: v for k, v in sorted(stocks.items(), key=lambda x: -x[1]['t'].dayTendency) if v['t'].tAvailableShares in [0] } elif select in ['lo']: stocks = { k: v for k, v in sorted(stocks.items(), key=lambda x: -x[1]['t'].dayTendency) if v['t'].tAvailableShares <= 0.01 * v['t'].tTotalShares } elif select in ['my']: stocks = { k: v for k, v in sorted(stocks.items(), key=lambda x: x[1]['t'].dayTendency) if v.get('p') is not None } else: stocks = { k: v for k, v in sorted(stocks.items(), key=lambda x: x[0]) } context = { 'player': player, 'stocks': stocks, 'lastUpdate': ts, 'stockcat': True, 'view': { 'list': True } } if error: context.update(error) page = 'stock/content-reload.html' if request.method == 'POST' else 'stock.html' return render(request, page, context) except Exception: return returnError()