| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255 |
- from fpl import FPL
- from fpl.utils import get_current_gameweek, position_converter
- import aiohttp
- import asyncio
- from bson.objectid import ObjectId
- class Team:
- def __init__(self, title, mongo, sfp=None):
- self.mongo = mongo
- self.title = title
- self.gks = []
- self.gks_n = 2
- self.defs = []
- self.defs_n = 5
- self.mids = []
- self.mids_n = 5
- self.fwds = []
- self.fwds_n = 3
- def set_players(self, players):
- self.players = players
- def get_players(self):
- temp = []
- if self.gks != None:
- for o in self.gks:
- temp.append(self.sfp.get_player(o))
- if self.defs != None:
- for o in self.defs:
- temp.append(self.sfp.get_player(o))
- if self.mids != None:
- for o in self.mids:
- temp.append(self.sfp.get_player(o))
- if self.fwds != None:
- for o in self.fwds:
- temp.append(self.sfp.get_player(o))
- return temp
- def remove_player(self, pid):
- p = self.sfp.get_player(pid)
- ps = self.pos_str(p)
- if ps == "Goalkeeper":
- self.gks.remove(pid)
- if ps == "Defender":
- self.defs.remove(pid)
- if ps == "Midfielder":
- self.mids.remove(pid)
- if ps == "Forward":
- self.fwds.remove(pid)
- def show_players_info(self):
- print(f"{self.name} players:")
- for p in self.players:
- print(f"{p} gs = {p.goals_scored} tp = {p.total_points}")
- total = sum(p.goals_scored for p in self.players)
- print(f"Total Score => {total}")
- def manage_squad(self):
- self.select_gk()
- self.select_def()
- self.select_mid()
- self.select_fwd()
- def pos_str(self, player):
- return position_converter(player.element_type)
- def add_player(self, player):
- print(f"add player {player}")
- self.select_gk(player)
- self.select_def(player)
- self.select_mid(player)
- self.select_fwd(player)
- def select_gk(self, player):
- if len(self.gks) < self.gks_n:
- print(f"xxx {len(self.gks)}")
- if self.pos_str(player) == "Goalkeeper":
- print("Goal Keep")
- self.gks.append(player.id)
- print(self.gks)
- def select_def(self, player):
- if len(self.defs) < self.defs_n:
- if self.pos_str(player) == "Defender":
- self.defs.append(player.id)
- def select_mid(self, player):
- if len(self.mids) < self.mids_n:
- if self.pos_str(player) == "Midfielder":
- self.mids.append(player.id)
- def select_fwd(self, player):
- if len(self.fwds) < self.fwds_n:
- if self.pos_str(player) == "Forward":
- self.fwds.append(player.id)
- def set_starting(self):
- pass
- def transfer(self):
- pass
- def save(self):
- return self.mongo.db.teams.update_one({"_id": self._id}, {'$set':{
- 'title': self.title, 'gks': self.gks, 'defs': self.defs, 'mids': self.mids,
- 'fwds': self.fwds
- }})
- def create(self):
- return self.mongo.db.teams.insert_one({
- 'name': self.name, 'gks': self.gks, 'defs': self.defs, 'mids': self.mids,
- 'fwds': self.fwds
- })
- @classmethod
- def from_id(cls, oid, mongo=None):
- doc = mongo.db.teams.find_one({"_id": ObjectId(oid)})
- c = cls(None, mongo)
- c.init_db(doc)
- return c
- def init_db(self, col):
- for f in ['title', 'gks', 'defs', 'mids', 'fwds', "_id"]:
- print(col)
- setattr(self, f, col.get(f, None))
- if self.gks == None:
- self.gks = []
- if self.defs == None:
- self.defs = []
- if self.mids == None:
- self.mids = []
- if self.fwds == None:
- self.fwds = []
- class Leauge:
- def __init__(self, title, mongo=None):
- self.title = title
- self.mongo = mongo
- @classmethod
- def from_id(cls, oid, mongo=None):
- lg = mongo.db.lgs.find_one({"_id": ObjectId(oid)})
- print(f"lg = {lg}")
- c = cls(None, mongo)
- c.init_db(lg)
- return c
- def init_db(self, col):
- self.title = col.get('title', None)
- self._teams = col.get('teams', [])
- self._id = col.get('_id',None)
- @property
- def teams(self):
- return self.mongo.db.teams.find({"_id": {"$in": self._teams}})
- def save(self):
- self.mongo.db.lgs.update_one({"_id": self._id}, {
- '$set': {'title': self.title, 'teams': self._teams}
- })
- def create(self):
- return self.mongo.db.lgs.insert_one({
- 'title': self.title, 'teams': []
- })
- def add_team(self, team_id):
- self._teams.append(ObjectId(team_id))
- def remove_team(self, team_id):
- self._teams.remove(ObjectId(team_id))
- class SFL:
- def __init__(self, name,mongo=None):
- self.name = name
- self.mongo = mongo
- async def _setup(self):
- async with aiohttp.ClientSession() as session:
- self.session = session
- self.fpl = FPL(self.session)
- self.players = await self.fpl.get_players()
- #return self
- def setup(self):
- asyncio.set_event_loop(asyncio.SelectorEventLoop())
- asyncio.get_event_loop().run_until_complete(self._setup())
- def get_player(self, pid):
- asyncio.set_event_loop(asyncio.SelectorEventLoop())
- return asyncio.get_event_loop().run_until_complete(self._get_player(pid))
- async def _get_player(self, pid):
- return await self.fpl.get_player(pid)
- def search_player(self, name):
- results = [{'info': str(x), 'id': x.id } for x in self.players
- if (name in x.web_name.lower()) or ( name in position_converter(x.element_type).lower())]
- return results
- async def main():
- async with aiohttp.ClientSession() as session:
- fpl = FPL(session)
- gameweek = await fpl.get_gameweek(1)
- cg = await get_current_gameweek(fpl.session)
- gameweek2 = await fpl.get_gameweek(cg)
- gameweek3 = await fpl.get_gameweek(cg+1)
- players = await fpl.get_players()
- #print("==== players ====")
- '''
- for p in players[:10]:
- print(dir(p))
- '''
- #print(gameweek.name)
- #print(cg)
- #print(dir(gameweek))
- print(gameweek2)
- print("======================")
- #print(gameweek3)
- team = Team("Tum Team")
- team.set_players(players[:15])
- team.show_players_info()
- if __name__ == "__main__":
- asyncio.get_event_loop().run_until_complete(main())
|