Exemple #1
0
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)
Exemple #2
0
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)
Exemple #3
0
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)
Exemple #4
0
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)
Exemple #5
0
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)
Exemple #6
0
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'])
    })
Exemple #7
0
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)
Exemple #8
0
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)
Exemple #9
0
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)
Exemple #10
0
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)
Exemple #11
0
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)
Exemple #12
0
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)
Exemple #13
0
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)
Exemple #14
0
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)
Exemple #15
0
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)
Exemple #16
0
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()
Exemple #17
0
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)
Exemple #18
0
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)
Exemple #19
0
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)
Exemple #20
0
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)
Exemple #21
0
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)
Exemple #22
0
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()