first init of this template.
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
__all__ = ['TeamSnap', 'Team', 'Event', 'Availability', 'Member', 'Location', 'Me']
|
__all__ = ['TeamSnap', 'Team', 'Event', 'Availability', 'Member', 'Location', 'Me']
|
||||||
from apiclient import APIClient, HeaderAuthentication, JsonResponseHandler, JsonRequestFormatter
|
from apiclient import APIClient, HeaderAuthentication, JsonResponseHandler, JsonRequestFormatter
|
||||||
|
import datetime
|
||||||
|
|
||||||
class ApiObject():
|
class ApiObject():
|
||||||
rel = None
|
rel = None
|
||||||
@@ -43,20 +44,21 @@ class ApiObject():
|
|||||||
"template":{
|
"template":{
|
||||||
"data": [{
|
"data": [{
|
||||||
"name":k,
|
"name":k,
|
||||||
"value":v
|
"value":str(v)
|
||||||
} for k,v in self.data.items()]
|
} for k,v in self.data.items()]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
r = self.client.put_item(self.rel, data=data)
|
id = self.data.get('id')
|
||||||
|
r = self.client.put_item(self.rel, id=id, data=data)
|
||||||
self.data = r
|
self.data = r
|
||||||
return r
|
return r
|
||||||
|
|
||||||
def delete(self):
|
def delete(self):
|
||||||
self.client.delete_item(self.rel, id=self.data['id'])
|
self.client.delete_item(self.rel, id=self.data['id'])
|
||||||
|
|
||||||
|
|
||||||
class Me (ApiObject):
|
class Me (ApiObject):
|
||||||
rel = "me"
|
rel = "me"
|
||||||
|
type = "user"
|
||||||
version = "3.866.0"
|
version = "3.866.0"
|
||||||
template = {
|
template = {
|
||||||
"data": [
|
"data": [
|
||||||
@@ -103,6 +105,7 @@ class Me (ApiObject):
|
|||||||
|
|
||||||
class User (ApiObject):
|
class User (ApiObject):
|
||||||
rel = "users"
|
rel = "users"
|
||||||
|
type = "user"
|
||||||
version = "3.866.0"
|
version = "3.866.0"
|
||||||
template = {
|
template = {
|
||||||
"data": [
|
"data": [
|
||||||
@@ -146,6 +149,7 @@ class User (ApiObject):
|
|||||||
|
|
||||||
class Event (ApiObject):
|
class Event (ApiObject):
|
||||||
rel = "events"
|
rel = "events"
|
||||||
|
type = "event"
|
||||||
version = "3.866.0"
|
version = "3.866.0"
|
||||||
template = {
|
template = {
|
||||||
"data": [
|
"data": [
|
||||||
@@ -274,6 +278,7 @@ class Event (ApiObject):
|
|||||||
|
|
||||||
class Team (ApiObject):
|
class Team (ApiObject):
|
||||||
rel = "teams"
|
rel = "teams"
|
||||||
|
type = "team"
|
||||||
version = "3.866.0"
|
version = "3.866.0"
|
||||||
template = {
|
template = {
|
||||||
"data": [
|
"data": [
|
||||||
@@ -338,6 +343,7 @@ class Team (ApiObject):
|
|||||||
|
|
||||||
class Availability (ApiObject):
|
class Availability (ApiObject):
|
||||||
rel = "availabilities"
|
rel = "availabilities"
|
||||||
|
type = "availability"
|
||||||
version = "3.866.0"
|
version = "3.866.0"
|
||||||
template = {
|
template = {
|
||||||
"data": [
|
"data": [
|
||||||
@@ -368,6 +374,7 @@ class Availability (ApiObject):
|
|||||||
|
|
||||||
class Member (ApiObject):
|
class Member (ApiObject):
|
||||||
rel = "members"
|
rel = "members"
|
||||||
|
type = "member"
|
||||||
version = "3.866.0"
|
version = "3.866.0"
|
||||||
template = {
|
template = {
|
||||||
"data": [
|
"data": [
|
||||||
@@ -444,6 +451,7 @@ class Member (ApiObject):
|
|||||||
|
|
||||||
class Location (ApiObject):
|
class Location (ApiObject):
|
||||||
rel = "locations"
|
rel = "locations"
|
||||||
|
type = "location"
|
||||||
version = "3.866.0"
|
version = "3.866.0"
|
||||||
template = {
|
template = {
|
||||||
"data": [
|
"data": [
|
||||||
@@ -483,6 +491,7 @@ class Location (ApiObject):
|
|||||||
|
|
||||||
class Opponent (ApiObject):
|
class Opponent (ApiObject):
|
||||||
rel = "opponents"
|
rel = "opponents"
|
||||||
|
type = "opponent"
|
||||||
version = "3.866.0"
|
version = "3.866.0"
|
||||||
template = {
|
template = {
|
||||||
"data": [
|
"data": [
|
||||||
@@ -513,6 +522,7 @@ class Opponent (ApiObject):
|
|||||||
|
|
||||||
class EventLineupEntry (ApiObject):
|
class EventLineupEntry (ApiObject):
|
||||||
rel = "event_lineup_entries"
|
rel = "event_lineup_entries"
|
||||||
|
type = "event_lineup_entry"
|
||||||
version = "3.866.0"
|
version = "3.866.0"
|
||||||
template = {
|
template = {
|
||||||
"data": [
|
"data": [
|
||||||
@@ -535,13 +545,30 @@ class EventLineupEntry (ApiObject):
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def search(cls, client, **kwargs):
|
||||||
|
# For some reason the query listed for search at this endpoint is for EventLineup, not EventLineupEntry
|
||||||
|
# this is a workaround
|
||||||
|
r = client.get(f"{client.link(cls.rel)}/search", params=kwargs)
|
||||||
|
results = client.parse_response(r)
|
||||||
|
[cls(client, rel=cls.rel, data=r) for r in results]
|
||||||
|
return [cls(client, rel=cls.rel, data=r) for r in results]
|
||||||
|
|
||||||
class EventLineup (ApiObject):
|
class EventLineup (ApiObject):
|
||||||
rel = "event_lineups"
|
rel = "event_lineups"
|
||||||
|
type = "event_lineup"
|
||||||
|
version = "3.866.0"
|
||||||
|
template = {}
|
||||||
|
|
||||||
|
class AvailabilitySummary (ApiObject):
|
||||||
|
rel = "availability_summaries"
|
||||||
|
type = "availability_summary"
|
||||||
version = "3.866.0"
|
version = "3.866.0"
|
||||||
template = {}
|
template = {}
|
||||||
|
|
||||||
class Statistics (ApiObject):
|
class Statistics (ApiObject):
|
||||||
rel = "statistics"
|
rel = "statistics"
|
||||||
|
type = "statistic"
|
||||||
version = "3.866.0"
|
version = "3.866.0"
|
||||||
template = {
|
template = {
|
||||||
"data": [
|
"data": [
|
||||||
@@ -613,6 +640,33 @@ class TeamSnap(APIClient):
|
|||||||
d = {l['rel']:l['href'] for l in self._root_collection["links"]}
|
d = {l['rel']:l['href'] for l in self._root_collection["links"]}
|
||||||
return d.get(link_name)
|
return d.get(link_name)
|
||||||
|
|
||||||
|
def bulk_load(self, team_id, types, **kwargs):
|
||||||
|
"""
|
||||||
|
Returns a heterogeneous collection of the specified types for a specified team or teams.
|
||||||
|
Additional filters can be passed into requested types by passing them in the url's querystring
|
||||||
|
as type__filter=value (i.e. ?event__start_date=2015-01-01).
|
||||||
|
Any filter can be passed that is available on the search for the specified type.
|
||||||
|
:param team_id:
|
||||||
|
:param types:
|
||||||
|
:param kwargs:
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
types_dict = {t.type:t for t in types}
|
||||||
|
r = self.query(
|
||||||
|
rel="self",
|
||||||
|
query="bulk_load",
|
||||||
|
types=",".join(types_dict.keys()),
|
||||||
|
team_id=team_id,
|
||||||
|
**kwargs
|
||||||
|
)
|
||||||
|
|
||||||
|
result = []
|
||||||
|
for item in r:
|
||||||
|
cls = types_dict[item['type']]
|
||||||
|
instance = cls(self, rel=cls.rel, data=item)
|
||||||
|
result.append(instance)
|
||||||
|
return result
|
||||||
|
|
||||||
def _by_rel (self, url, k):
|
def _by_rel (self, url, k):
|
||||||
try:
|
try:
|
||||||
{l['rel']: l for l in self._root_collection[k]}
|
{l['rel']: l for l in self._root_collection[k]}
|
||||||
@@ -646,8 +700,8 @@ class TeamSnap(APIClient):
|
|||||||
r = super(TeamSnap, self).post(f"{self.link(rel)}", data=data)
|
r = super(TeamSnap, self).post(f"{self.link(rel)}", data=data)
|
||||||
return self.parse_response(r)[0]
|
return self.parse_response(r)[0]
|
||||||
|
|
||||||
def put_item(self, rel, data):
|
def put_item(self, rel, id, data):
|
||||||
r = super(TeamSnap, self).post(f"{self.link(rel)}", data=data)
|
r = super(TeamSnap, self).put(f"{self.link(rel)}/{id}", data=data)
|
||||||
return self.parse_response(r)[0]
|
return self.parse_response(r)[0]
|
||||||
|
|
||||||
def delete_item(self, rel, id):
|
def delete_item(self, rel, id):
|
||||||
@@ -661,22 +715,17 @@ class TeamSnap(APIClient):
|
|||||||
for item in response['collection'].get('items',[]):
|
for item in response['collection'].get('items',[]):
|
||||||
details = {}
|
details = {}
|
||||||
for detail in item['data']:
|
for detail in item['data']:
|
||||||
# TODO type casting and validation based on item['type']
|
value = detail['value']
|
||||||
details[detail['name']] = detail['value']
|
value_type = detail['type']
|
||||||
|
if value:
|
||||||
|
if value_type == 'DateTime':
|
||||||
|
value = datetime.datetime.strptime(value, '%Y-%m-%dT%H:%M:%S%z')
|
||||||
|
elif value_type == 'Boolean':
|
||||||
|
value = value == True
|
||||||
|
elif value_type == 'Integer':
|
||||||
|
value = int(value)
|
||||||
|
details[detail['name']] = value
|
||||||
result.append(details)
|
result.append(details)
|
||||||
|
|
||||||
return result
|
return result
|
||||||
# return [{detail['name']: detail['value'] for detail in item} for item in items]
|
# return [{detail['name']: detail['value'] for detail in item} for item in items]
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def parse_template(self, response):
|
|
||||||
result = []
|
|
||||||
items = [item for item in response['collection'].get('template', []).get('data',{})]
|
|
||||||
for item in response['collection'].get('items', []):
|
|
||||||
details = {}
|
|
||||||
for detail in item['data']:
|
|
||||||
# TODO type casting and validation based on item['type']
|
|
||||||
details[detail['name']] = detail['value']
|
|
||||||
result.append(details)
|
|
||||||
|
|
||||||
return result
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
import unittest
|
import unittest
|
||||||
from teamsnap import TeamSnap
|
from pyteamsnap import TeamSnap
|
||||||
from teamsnap.api import Team, Event, Availability, Me, ApiObject
|
from pyteamsnap.api import Team, Event, Availability, Me, ApiObject, Member
|
||||||
from os import getenv
|
from os import getenv
|
||||||
|
|
||||||
TEAMSNAP_TOKEN = getenv('TEAMSNAP_TOKEN')
|
TEAMSNAP_TOKEN = getenv('TEAMSNAP_TOKEN')
|
||||||
@@ -8,11 +8,8 @@ TEAMSNAP_TEAM = getenv('TEAMSNAP_TEAM')
|
|||||||
TEAMSNAP_EVENT = getenv('TEAMSNAP_EVENT')
|
TEAMSNAP_EVENT = getenv('TEAMSNAP_EVENT')
|
||||||
|
|
||||||
c = TeamSnap(token=TEAMSNAP_TOKEN)
|
c = TeamSnap(token=TEAMSNAP_TOKEN)
|
||||||
es = Event.search(c, team_id=TEAMSNAP_TEAM)
|
c.bulk_load(team_id=TEAMSNAP_TEAM,types=[Event, Member])
|
||||||
q1 = c.query("events", "search", team_id=TEAMSNAP_TEAM)
|
|
||||||
team = c.teams.get(TEAMSNAP_TEAM)
|
|
||||||
event = c.events.get(TEAMSNAP_EVENT)
|
|
||||||
col = c.get_collection(rel="events", id=TEAMSNAP_TEAM)
|
|
||||||
pass
|
pass
|
||||||
# q2 = c.events.search(team_id=TEAM_ID)
|
# q2 = c.events.search(team_id=TEAM_ID)
|
||||||
# a = c.availabilities.search(event_id=q2[0]['id'])
|
# a = c.availabilities.search(event_id=q2[0]['id'])
|
||||||
|
|||||||
Reference in New Issue
Block a user