Skip to content

Commit

Permalink
Custom parser for manacube to allow correct types
Browse files Browse the repository at this point in the history
  • Loading branch information
Darkflame72 committed Jun 9, 2021
1 parent 65ccc05 commit aae1934
Show file tree
Hide file tree
Showing 2 changed files with 148 additions and 85 deletions.
158 changes: 110 additions & 48 deletions mcsrvstats/models/manacube.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
"""Manacube related objects."""
from typing import Optional

from pydantic import BaseModel
from datetime import datetime

from pydantic import BaseModel, validator


class Parkour(BaseModel):
Expand All @@ -14,26 +16,38 @@ class Parkour(BaseModel):
courses (str): How many courses the player has done.
"""

playtime: Optional[str] = "N/A"
mana: Optional[str] = "N/A"
score: Optional[str] = "N/A"
courses: Optional[str] = "N/A"
playtime: Optional[str] = "No Time"
mana: Optional[int] = 0
score: Optional[int] = 0
courses: Optional[int] = 0

@validator('*', pre=True)
def name_must_contain_space(cls, v, field):
if v == "N/A":
return field.default
return v


class Aztec(BaseModel):
"""Aztec model for manacube.
Args:
playtime (str): How many hours the player has played for.
mobKills (str): How ma-ny mobs the player has killed.
mobKills (str): How many mobs the player has killed.
mana (str): How much mana the player has.
money (str): How much money the player has.
"""

playtime: Optional[str] = "N/A"
mobkills: Optional[str] = "N/A"
mana: Optional[str] = "N/A"
money: Optional[str] = "N/A"
playtime: Optional[str] = "No Time"
mobkills: Optional[int] = 0
mana: Optional[int] = 0
money: Optional[int] = 0

@validator('*', pre=True)
def name_must_contain_space(cls, v, field):
if v == "N/A":
return field.default
return v


class Oasis(BaseModel):
Expand All @@ -46,10 +60,16 @@ class Oasis(BaseModel):
money (str): How many quests the player has completed.
"""

playtime: Optional[str] = "N/A"
mobkills: Optional[str] = "N/A"
mana: Optional[str] = "N/A"
money: Optional[str] = "N/A"
playtime: Optional[str] = "No Time"
mobkills: Optional[int] = 0
mana: Optional[int] = 0
money: Optional[int] = 0

@validator('*', pre=True)
def name_must_contain_space(cls, v, field):
if v == "N/A":
return field.default
return v


class Islands(BaseModel):
Expand All @@ -62,10 +82,16 @@ class Islands(BaseModel):
money (str): How much money the player has.
"""

playtime: Optional[str] = "N/A"
mobkills: Optional[str] = "N/A"
silver: Optional[str] = "N/A"
money: Optional[str] = "N/A"
playtime: Optional[str] = "No Time"
mobkills: Optional[int] = 0
silver: Optional[int] = 0
money: Optional[int] = 0

@validator('*', pre=True)
def name_must_contain_space(cls, v, field):
if v == "N/A":
return field.default
return v


class Survival(BaseModel):
Expand All @@ -78,10 +104,16 @@ class Survival(BaseModel):
quests (str): How many quests the player has completed.
"""

playtime: Optional[str] = "N/A"
mobkills: Optional[str] = "N/A"
money: Optional[str] = "N/A"
quests: Optional[str] = "N/A"
playtime: Optional[str] = "No Time"
mobkills: Optional[int] = 0
money: Optional[int] = 0
quests: Optional[int] = 0

@validator('*', pre=True)
def name_must_contain_space(cls, v, field):
if v == "N/A":
return field.default
return v


class Factions(BaseModel):
Expand All @@ -94,10 +126,16 @@ class Factions(BaseModel):
money (str): How much money the player has.
"""

playtime: Optional[str] = "N/A"
kills: Optional[str] = "N/A"
mobkills: Optional[str] = "N/A"
money: Optional[str] = "N/A"
playtime: Optional[str] = "No Time"
kills: Optional[int] = 0
mobkills: Optional[int] = 0
money: Optional[int] = 0

@validator('*', pre=True)
def name_must_contain_space(cls, v, field):
if v == "N/A":
return field.default
return v


class Aether(BaseModel):
Expand All @@ -110,10 +148,16 @@ class Aether(BaseModel):
rebirths (str): How many rebirths the player has had.
"""

playtime: Optional[str] = "N/A"
mininglevel: Optional[str] = "N/A"
money: Optional[str] = "N/A"
rebirths: Optional[str] = "N/A"
playtime: Optional[str] = "No Time"
mininglevel: Optional[int] = 0
money: Optional[int] = 0
rebirths: Optional[int] = 0

@validator('*', pre=True)
def name_must_contain_space(cls, v, field):
if v == "N/A":
return field.default
return v


class Atlas(BaseModel):
Expand All @@ -126,10 +170,16 @@ class Atlas(BaseModel):
rebirths (str): How many rebirths the player has had.
"""

playtime: Optional[str] = "N/A"
mininglevel: Optional[str] = "N/A"
money: Optional[str] = "N/A"
rebirths: Optional[str] = "N/A"
playtime: Optional[str] = "No Time"
mininglevel: Optional[int] = 0
money: Optional[int] = 0
rebirths: Optional[int] = 0

@validator('*', pre=True)
def name_must_contain_space(cls, v, field):
if v == "N/A":
return field.default
return v


class Creative(BaseModel):
Expand All @@ -141,9 +191,15 @@ class Creative(BaseModel):
blocksbroken (str): How many blocks the player has broken.
"""

