summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gamelocker/api.py23
-rw-r--r--tests/gamelocker_test.py38
2 files changed, 60 insertions, 1 deletions
diff --git a/gamelocker/api.py b/gamelocker/api.py
index dee307d..2e4faf9 100644
--- a/gamelocker/api.py
+++ b/gamelocker/api.py
@@ -9,6 +9,7 @@ This module implements the Gamelocker API.
"""
import inspect
+import datetime
import requests
import requests_jwt
import gamelocker.datatypes
@@ -139,7 +140,10 @@ class Gamelocker(object):
"""
return self._get("players", elid)
- def matches(self, limit=None, offset=None, sort=None):
+ def matches(self,
+ limit=None, offset=None, sort=None,
+ player=None, team=None,
+ createdAtStart=None, createdAtEnd=None):
"""Returns a list of recent matches.
:param limit: Maximum number of matches to return.
@@ -148,6 +152,10 @@ class Gamelocker(object):
:type limit: int
:param sort: Sort query to use.
:type sort: str
+ :param createdAtStart: Earliest createdAt time.
+ :type createdAtStart: `datetime.datetime` or str
+ :param createdAtEnd: Latest createdAt time.
+ :type createdAtEnd: `datetime.datetime` or str
:return: List of matches.
:rtype: list of dict
"""
@@ -159,4 +167,17 @@ class Gamelocker(object):
params["page[offset]"] = offset
if sort: # TODO make this nice and usable
params["sort"] = sort
+ if player:
+ params["filter[playerName]"] = player
+ if team:
+ params["filter[teamName]"] = team
+ if createdAtStart:
+ if isinstance(createdAtStart, datetime.datetime):
+ createdAtStart = createdAtStart.isoformat()
+ params["filter[createdAt-start]"] = createdAtStart
+ if createdAtEnd:
+ if isinstance(createdAtEnd, datetime.datetime):
+ createdAtEnd = createdAtEnd.isoformat()
+ params["filter[createdAt-end]"] = createdAtEnd
+
return self._get("matches", params=params)
diff --git a/tests/gamelocker_test.py b/tests/gamelocker_test.py
index 0b61d8f..d9f967d 100644
--- a/tests/gamelocker_test.py
+++ b/tests/gamelocker_test.py
@@ -3,6 +3,7 @@
import pytest
import requests
import gamelocker
+import datetime
class TestGamelocker:
apikey = "aaa.bbb.ccc"
@@ -29,13 +30,50 @@ class TestGamelocker:
assert isinstance(match.rosters[0].participants[0].player, gamelocker.datatypes.Player)
assert isinstance(match.rosters[0].participants[0].player.name, str)
+ def test_matches(self, api):
matches = api.matches()
assert len(matches) > 0
assert isinstance(matches[0], gamelocker.datatypes.Match)
assert matches[0].duration > 0
+ def test_matchesfilters(self, api):
assert len(api.matches(limit=5)) == 5
+ # TODO uncomment as soon as the API is up
+# matches = api.matches(limit=10, sort="duration")
+# assert matches[0].duration < matches[9].duration
+
+ def fromiso(s):
+ return datetime.datetime.strptime(s, "%Y-%m-%dT%H:%M:%SZ")
+
+ start = "2017-01-11T02:25:00Z"
+ end = "2017-01-11T02:30:00Z"
+ matches = api.matches(createdAtStart=start, createdAtEnd=end)
+ for match in matches:
+ assert fromiso(end) >= fromiso(match.createdAt) >= fromiso(start)
+
+# nick = "MMotooks123"
+# matches = api.matches(limit=5, player=nick)
+# for match in matches:
+# success = False
+# for roster in match.rosters:
+# for participant in roster.participants:
+# if participant.player.name == nick:
+# success = True
+# break
+# assert success
+#
+# team = "HALO"
+# matches = api.matches(limit=5, team=team)
+# for match in matches:
+# success = False
+# for roster in match.rosters:
+# if roster.team:
+# if roster.team.name == team:
+# success = True
+# break
+# assert success
+
def test_player(self, api):
assert api.player("6abb30de-7cb8-11e4-8bd3-06eb725f8a76").name == "boombastic04"
assert "lossStreak" in api.player("6abb30de-7cb8-11e4-8bd3-06eb725f8a76").stats