testing data transformations
This commit is contained in:
parent
ce845eb0b2
commit
1b157f2202
|
|
@ -0,0 +1,4 @@
|
||||||
|
[pytest]
|
||||||
|
pythonpath = .
|
||||||
|
addopts = --cov=src --cov-report html
|
||||||
|
norecursedirs = tmp*
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
pytest
|
||||||
|
click
|
||||||
|
psycopg2
|
||||||
|
|
@ -0,0 +1,188 @@
|
||||||
|
import psycopg2 as pg
|
||||||
|
from os import environ as env
|
||||||
|
from typing import TypeVar
|
||||||
|
|
||||||
|
T = TypeVar("T")
|
||||||
|
U = TypeVar("U")
|
||||||
|
|
||||||
|
|
||||||
|
def connect():
|
||||||
|
return pg.connect(
|
||||||
|
dbname=env.get("POSTGRES_DB"),
|
||||||
|
user=env.get("POSTGRES_USER"),
|
||||||
|
password=env.get("POSTGRES_PASSWORD"),
|
||||||
|
host=env.get("POSTGRES_HOST"),
|
||||||
|
port=env.get("POSTGRES_PORT"),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def extract_cols(data: dict, cols: list[str]) -> dict: return {key: data.get(key) for key in cols}
|
||||||
|
|
||||||
|
|
||||||
|
def score_to_text(score: list[int]) -> str:
|
||||||
|
return "-".join(map(str, score))
|
||||||
|
|
||||||
|
|
||||||
|
# maybe could get columns form db
|
||||||
|
def cols_from_player_stats(player_stats: dict) -> dict:
|
||||||
|
cols = [
|
||||||
|
"id",
|
||||||
|
"gameId",
|
||||||
|
"gameFinishedAt",
|
||||||
|
"steam64Id",
|
||||||
|
"name",
|
||||||
|
"preaim",
|
||||||
|
"reactionTime",
|
||||||
|
"accuracy",
|
||||||
|
"accuracyEnemySpotted",
|
||||||
|
"accuracyHead",
|
||||||
|
"shotsFiredEnemySpotted",
|
||||||
|
"shotsFired",
|
||||||
|
"shotsHitEnemySpotted",
|
||||||
|
"shotsHitFriend",
|
||||||
|
"shotsHitFriendHead",
|
||||||
|
"shotsHitFoe",
|
||||||
|
"shotsHitFoeHead",
|
||||||
|
"utilityOnDeathAvg",
|
||||||
|
"heFoesDamageAvg",
|
||||||
|
"heFriendsDamageAvg",
|
||||||
|
"heThrown",
|
||||||
|
"molotovThrown",
|
||||||
|
"smokeThrown",
|
||||||
|
"smokeThrownCT",
|
||||||
|
"smokeThrownCTGood",
|
||||||
|
"smokeThrownCTGoodRatio",
|
||||||
|
"smokeThrownCTFoes",
|
||||||
|
"counterStrafingShotsAll",
|
||||||
|
"counterStrafingShotsBad",
|
||||||
|
"counterStrafingShotsGood",
|
||||||
|
"counterStrafingShotsGoodRatio",
|
||||||
|
"flashbangHitFoe",
|
||||||
|
"flashbangLeadingToKill",
|
||||||
|
"flashbangHitFoeAvgDuration",
|
||||||
|
"flashbangHitFriend",
|
||||||
|
"flashbangThrown",
|
||||||
|
"flashAssist",
|
||||||
|
"score",
|
||||||
|
"initialTeamNumber",
|
||||||
|
"mvps",
|
||||||
|
"ctRoundsWon",
|
||||||
|
"ctRoundsLost",
|
||||||
|
"tRoundsWon",
|
||||||
|
"tRoundsLost",
|
||||||
|
"sprayAccuracy",
|
||||||
|
"molotovFoesDamageAvg",
|
||||||
|
"molotovFriendsDamageAvg",
|
||||||
|
"color",
|
||||||
|
"totalKills",
|
||||||
|
"totalDeaths",
|
||||||
|
"kdRatio",
|
||||||
|
"multi2k",
|
||||||
|
"multi3k",
|
||||||
|
"multi4k",
|
||||||
|
"multi5k",
|
||||||
|
"hltvRating",
|
||||||
|
"hsp",
|
||||||
|
"roundsSurvived",
|
||||||
|
"roundsSurvivedPercentage",
|
||||||
|
"dpr",
|
||||||
|
"totalAssists",
|
||||||
|
"totalDamage",
|
||||||
|
"tradeKillOpportunities",
|
||||||
|
"tradeKillAttempts",
|
||||||
|
"tradeKillsSucceeded",
|
||||||
|
"tradeKillAttemptsPercentage",
|
||||||
|
"tradeKillsSuccessPercentage",
|
||||||
|
"tradeKillOpportunitiesPerRound",
|
||||||
|
"tradedDeathOpportunities",
|
||||||
|
"tradedDeathAttempts",
|
||||||
|
"tradedDeathAttemptsPercentage",
|
||||||
|
"tradedDeathsSucceeded",
|
||||||
|
"tradedDeathsSuccessPercentage",
|
||||||
|
"tradedDeathsOpportunitiesPerRound",
|
||||||
|
"leetifyRating",
|
||||||
|
"personalPerformanceRating",
|
||||||
|
"ctLeetifyRating",
|
||||||
|
"tLeetifyRating",
|
||||||
|
"leetifyUserId",
|
||||||
|
"isCollector",
|
||||||
|
"isProPlan",
|
||||||
|
"isLeetifyStaff",
|
||||||
|
]
|
||||||
|
|
||||||
|
return extract_cols(player_stats, cols)
|
||||||
|
|
||||||
|
|
||||||
|
def cols_from_profile_game(game: dict) -> dict:
|
||||||
|
cols = [
|
||||||
|
"ctLeetifyRating",
|
||||||
|
"ctLeetifyRatingRounds",
|
||||||
|
"dataSource",
|
||||||
|
"elo",
|
||||||
|
"gameFinishedAt",
|
||||||
|
"gameId",
|
||||||
|
"isCs2",
|
||||||
|
"mapName",
|
||||||
|
"matchResult",
|
||||||
|
"scores",
|
||||||
|
"skillLevel",
|
||||||
|
"tLeetifyRating",
|
||||||
|
"tLeetifyRatingRounds",
|
||||||
|
"deaths",
|
||||||
|
"hasBannedPlayer",
|
||||||
|
"kills",
|
||||||
|
"partySize",
|
||||||
|
]
|
||||||
|
return extract_cols(game, cols)
|
||||||
|
|
||||||
|
|
||||||
|
def meta_from_profile(profile: dict) -> dict:
|
||||||
|
meta = profile.get("meta")
|
||||||
|
if not meta:
|
||||||
|
raise Exception("Could not get profile metadata", profile)
|
||||||
|
|
||||||
|
cols = [
|
||||||
|
"name",
|
||||||
|
"steam64Id",
|
||||||
|
"isCollector",
|
||||||
|
"isLeetifyStaff",
|
||||||
|
"isProPlan",
|
||||||
|
"leetifyUserId",
|
||||||
|
"faceitNickname",
|
||||||
|
]
|
||||||
|
|
||||||
|
return extract_cols(meta, cols)
|
||||||
|
|
||||||
|
|
||||||
|
def insert_value(data: dict[T, U], key: T, value: U) -> dict[T, U]:
|
||||||
|
data[key] = value
|
||||||
|
return data
|
||||||
|
|
||||||
|
|
||||||
|
def convert_game_scores(game: dict) -> dict:
|
||||||
|
score = game.get("scores")
|
||||||
|
if not score:
|
||||||
|
raise Exception("Could not get score from prfile game", game)
|
||||||
|
|
||||||
|
score = score_to_text(score)
|
||||||
|
game["scores"] = score
|
||||||
|
return game
|
||||||
|
|
||||||
|
|
||||||
|
def games_from_profile(profile: dict) -> list:
|
||||||
|
games = profile.get("games")
|
||||||
|
if not games and not type(games) == list:
|
||||||
|
raise Exception("Could not get games from profile", profile)
|
||||||
|
|
||||||
|
meta = profile.get("meta")
|
||||||
|
if not meta:
|
||||||
|
raise Exception("Could not get profile metadata", profile)
|
||||||
|
|
||||||
|
id = meta.get("leetifyUserId")
|
||||||
|
if not id:
|
||||||
|
raise Exception("Could not get id from profile metadata", meta, profile)
|
||||||
|
|
||||||
|
games = map(cols_from_profile_game, games)
|
||||||
|
games = map(lambda game: insert_value(game, "leetifyUserId", id), games)
|
||||||
|
games = map(convert_game_scores, games)
|
||||||
|
return list(games)
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
from .core import *
|
||||||
|
|
@ -0,0 +1,19 @@
|
||||||
|
import requests
|
||||||
|
|
||||||
|
|
||||||
|
class Leetify:
|
||||||
|
api_base_url = "https://api.leetify.com/api"
|
||||||
|
profile_base_url = f"{api_base_url}/profile"
|
||||||
|
match_base_url = f"{api_base_url}/games"
|
||||||
|
|
||||||
|
def __get_page(self, url: str) -> dict:
|
||||||
|
resp = requests.get(url)
|
||||||
|
return resp.json()
|
||||||
|
|
||||||
|
def get_profile(self, id: str) -> dict:
|
||||||
|
url = f"{self.profile_base_url}/{id}"
|
||||||
|
return self.__get_page(url)
|
||||||
|
|
||||||
|
def get_match(self, id: str) -> dict:
|
||||||
|
url = f"{self.match_base_url}/{id}"
|
||||||
|
return self.__get_page(url)
|
||||||
|
|
@ -0,0 +1,791 @@
|
||||||
|
from src import extract as ex
|
||||||
|
from pytest import fixture
|
||||||
|
|
||||||
|
|
||||||
|
@fixture
|
||||||
|
def profile():
|
||||||
|
return {
|
||||||
|
"highlights": [
|
||||||
|
{
|
||||||
|
"createdAt": "2023-12-10T22:36:26.813Z",
|
||||||
|
"description": "AK-47 4K on Overpass",
|
||||||
|
"gameId": "4647ec10-dc9a-4afd-b9e0-144a462970b2",
|
||||||
|
"id": "7f4fc8a6-6198-47e1-aa96-f455b70b1f04",
|
||||||
|
"isPinned": True,
|
||||||
|
"pendingPro": False,
|
||||||
|
"rankValue": None,
|
||||||
|
"roundNumber": 20,
|
||||||
|
"steam64Id": "76561198036388580",
|
||||||
|
"thumbnailUrl": "https://media.allstar.gg/6269b3881c45be12afd59318/thumbs/657bcaac1a8ab6000d65a27f_thumb.jpg",
|
||||||
|
"url": "https://allstar.gg/iframe?clip=657bcaac1a8ab6000d65a27f&known=false&platform=L202211&useCase=WC&sid=76561198036388580",
|
||||||
|
"username": "skaterCS",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"createdAt": "2023-12-24T02:15:57.052Z",
|
||||||
|
"description": "AK-47 4K on Vertigo",
|
||||||
|
"gameId": "5699e90e-ec76-4ed8-99f3-7905315960ae",
|
||||||
|
"id": "6e3d2aa4-cf57-44b4-8d85-c771a4d4d5b6",
|
||||||
|
"isPinned": True,
|
||||||
|
"pendingPro": False,
|
||||||
|
"rankValue": None,
|
||||||
|
"roundNumber": 18,
|
||||||
|
"steam64Id": "76561198036388580",
|
||||||
|
"thumbnailUrl": "https://media.allstar.gg/6269b3881c45be12afd59318/thumbs/658e3f6d0c66ff000d4e93a3_thumb.jpg",
|
||||||
|
"url": "https://allstar.gg/iframe?clip=658e3f6d0c66ff000d4e93a3&known=false&platform=L202211&useCase=WC&sid=76561198036388580",
|
||||||
|
"username": "skaterCS",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"createdAt": "2023-12-31T23:53:11.150Z",
|
||||||
|
"description": "4K on Anubis",
|
||||||
|
"gameId": "2466135e-aae5-4966-a11f-477cceee6499",
|
||||||
|
"id": "51aac0ff-5140-46ad-8e46-db6d752f99b1",
|
||||||
|
"isPinned": False,
|
||||||
|
"pendingPro": False,
|
||||||
|
"rankValue": None,
|
||||||
|
"roundNumber": 6,
|
||||||
|
"steam64Id": "76561198036388580",
|
||||||
|
"thumbnailUrl": "https://media.allstar.gg/6269b3881c45be12afd59318/thumbs/6597a2d4589d590012898af7_thumb.jpg",
|
||||||
|
"url": "https://allstar.gg/iframe?clip=6597a2d4589d590012898af7&known=false&platform=L202211&useCase=WC&sid=76561198036388580",
|
||||||
|
"username": "skaterCS",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"createdAt": "2024-01-08T00:48:19.753Z",
|
||||||
|
"description": "AK-47 4K on Inferno",
|
||||||
|
"gameId": "6691ea4b-4d5d-4ffc-aabd-ac6f2ce291c0",
|
||||||
|
"id": "e85ca957-e6cb-4d96-9f02-1850af23d5b0",
|
||||||
|
"isPinned": False,
|
||||||
|
"pendingPro": False,
|
||||||
|
"rankValue": None,
|
||||||
|
"roundNumber": 22,
|
||||||
|
"steam64Id": "76561198036388580",
|
||||||
|
"thumbnailUrl": "https://media.allstar.gg/6269b3881c45be12afd59318/thumbs/65a108eba0d42f000c9af008_thumb.jpg",
|
||||||
|
"url": "https://allstar.gg/iframe?clip=65a108eba0d42f000c9af008&known=false&platform=L202211&useCase=WC&sid=76561198036388580",
|
||||||
|
"username": "skaterCS",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"createdAt": "2024-01-13T20:50:07.002Z",
|
||||||
|
"description": "AK-47 4K on Ancient",
|
||||||
|
"gameId": "a3f0c4b6-da37-43c4-8679-b6b858ec1600",
|
||||||
|
"id": "90af8cd2-3224-4bc6-9dc9-d778ed93339c",
|
||||||
|
"isPinned": False,
|
||||||
|
"pendingPro": False,
|
||||||
|
"rankValue": None,
|
||||||
|
"roundNumber": 10,
|
||||||
|
"steam64Id": "76561198036388580",
|
||||||
|
"thumbnailUrl": "https://media.allstar.gg/6269b3881c45be12afd59318/thumbs/65ac1f0b230e6e000dba9cbc_thumb.jpg",
|
||||||
|
"url": "https://allstar.gg/iframe?clip=65ac1f0b230e6e000dba9cbc&known=false&platform=L202211&useCase=WC&sid=76561198036388580",
|
||||||
|
"username": "skaterCS",
|
||||||
|
},
|
||||||
|
],
|
||||||
|
"personalBests": [],
|
||||||
|
"recentGameRatings": {
|
||||||
|
"aim": 67.72418696226975,
|
||||||
|
"positioning": 36.31694139929697,
|
||||||
|
"utility": 51.595349880463615,
|
||||||
|
"gamesPlayed": 30,
|
||||||
|
"leetifyRatingRounds": 620,
|
||||||
|
"clutch": 0.13,
|
||||||
|
"ctLeetify": -0.0114,
|
||||||
|
"leetify": -0.0121,
|
||||||
|
"opening": -0.0598,
|
||||||
|
"tLeetify": -0.0128,
|
||||||
|
},
|
||||||
|
"teammates": [
|
||||||
|
{
|
||||||
|
"isCollector": False,
|
||||||
|
"isProPlan": False,
|
||||||
|
"leetifyUserId": "5e28e0c9-4b01-4fa3-b568-c9ae56ed8ac1",
|
||||||
|
"isBanned": False,
|
||||||
|
"isLeetifyStaff": False,
|
||||||
|
"matchesPlayedTogether": 32,
|
||||||
|
"profileUserLeetifyRating": -0.0016909883720930246,
|
||||||
|
"rank": {
|
||||||
|
"type": "premier",
|
||||||
|
"dataSource": "matchmaking",
|
||||||
|
"skillLevel": 15267,
|
||||||
|
},
|
||||||
|
"steam64Id": "76561198228115488",
|
||||||
|
"steamAvatarUrl": "https://avatars.steamstatic.com/361d26bb315644059663ab9c32479c09bddbcb96_full.jpg",
|
||||||
|
"steamNickname": "AustinShyd",
|
||||||
|
"teammateLeetifyRating": 0.013207703488372092,
|
||||||
|
"winRateTogether": 0.5666666666666667,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"isCollector": False,
|
||||||
|
"isProPlan": True,
|
||||||
|
"leetifyUserId": "8c3a9cb5-faaf-4401-ae9a-72f5e8528651",
|
||||||
|
"isBanned": False,
|
||||||
|
"isLeetifyStaff": False,
|
||||||
|
"matchesPlayedTogether": 21,
|
||||||
|
"profileUserLeetifyRating": -0.0037864444444444456,
|
||||||
|
"rank": {"dataSource": "faceit", "skillLevel": 6},
|
||||||
|
"steam64Id": "76561198376400117",
|
||||||
|
"steamAvatarUrl": "https://avatars.akamai.steamstatic.com/8e0029277f9fe4f57d9319d6143cbf72df0d717f_full.jpg",
|
||||||
|
"steamNickname": "TiMe_TrAvLeR87",
|
||||||
|
"teammateLeetifyRating": -0.002907555555555556,
|
||||||
|
"winRateTogether": 0.5714285714285714,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"isCollector": False,
|
||||||
|
"isProPlan": False,
|
||||||
|
"leetifyUserId": "163b492d-931d-4021-bdb9-6e6d4f37b2b2",
|
||||||
|
"isBanned": False,
|
||||||
|
"isLeetifyStaff": False,
|
||||||
|
"matchesPlayedTogether": 11,
|
||||||
|
"profileUserLeetifyRating": 0.01336536964980545,
|
||||||
|
"rank": {
|
||||||
|
"type": "premier",
|
||||||
|
"dataSource": "matchmaking",
|
||||||
|
"skillLevel": 9135,
|
||||||
|
},
|
||||||
|
"steam64Id": "76561198019127603",
|
||||||
|
"steamAvatarUrl": "https://avatars.steamstatic.com/b93f04b9194fba8980a2dc74947d47d0087ba113_full.jpg",
|
||||||
|
"steamNickname": "Lit Taco",
|
||||||
|
"teammateLeetifyRating": -0.02468832684824903,
|
||||||
|
"winRateTogether": 0.6363636363636364,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"isCollector": False,
|
||||||
|
"isProPlan": False,
|
||||||
|
"leetifyUserId": "a47ba360-5fb1-4b88-b701-31f7c7ae4659",
|
||||||
|
"isBanned": False,
|
||||||
|
"isLeetifyStaff": False,
|
||||||
|
"matchesPlayedTogether": 27,
|
||||||
|
"profileUserLeetifyRating": 0.014388762214983713,
|
||||||
|
"rank": {"dataSource": "faceit", "skillLevel": 2},
|
||||||
|
"steam64Id": "76561197992874735",
|
||||||
|
"steamAvatarUrl": "https://avatars.steamstatic.com/1982d13a52fa8e8364d681966972a1de70a36c64_full.jpg",
|
||||||
|
"steamNickname": "Mela",
|
||||||
|
"teammateLeetifyRating": -0.02852671009771987,
|
||||||
|
"winRateTogether": 0.5185185185185185,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"isCollector": False,
|
||||||
|
"isProPlan": False,
|
||||||
|
"leetifyUserId": "f6b4342b-3779-4144-9e53-9d4d408a315c",
|
||||||
|
"isBanned": False,
|
||||||
|
"isLeetifyStaff": False,
|
||||||
|
"matchesPlayedTogether": 22,
|
||||||
|
"profileUserLeetifyRating": 0.013741448692152916,
|
||||||
|
"rank": {"dataSource": "faceit", "skillLevel": 6},
|
||||||
|
"steam64Id": "76561199022813257",
|
||||||
|
"steamAvatarUrl": "https://avatars.steamstatic.com/1ce49c3e9b812ab90ef16d34bfaf60193e7a7489_full.jpg",
|
||||||
|
"steamNickname": "Sharky",
|
||||||
|
"teammateLeetifyRating": 0.02733762575452716,
|
||||||
|
"winRateTogether": 0.5,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"isCollector": False,
|
||||||
|
"isProPlan": False,
|
||||||
|
"leetifyUserId": "95921f4b-e2aa-466a-adce-4b53b220cc2d",
|
||||||
|
"isBanned": False,
|
||||||
|
"isLeetifyStaff": False,
|
||||||
|
"matchesPlayedTogether": 13,
|
||||||
|
"profileUserLeetifyRating": -0.0076067375886524815,
|
||||||
|
"rank": {
|
||||||
|
"type": "premier",
|
||||||
|
"dataSource": "matchmaking",
|
||||||
|
"skillLevel": 14568,
|
||||||
|
},
|
||||||
|
"steam64Id": "76561199046277694",
|
||||||
|
"steamAvatarUrl": "https://avatars.akamai.steamstatic.com/ccd7f5b712406dbbfccc544005fd4731a777c5a1_full.jpg",
|
||||||
|
"steamNickname": "fwdz",
|
||||||
|
"teammateLeetifyRating": 0.03853794326241135,
|
||||||
|
"winRateTogether": 0.5,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"isCollector": False,
|
||||||
|
"isProPlan": False,
|
||||||
|
"leetifyUserId": "a3619755-fffa-49a3-8074-03e1de9dc2c1",
|
||||||
|
"isBanned": True,
|
||||||
|
"isLeetifyStaff": False,
|
||||||
|
"matchesPlayedTogether": 43,
|
||||||
|
"profileUserLeetifyRating": -0.00885761802575107,
|
||||||
|
"rank": {
|
||||||
|
"type": "premier",
|
||||||
|
"dataSource": "matchmaking",
|
||||||
|
"skillLevel": 10001,
|
||||||
|
},
|
||||||
|
"steam64Id": "76561198051811238",
|
||||||
|
"steamAvatarUrl": "https://avatars.akamai.steamstatic.com/4611b64e6ea807573525239f57e55fc2ccdbedd7_full.jpg",
|
||||||
|
"steamNickname": "Revolver_FPS",
|
||||||
|
"teammateLeetifyRating": -0.02219978401727862,
|
||||||
|
"winRateTogether": 0.5,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"isCollector": False,
|
||||||
|
"isProPlan": False,
|
||||||
|
"leetifyUserId": "70faf9da-07f9-4a24-afe9-fb84be5d7706",
|
||||||
|
"isBanned": False,
|
||||||
|
"isLeetifyStaff": False,
|
||||||
|
"matchesPlayedTogether": 33,
|
||||||
|
"profileUserLeetifyRating": 0.00413012729844413,
|
||||||
|
"rank": {
|
||||||
|
"type": "premier",
|
||||||
|
"dataSource": "matchmaking",
|
||||||
|
"skillLevel": 10243,
|
||||||
|
},
|
||||||
|
"steam64Id": "76561198174606711",
|
||||||
|
"steamAvatarUrl": "https://avatars.akamai.steamstatic.com/e903300342a9eba51d920af5b2ea10080f270a42_full.jpg",
|
||||||
|
"steamNickname": "Mqple",
|
||||||
|
"teammateLeetifyRating": 0.008475536480686696,
|
||||||
|
"winRateTogether": 0.48484848484848486,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"isCollector": False,
|
||||||
|
"isProPlan": False,
|
||||||
|
"isBanned": False,
|
||||||
|
"isLeetifyStaff": False,
|
||||||
|
"matchesPlayedTogether": 11,
|
||||||
|
"profileUserLeetifyRating": -0.01507543859649123,
|
||||||
|
"rank": {"dataSource": "faceit", "skillLevel": 5},
|
||||||
|
"steam64Id": "76561198216410960",
|
||||||
|
"steamAvatarUrl": "https://avatars.akamai.steamstatic.com/2e601d5cd472b63f3b5235364d55e2f6b99ec326_full.jpg",
|
||||||
|
"steamNickname": "Yaw",
|
||||||
|
"teammateLeetifyRating": 0.02286578947368421,
|
||||||
|
"winRateTogether": 0.5454545454545454,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
"games": [
|
||||||
|
{
|
||||||
|
"enemyTeamSteam64Ids": [
|
||||||
|
"76561198017884049",
|
||||||
|
"76561198376400117",
|
||||||
|
"76561198097337225",
|
||||||
|
"76561198801253208",
|
||||||
|
"76561198883031817",
|
||||||
|
],
|
||||||
|
"isCompletedLongMatch": False,
|
||||||
|
"ownTeamSteam64Ids": [
|
||||||
|
"76561198060167512",
|
||||||
|
"76561198036388580",
|
||||||
|
"76561198048048148",
|
||||||
|
"76561198246440596",
|
||||||
|
"76561198108997204",
|
||||||
|
],
|
||||||
|
"ownTeamTotalLeetifyRatingRounds": {
|
||||||
|
"76561198060167512": 23,
|
||||||
|
"76561198036388580": 23,
|
||||||
|
"76561198048048148": 23,
|
||||||
|
"76561198246440596": 23,
|
||||||
|
"76561198108997204": 23,
|
||||||
|
},
|
||||||
|
"ownTeamTotalLeetifyRatings": {
|
||||||
|
"76561198060167512": 0.0473,
|
||||||
|
"76561198036388580": 0.0773,
|
||||||
|
"76561198048048148": -0.0426,
|
||||||
|
"76561198246440596": -0.0048,
|
||||||
|
"76561198108997204": -0.0049,
|
||||||
|
},
|
||||||
|
"ctLeetifyRating": -0.0157,
|
||||||
|
"ctLeetifyRatingRounds": 12,
|
||||||
|
"dataSource": "faceit",
|
||||||
|
"elo": 1273,
|
||||||
|
"gameFinishedAt": "2024-01-13T20:45:53.000Z",
|
||||||
|
"gameId": "a3f0c4b6-da37-43c4-8679-b6b858ec1600",
|
||||||
|
"isCs2": True,
|
||||||
|
"mapName": "de_ancient",
|
||||||
|
"matchResult": "win",
|
||||||
|
"rankType": None,
|
||||||
|
"scores": [13, 10],
|
||||||
|
"skillLevel": 6,
|
||||||
|
"tLeetifyRating": 0.1625,
|
||||||
|
"tLeetifyRatingRounds": 11,
|
||||||
|
"deaths": 11,
|
||||||
|
"hasBannedPlayer": False,
|
||||||
|
"kills": 19,
|
||||||
|
"partySize": 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enemyTeamSteam64Ids": [
|
||||||
|
"76561198052273476",
|
||||||
|
"76561199145898951",
|
||||||
|
"76561199239125525",
|
||||||
|
"76561198086636793",
|
||||||
|
"76561199009125853",
|
||||||
|
],
|
||||||
|
"isCompletedLongMatch": False,
|
||||||
|
"ownTeamSteam64Ids": [
|
||||||
|
"76561198036388580",
|
||||||
|
"76561198123663481",
|
||||||
|
"76561198212556913",
|
||||||
|
"76561198282254268",
|
||||||
|
"76561198218979692",
|
||||||
|
],
|
||||||
|
"ownTeamTotalLeetifyRatingRounds": {
|
||||||
|
"76561198036388580": 18,
|
||||||
|
"76561198123663481": 18,
|
||||||
|
"76561198212556913": 18,
|
||||||
|
"76561198282254268": 18,
|
||||||
|
"76561198218979692": 18,
|
||||||
|
},
|
||||||
|
"ownTeamTotalLeetifyRatings": {
|
||||||
|
"76561198036388580": 0.0138,
|
||||||
|
"76561198123663481": 0.0004,
|
||||||
|
"76561198212556913": -0.0143,
|
||||||
|
"76561198282254268": 0.0516,
|
||||||
|
"76561198218979692": 0.1367,
|
||||||
|
},
|
||||||
|
"ctLeetifyRating": -0.015,
|
||||||
|
"ctLeetifyRatingRounds": 6,
|
||||||
|
"dataSource": "faceit",
|
||||||
|
"elo": 1248,
|
||||||
|
"gameFinishedAt": "2024-01-13T00:51:26.000Z",
|
||||||
|
"gameId": "ba78c2f5-99b8-4d4d-afbd-cacee7894dbb",
|
||||||
|
"isCs2": True,
|
||||||
|
"mapName": "de_vertigo",
|
||||||
|
"matchResult": "win",
|
||||||
|
"rankType": None,
|
||||||
|
"scores": [13, 5],
|
||||||
|
"skillLevel": 6,
|
||||||
|
"tLeetifyRating": 0.0715,
|
||||||
|
"tLeetifyRatingRounds": 12,
|
||||||
|
"deaths": 12,
|
||||||
|
"hasBannedPlayer": False,
|
||||||
|
"kills": 13,
|
||||||
|
"partySize": 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enemyTeamSteam64Ids": [
|
||||||
|
"76561198180054591",
|
||||||
|
"76561198103217250",
|
||||||
|
"76561198255756012",
|
||||||
|
"76561199228602800",
|
||||||
|
"76561198131413139",
|
||||||
|
],
|
||||||
|
"isCompletedLongMatch": False,
|
||||||
|
"ownTeamSteam64Ids": [
|
||||||
|
"76561198799389823",
|
||||||
|
"76561198068730110",
|
||||||
|
"76561198086636793",
|
||||||
|
"76561199145898951",
|
||||||
|
"76561198036388580",
|
||||||
|
],
|
||||||
|
"ownTeamTotalLeetifyRatingRounds": {
|
||||||
|
"76561198799389823": 24,
|
||||||
|
"76561198068730110": 24,
|
||||||
|
"76561198086636793": 24,
|
||||||
|
"76561199145898951": 24,
|
||||||
|
"76561198036388580": 24,
|
||||||
|
},
|
||||||
|
"ownTeamTotalLeetifyRatings": {
|
||||||
|
"76561198799389823": -0.0014,
|
||||||
|
"76561198068730110": 0.0375,
|
||||||
|
"76561198086636793": -0.0134,
|
||||||
|
"76561199145898951": -0.0543,
|
||||||
|
"76561198036388580": -0.0161,
|
||||||
|
},
|
||||||
|
"ctLeetifyRating": 0.0091,
|
||||||
|
"ctLeetifyRatingRounds": 12,
|
||||||
|
"dataSource": "faceit",
|
||||||
|
"elo": 1273,
|
||||||
|
"gameFinishedAt": "2024-01-13T00:11:36.000Z",
|
||||||
|
"gameId": "f57fc165-8d9d-4cbb-aeaf-3305bf96f6b1",
|
||||||
|
"isCs2": True,
|
||||||
|
"mapName": "de_anubis",
|
||||||
|
"matchResult": "loss",
|
||||||
|
"rankType": None,
|
||||||
|
"scores": [11, 13],
|
||||||
|
"skillLevel": 6,
|
||||||
|
"tLeetifyRating": -0.0413,
|
||||||
|
"tLeetifyRatingRounds": 12,
|
||||||
|
"deaths": 17,
|
||||||
|
"hasBannedPlayer": False,
|
||||||
|
"kills": 12,
|
||||||
|
"partySize": 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enemyTeamSteam64Ids": [
|
||||||
|
"76561199065317871",
|
||||||
|
"76561199133043212",
|
||||||
|
"76561199237862815",
|
||||||
|
"76561197979349420",
|
||||||
|
"76561199568936482",
|
||||||
|
],
|
||||||
|
"isCompletedLongMatch": False,
|
||||||
|
"ownTeamSteam64Ids": [
|
||||||
|
"76561197991931943",
|
||||||
|
"76561198174606711",
|
||||||
|
"76561199057228627",
|
||||||
|
"76561198075880354",
|
||||||
|
"76561198036388580",
|
||||||
|
],
|
||||||
|
"ownTeamTotalLeetifyRatingRounds": {
|
||||||
|
"76561197991931943": 20,
|
||||||
|
"76561198174606711": 20,
|
||||||
|
"76561199057228627": 20,
|
||||||
|
"76561198075880354": 20,
|
||||||
|
"76561198036388580": 20,
|
||||||
|
},
|
||||||
|
"ownTeamTotalLeetifyRatings": {
|
||||||
|
"76561197991931943": -0.062,
|
||||||
|
"76561198174606711": 0.0301,
|
||||||
|
"76561199057228627": 0.0457,
|
||||||
|
"76561198075880354": 0.0723,
|
||||||
|
"76561198036388580": 0.0185,
|
||||||
|
},
|
||||||
|
"ctLeetifyRating": 0.0273,
|
||||||
|
"ctLeetifyRatingRounds": 8,
|
||||||
|
"dataSource": "faceit",
|
||||||
|
"elo": 962,
|
||||||
|
"gameFinishedAt": "2023-11-12T19:53:56.000Z",
|
||||||
|
"gameId": "76bd9c1b-4350-4cba-a85c-853dda2319a3",
|
||||||
|
"isCs2": True,
|
||||||
|
"mapName": "de_vertigo",
|
||||||
|
"matchResult": "win",
|
||||||
|
"rankType": None,
|
||||||
|
"scores": [13, 7],
|
||||||
|
"skillLevel": 4,
|
||||||
|
"tLeetifyRating": 0.0053,
|
||||||
|
"tLeetifyRatingRounds": 12,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enemyTeamSteam64Ids": [
|
||||||
|
"76561199215625191",
|
||||||
|
"76561198138569488",
|
||||||
|
"76561198882489909",
|
||||||
|
"76561198967893666",
|
||||||
|
"76561199480114036",
|
||||||
|
],
|
||||||
|
"isCompletedLongMatch": True,
|
||||||
|
"ownTeamSteam64Ids": [
|
||||||
|
"76561198232726872",
|
||||||
|
"76561198174606711",
|
||||||
|
"76561198036388580",
|
||||||
|
"76561198051811238",
|
||||||
|
"76561198060380124",
|
||||||
|
],
|
||||||
|
"ownTeamTotalLeetifyRatingRounds": {
|
||||||
|
"76561198232726872": 41,
|
||||||
|
"76561198174606711": 41,
|
||||||
|
"76561198036388580": 41,
|
||||||
|
"76561198051811238": 41,
|
||||||
|
"76561198060380124": 41,
|
||||||
|
},
|
||||||
|
"ownTeamTotalLeetifyRatings": {
|
||||||
|
"76561198232726872": 0.0271,
|
||||||
|
"76561198174606711": 0.0056,
|
||||||
|
"76561198036388580": 0.0273,
|
||||||
|
"76561198051811238": -0.0392,
|
||||||
|
"76561198060380124": -0.0188,
|
||||||
|
},
|
||||||
|
"ctLeetifyRating": 0.0493,
|
||||||
|
"ctLeetifyRatingRounds": 21,
|
||||||
|
"dataSource": "faceit",
|
||||||
|
"elo": 910,
|
||||||
|
"gameFinishedAt": "2023-11-11T03:35:16.000Z",
|
||||||
|
"gameId": "fdd3867f-225b-4177-bc99-661a7fa43c41",
|
||||||
|
"isCs2": True,
|
||||||
|
"mapName": "de_vertigo",
|
||||||
|
"matchResult": "win",
|
||||||
|
"rankType": None,
|
||||||
|
"scores": [22, 19],
|
||||||
|
"skillLevel": 4,
|
||||||
|
"tLeetifyRating": 0.0063,
|
||||||
|
"tLeetifyRatingRounds": 20,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"enemyTeamSteam64Ids": [
|
||||||
|
"76561198954974027",
|
||||||
|
"76561198340039100",
|
||||||
|
"76561198267258925",
|
||||||
|
"76561198132032289",
|
||||||
|
"76561198268422115",
|
||||||
|
],
|
||||||
|
"isCompletedLongMatch": False,
|
||||||
|
"ownTeamSteam64Ids": [
|
||||||
|
"76561197962906363",
|
||||||
|
"76561197971574216",
|
||||||
|
"76561198036388580",
|
||||||
|
"76561198174606711",
|
||||||
|
"76561198142815385",
|
||||||
|
],
|
||||||
|
"ownTeamTotalLeetifyRatingRounds": {
|
||||||
|
"76561197962906363": 23,
|
||||||
|
"76561197971574216": 23,
|
||||||
|
"76561198036388580": 23,
|
||||||
|
"76561198174606711": 23,
|
||||||
|
"76561198142815385": 23,
|
||||||
|
},
|
||||||
|
"ownTeamTotalLeetifyRatings": {
|
||||||
|
"76561197962906363": -0.0855,
|
||||||
|
"76561197971574216": -0.004,
|
||||||
|
"76561198036388580": 0.0142,
|
||||||
|
"76561198174606711": 0.0311,
|
||||||
|
"76561198142815385": -0.039,
|
||||||
|
},
|
||||||
|
"ctLeetifyRating": 0.0069,
|
||||||
|
"ctLeetifyRatingRounds": 12,
|
||||||
|
"dataSource": "faceit",
|
||||||
|
"elo": 960,
|
||||||
|
"gameFinishedAt": "2023-11-10T01:02:34.000Z",
|
||||||
|
"gameId": "73acee05-c6ce-4a15-9ab1-c4201443d6ff",
|
||||||
|
"isCs2": True,
|
||||||
|
"mapName": "de_mirage",
|
||||||
|
"matchResult": "loss",
|
||||||
|
"rankType": None,
|
||||||
|
"scores": [10, 13],
|
||||||
|
"skillLevel": 4,
|
||||||
|
"tLeetifyRating": 0.0209,
|
||||||
|
"tLeetifyRatingRounds": 11,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
"meta": {
|
||||||
|
"name": "Skater",
|
||||||
|
"steam64Id": "76561198036388580",
|
||||||
|
"steamAvatarUrl": "https://avatars.akamai.steamstatic.com/ee0e6adb9c075b0b40cbedba2f8699d1c040ca6c_full.jpg",
|
||||||
|
"isCollector": False,
|
||||||
|
"isLeetifyStaff": False,
|
||||||
|
"isProPlan": False,
|
||||||
|
"leetifyUserId": "6c53f87a-5877-4dd3-ab8f-527119ce4939",
|
||||||
|
"faceitNickname": "skaterCS",
|
||||||
|
"platformBans": [],
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@fixture
|
||||||
|
def games(profile):
|
||||||
|
return profile["games"]
|
||||||
|
|
||||||
|
|
||||||
|
def test_extract_cols(profile):
|
||||||
|
empty_dict = {}
|
||||||
|
cols = ["meta"]
|
||||||
|
|
||||||
|
res = ex.extract_cols(empty_dict, [])
|
||||||
|
assert res == {}
|
||||||
|
|
||||||
|
res = ex.extract_cols(empty_dict, cols)
|
||||||
|
assert res == {"meta": None}
|
||||||
|
|
||||||
|
res = ex.extract_cols(profile, [])
|
||||||
|
assert res == {}
|
||||||
|
|
||||||
|
res = ex.extract_cols(profile, cols)
|
||||||
|
assert res == {
|
||||||
|
"meta": {
|
||||||
|
"name": "Skater",
|
||||||
|
"steam64Id": "76561198036388580",
|
||||||
|
"steamAvatarUrl": "https://avatars.akamai.steamstatic.com/ee0e6adb9c075b0b40cbedba2f8699d1c040ca6c_full.jpg",
|
||||||
|
"isCollector": False,
|
||||||
|
"isLeetifyStaff": False,
|
||||||
|
"isProPlan": False,
|
||||||
|
"leetifyUserId": "6c53f87a-5877-4dd3-ab8f-527119ce4939",
|
||||||
|
"faceitNickname": "skaterCS",
|
||||||
|
"platformBans": [],
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
cols.append("recentGameRatings")
|
||||||
|
res = ex.extract_cols(profile, cols)
|
||||||
|
assert res == {
|
||||||
|
"meta": {
|
||||||
|
"name": "Skater",
|
||||||
|
"steam64Id": "76561198036388580",
|
||||||
|
"steamAvatarUrl": "https://avatars.akamai.steamstatic.com/ee0e6adb9c075b0b40cbedba2f8699d1c040ca6c_full.jpg",
|
||||||
|
"isCollector": False,
|
||||||
|
"isLeetifyStaff": False,
|
||||||
|
"isProPlan": False,
|
||||||
|
"leetifyUserId": "6c53f87a-5877-4dd3-ab8f-527119ce4939",
|
||||||
|
"faceitNickname": "skaterCS",
|
||||||
|
"platformBans": [],
|
||||||
|
},
|
||||||
|
"recentGameRatings": {
|
||||||
|
"aim": 67.72418696226975,
|
||||||
|
"positioning": 36.31694139929697,
|
||||||
|
"utility": 51.595349880463615,
|
||||||
|
"gamesPlayed": 30,
|
||||||
|
"leetifyRatingRounds": 620,
|
||||||
|
"clutch": 0.13,
|
||||||
|
"ctLeetify": -0.0114,
|
||||||
|
"leetify": -0.0121,
|
||||||
|
"opening": -0.0598,
|
||||||
|
"tLeetify": -0.0128,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def test_score_to_text():
|
||||||
|
text = ex.score_to_text([])
|
||||||
|
assert text == ""
|
||||||
|
|
||||||
|
text = ex.score_to_text([1])
|
||||||
|
assert text == "1"
|
||||||
|
|
||||||
|
text = ex.score_to_text([1, 2])
|
||||||
|
assert text == "1-2"
|
||||||
|
|
||||||
|
text = ex.score_to_text([1, 2, 3])
|
||||||
|
assert text == "1-2-3"
|
||||||
|
|
||||||
|
|
||||||
|
def test_meta_from_profile(profile):
|
||||||
|
res = ex.meta_from_profile(profile)
|
||||||
|
assert res == {
|
||||||
|
"name": "Skater",
|
||||||
|
"steam64Id": "76561198036388580",
|
||||||
|
"isCollector": False,
|
||||||
|
"isLeetifyStaff": False,
|
||||||
|
"isProPlan": False,
|
||||||
|
"leetifyUserId": "6c53f87a-5877-4dd3-ab8f-527119ce4939",
|
||||||
|
"faceitNickname": "skaterCS",
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def test_games_from_profile(profile):
|
||||||
|
games = profile["games"].copy()
|
||||||
|
|
||||||
|
profile["games"] = []
|
||||||
|
res = ex.games_from_profile(profile)
|
||||||
|
assert res == []
|
||||||
|
|
||||||
|
profile["games"] = games[:1]
|
||||||
|
res = ex.games_from_profile(profile)
|
||||||
|
assert res == [
|
||||||
|
{
|
||||||
|
"ctLeetifyRating": -0.0157,
|
||||||
|
"ctLeetifyRatingRounds": 12,
|
||||||
|
"dataSource": "faceit",
|
||||||
|
"elo": 1273,
|
||||||
|
"gameFinishedAt": "2024-01-13T20:45:53.000Z",
|
||||||
|
"gameId": "a3f0c4b6-da37-43c4-8679-b6b858ec1600",
|
||||||
|
"isCs2": True,
|
||||||
|
"mapName": "de_ancient",
|
||||||
|
"matchResult": "win",
|
||||||
|
"scores": "13-10",
|
||||||
|
"skillLevel": 6,
|
||||||
|
"tLeetifyRating": 0.1625,
|
||||||
|
"tLeetifyRatingRounds": 11,
|
||||||
|
"deaths": 11,
|
||||||
|
"hasBannedPlayer": False,
|
||||||
|
"kills": 19,
|
||||||
|
"partySize": 1,
|
||||||
|
"leetifyUserId": "6c53f87a-5877-4dd3-ab8f-527119ce4939",
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
profile["games"] = games
|
||||||
|
res = ex.games_from_profile(profile)
|
||||||
|
assert res == [
|
||||||
|
{
|
||||||
|
"ctLeetifyRating": -0.0157,
|
||||||
|
"ctLeetifyRatingRounds": 12,
|
||||||
|
"dataSource": "faceit",
|
||||||
|
"elo": 1273,
|
||||||
|
"gameFinishedAt": "2024-01-13T20:45:53.000Z",
|
||||||
|
"gameId": "a3f0c4b6-da37-43c4-8679-b6b858ec1600",
|
||||||
|
"isCs2": True,
|
||||||
|
"mapName": "de_ancient",
|
||||||
|
"matchResult": "win",
|
||||||
|
"scores": "13-10",
|
||||||
|
"skillLevel": 6,
|
||||||
|
"tLeetifyRating": 0.1625,
|
||||||
|
"tLeetifyRatingRounds": 11,
|
||||||
|
"deaths": 11,
|
||||||
|
"hasBannedPlayer": False,
|
||||||
|
"kills": 19,
|
||||||
|
"partySize": 1,
|
||||||
|
"leetifyUserId": "6c53f87a-5877-4dd3-ab8f-527119ce4939",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ctLeetifyRating": -0.015,
|
||||||
|
"ctLeetifyRatingRounds": 6,
|
||||||
|
"dataSource": "faceit",
|
||||||
|
"elo": 1248,
|
||||||
|
"gameFinishedAt": "2024-01-13T00:51:26.000Z",
|
||||||
|
"gameId": "ba78c2f5-99b8-4d4d-afbd-cacee7894dbb",
|
||||||
|
"isCs2": True,
|
||||||
|
"mapName": "de_vertigo",
|
||||||
|
"matchResult": "win",
|
||||||
|
"scores": "13-5",
|
||||||
|
"skillLevel": 6,
|
||||||
|
"tLeetifyRating": 0.0715,
|
||||||
|
"tLeetifyRatingRounds": 12,
|
||||||
|
"deaths": 12,
|
||||||
|
"hasBannedPlayer": False,
|
||||||
|
"kills": 13,
|
||||||
|
"partySize": 1,
|
||||||
|
"leetifyUserId": "6c53f87a-5877-4dd3-ab8f-527119ce4939",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ctLeetifyRating": 0.0091,
|
||||||
|
"ctLeetifyRatingRounds": 12,
|
||||||
|
"dataSource": "faceit",
|
||||||
|
"elo": 1273,
|
||||||
|
"gameFinishedAt": "2024-01-13T00:11:36.000Z",
|
||||||
|
"gameId": "f57fc165-8d9d-4cbb-aeaf-3305bf96f6b1",
|
||||||
|
"isCs2": True,
|
||||||
|
"mapName": "de_anubis",
|
||||||
|
"matchResult": "loss",
|
||||||
|
"scores": "11-13",
|
||||||
|
"skillLevel": 6,
|
||||||
|
"tLeetifyRating": -0.0413,
|
||||||
|
"tLeetifyRatingRounds": 12,
|
||||||
|
"deaths": 17,
|
||||||
|
"hasBannedPlayer": False,
|
||||||
|
"kills": 12,
|
||||||
|
"partySize": 1,
|
||||||
|
"leetifyUserId": "6c53f87a-5877-4dd3-ab8f-527119ce4939",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ctLeetifyRating": 0.0273,
|
||||||
|
"ctLeetifyRatingRounds": 8,
|
||||||
|
"dataSource": "faceit",
|
||||||
|
"elo": 962,
|
||||||
|
"gameFinishedAt": "2023-11-12T19:53:56.000Z",
|
||||||
|
"gameId": "76bd9c1b-4350-4cba-a85c-853dda2319a3",
|
||||||
|
"isCs2": True,
|
||||||
|
"mapName": "de_vertigo",
|
||||||
|
"matchResult": "win",
|
||||||
|
"scores": "13-7",
|
||||||
|
"skillLevel": 4,
|
||||||
|
"tLeetifyRating": 0.0053,
|
||||||
|
"tLeetifyRatingRounds": 12,
|
||||||
|
"deaths": None,
|
||||||
|
"hasBannedPlayer": None,
|
||||||
|
"kills": None,
|
||||||
|
"partySize": None,
|
||||||
|
"leetifyUserId": "6c53f87a-5877-4dd3-ab8f-527119ce4939",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ctLeetifyRating": 0.0493,
|
||||||
|
"ctLeetifyRatingRounds": 21,
|
||||||
|
"dataSource": "faceit",
|
||||||
|
"elo": 910,
|
||||||
|
"gameFinishedAt": "2023-11-11T03:35:16.000Z",
|
||||||
|
"gameId": "fdd3867f-225b-4177-bc99-661a7fa43c41",
|
||||||
|
"isCs2": True,
|
||||||
|
"mapName": "de_vertigo",
|
||||||
|
"matchResult": "win",
|
||||||
|
"scores": "22-19",
|
||||||
|
"skillLevel": 4,
|
||||||
|
"tLeetifyRating": 0.0063,
|
||||||
|
"tLeetifyRatingRounds": 20,
|
||||||
|
"deaths": None,
|
||||||
|
"hasBannedPlayer": None,
|
||||||
|
"kills": None,
|
||||||
|
"partySize": None,
|
||||||
|
"leetifyUserId": "6c53f87a-5877-4dd3-ab8f-527119ce4939",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ctLeetifyRating": 0.0069,
|
||||||
|
"ctLeetifyRatingRounds": 12,
|
||||||
|
"dataSource": "faceit",
|
||||||
|
"elo": 960,
|
||||||
|
"gameFinishedAt": "2023-11-10T01:02:34.000Z",
|
||||||
|
"gameId": "73acee05-c6ce-4a15-9ab1-c4201443d6ff",
|
||||||
|
"isCs2": True,
|
||||||
|
"mapName": "de_mirage",
|
||||||
|
"matchResult": "loss",
|
||||||
|
"scores": "10-13",
|
||||||
|
"skillLevel": 4,
|
||||||
|
"tLeetifyRating": 0.0209,
|
||||||
|
"tLeetifyRatingRounds": 11,
|
||||||
|
"deaths": None,
|
||||||
|
"hasBannedPlayer": None,
|
||||||
|
"kills": None,
|
||||||
|
"partySize": None,
|
||||||
|
"leetifyUserId": "6c53f87a-5877-4dd3-ab8f-527119ce4939",
|
||||||
|
},
|
||||||
|
]
|
||||||
Loading…
Reference in New Issue