playtime: Optional[str] = "N/A"
blocksplaced: Optional[str] = "N/A"
blocksbroken: Optional[str] = "N/A"
playtime: Optional[str] = "No Time"
blocksplaced: Optional[int] = 0
blocksbroken: Optional[int] = 0

@validator('*', pre=True)
def name_must_contain_space(cls, v, field):
if v == "N/A":
return field.default
return v


class Kitpvp(BaseModel):
Expand All @@ -156,10 +212,16 @@ class Kitpvp(BaseModel):
kills (str): How many kills the player has.
"""

playtime: Optional[str] = "N/A"
level: Optional[str] = "N/A"
money: Optional[str] = "N/A"
kills: Optional[str] = "N/A"
playtime: Optional[str] = "No Time"
level: Optional[int] = 0
money: Optional[int] = 0
kills: Optional[int] = 0

@validator('*', pre=True)
def name_must_contain_space(cls, v, field):
if v == "N/A":
return field.default
return v


class Manacube(BaseModel):
Expand All @@ -185,13 +247,13 @@ class Manacube(BaseModel):
Kitpvp (Kitpvp): Kitpvp stats.
"""

exists: Optional[str] = "N/A"
level: Optional[str] = "N/A"
rank: Optional[str] = "N/A"
cubits: Optional[str] = "N/A"
firstseen: Optional[str] = "N/A"
lastseen: Optional[str] = "N/A"
lastseenago: Optional[str] = "N/A"
exists: bool
level: int
rank: str
cubits: float
firstseen: datetime
lastseen: datetime
lastseenago: str
parkour: Parkour
aztec: Aztec
oasis: Oasis
Expand Down
75 changes: 38 additions & 37 deletions tests/test_manacube.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
"""Test for Manaucbe."""
from datetime import datetime
from mcsrvstats import Client

import pytest
Expand Down Expand Up @@ -84,59 +85,59 @@ async def test_manacube(mcsrvstats_client: Client) -> None:
client = mcsrvstats_client
data = await client.manacube("_iTempo")

assert data.exists == "True"
assert data.level == "14"
assert data.exists == True
assert data.level == 14
assert data.rank == "default"
assert data.cubits == "61.87"
assert data.firstseen == "2019-07-07 00:22:11"
assert data.lastseen == "2021-01-20 01:07:32"
assert data.cubits == 61.87
assert data.firstseen == datetime.strptime("2019-07-07 00:22:11", "%Y-%m-%d %H:%M:%S")
assert data.lastseen == datetime.strptime("2021-01-20 01:07:32", "%Y-%m-%d %H:%M:%S")
assert data.lastseenago == "1 second ago"

assert data.parkour.playtime == "15 hours"
assert data.parkour.mana == "N/A"
assert data.parkour.score == "0"
assert data.parkour.courses == "0"
assert data.parkour.mana == 0
assert data.parkour.score == 0
assert data.parkour.courses == 0

assert data.aztec.playtime == "3046 hours"
assert data.aztec.mobkills == "N/A"
assert data.aztec.mana == "150"
assert data.aztec.money == "50"
assert data.aztec.mobkills == 0
assert data.aztec.mana == 150
assert data.aztec.money == 50

assert data.oasis.playtime == "1 hours"
assert data.oasis.mobkills == "N/A"
assert data.oasis.mana == "185"
assert data.oasis.money == "2000000051"
assert data.oasis.mobkills == 0
assert data.oasis.mana == 185
assert data.oasis.money == 2000000051

assert data.islands.playtime == "6244 hours"
assert data.islands.mobkills == "N/A"
assert data.islands.silver == "13950"
assert data.islands.money == "3188330000"
assert data.islands.mobkills == 0
assert data.islands.silver == 13950
assert data.islands.money == 3188330000

assert data.survival.playtime == "0 mins"
assert data.survival.mobkills == "N/A"
assert data.survival.money == "300"
assert data.survival.quests == "0"
assert data.survival.mobkills == 0
assert data.survival.money == 300
assert data.survival.quests == 0

assert data.factions.playtime == "N/A"
assert data.factions.kills == "N/A"
assert data.factions.mobkills == "N/A"
assert data.factions.money == "N/A"
assert data.factions.playtime == "No Time"
assert data.factions.kills == 0
assert data.factions.mobkills == 0
assert data.factions.money == 0

assert data.aether.playtime == "N/A"
assert data.aether.mininglevel == "N/A"
assert data.aether.money == "N/A"
assert data.aether.rebirths == "N/A"
assert data.aether.playtime == "No Time"
assert data.aether.mininglevel == 0
assert data.aether.money == 0
assert data.aether.rebirths == 0

assert data.atlas.playtime == "N/A"
assert data.atlas.mininglevel == "N/A"
assert data.atlas.money == "N/A"
assert data.atlas.rebirths == "N/A"
assert data.atlas.playtime == "No Time"
assert data.atlas.mininglevel == 0
assert data.atlas.money == 0
assert data.atlas.rebirths == 0

assert data.creative.playtime == "73 hours"
assert data.creative.blocksplaced == "0"
assert data.creative.blocksbroken == "0"
assert data.creative.blocksplaced == 0
assert data.creative.blocksbroken == 0

assert data.kitpvp.playtime == "7 mins"
assert data.kitpvp.level == "0"
assert data.kitpvp.money == "10"
assert data.kitpvp.kills == "0"
assert data.kitpvp.level == 0
assert data.kitpvp.money == 10
assert data.kitpvp.kills == 0

0 comments on commit aae1934

Please sign in to comment.