Brak opisu

fpl_lib.py 6.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. from fpl import FPL
  2. from fpl.utils import get_current_gameweek, position_converter
  3. import aiohttp
  4. import asyncio
  5. from bson.objectid import ObjectId
  6. class Team:
  7. def __init__(self, title, mongo, sfp=None):
  8. self.mongo = mongo
  9. self.title = title
  10. self.gks = []
  11. self.gks_n = 2
  12. self.defs = []
  13. self.defs_n = 5
  14. self.mids = []
  15. self.mids_n = 5
  16. self.fwds = []
  17. self.fwds_n = 3
  18. def set_players(self, players):
  19. self.players = players
  20. def get_players(self):
  21. temp = []
  22. if self.gks != None:
  23. for o in self.gks:
  24. temp.append(self.sfp.get_player(o))
  25. if self.defs != None:
  26. for o in self.defs:
  27. temp.append(self.sfp.get_player(o))
  28. if self.mids != None:
  29. for o in self.mids:
  30. temp.append(self.sfp.get_player(o))
  31. if self.fwds != None:
  32. for o in self.fwds:
  33. temp.append(self.sfp.get_player(o))
  34. return temp
  35. def remove_player(self, pid):
  36. p = self.sfp.get_player(pid)
  37. ps = self.pos_str(p)
  38. if ps == "Goalkeeper":
  39. self.gks.remove(pid)
  40. if ps == "Defender":
  41. self.defs.remove(pid)
  42. if ps == "Midfielder":
  43. self.mids.remove(pid)
  44. if ps == "Forward":
  45. self.fwds.remove(pid)
  46. def show_players_info(self):
  47. print(f"{self.name} players:")
  48. for p in self.players:
  49. print(f"{p} gs = {p.goals_scored} tp = {p.total_points}")
  50. total = sum(p.goals_scored for p in self.players)
  51. print(f"Total Score => {total}")
  52. def manage_squad(self):
  53. self.select_gk()
  54. self.select_def()
  55. self.select_mid()
  56. self.select_fwd()
  57. def pos_str(self, player):
  58. return position_converter(player.element_type)
  59. def add_player(self, player):
  60. print(f"add player {player}")
  61. self.select_gk(player)
  62. self.select_def(player)
  63. self.select_mid(player)
  64. self.select_fwd(player)
  65. def select_gk(self, player):
  66. if len(self.gks) < self.gks_n:
  67. print(f"xxx {len(self.gks)}")
  68. if self.pos_str(player) == "Goalkeeper":
  69. print("Goal Keep")
  70. self.gks.append(player.id)
  71. print(self.gks)
  72. def select_def(self, player):
  73. if len(self.defs) < self.defs_n:
  74. if self.pos_str(player) == "Defender":
  75. self.defs.append(player.id)
  76. def select_mid(self, player):
  77. if len(self.mids) < self.mids_n:
  78. if self.pos_str(player) == "Midfielder":
  79. self.mids.append(player.id)
  80. def select_fwd(self, player):
  81. if len(self.fwds) < self.fwds_n:
  82. if self.pos_str(player) == "Forward":
  83. self.fwds.append(player.id)
  84. def set_starting(self):
  85. pass
  86. def transfer(self):
  87. pass
  88. def save(self):
  89. return self.mongo.db.teams.update_one({"_id": self._id}, {'$set':{
  90. 'title': self.title, 'gks': self.gks, 'defs': self.defs, 'mids': self.mids,
  91. 'fwds': self.fwds
  92. }})
  93. def create(self):
  94. return self.mongo.db.teams.insert_one({
  95. 'name': self.name, 'gks': self.gks, 'defs': self.defs, 'mids': self.mids,
  96. 'fwds': self.fwds
  97. })
  98. @classmethod
  99. def from_id(cls, oid, mongo=None):
  100. doc = mongo.db.teams.find_one({"_id": ObjectId(oid)})
  101. c = cls(None, mongo)
  102. c.init_db(doc)
  103. return c
  104. def init_db(self, col):
  105. for f in ['title', 'gks', 'defs', 'mids', 'fwds', "_id"]:
  106. print(col)
  107. setattr(self, f, col.get(f, None))
  108. if self.gks == None:
  109. self.gks = []
  110. if self.defs == None:
  111. self.defs = []
  112. if self.mids == None:
  113. self.mids = []
  114. if self.fwds == None:
  115. self.fwds = []
  116. class Leauge:
  117. def __init__(self, title, mongo=None):
  118. self.title = title
  119. self.mongo = mongo
  120. @classmethod
  121. def from_id(cls, oid, mongo=None):
  122. lg = mongo.db.lgs.find_one({"_id": ObjectId(oid)})
  123. print(f"lg = {lg}")
  124. c = cls(None, mongo)
  125. c.init_db(lg)
  126. return c
  127. def init_db(self, col):
  128. self.title = col.get('title', None)
  129. self._teams = col.get('teams', [])
  130. self._id = col.get('_id',None)
  131. @property
  132. def teams(self):
  133. return self.mongo.db.teams.find({"_id": {"$in": self._teams}})
  134. def save(self):
  135. self.mongo.db.lgs.update_one({"_id": self._id}, {
  136. '$set': {'title': self.title, 'teams': self._teams}
  137. })
  138. def create(self):
  139. return self.mongo.db.lgs.insert_one({
  140. 'title': self.title, 'teams': []
  141. })
  142. def add_team(self, team_id):
  143. self._teams.append(ObjectId(team_id))
  144. def remove_team(self, team_id):
  145. self._teams.remove(ObjectId(team_id))
  146. class SFL:
  147. def __init__(self, name,mongo=None):
  148. self.name = name
  149. self.mongo = mongo
  150. async def _setup(self):
  151. async with aiohttp.ClientSession() as session:
  152. self.session = session
  153. self.fpl = FPL(self.session)
  154. self.players = await self.fpl.get_players()
  155. #return self
  156. def setup(self):
  157. asyncio.set_event_loop(asyncio.SelectorEventLoop())
  158. asyncio.get_event_loop().run_until_complete(self._setup())
  159. def get_player(self, pid):
  160. asyncio.set_event_loop(asyncio.SelectorEventLoop())
  161. return asyncio.get_event_loop().run_until_complete(self._get_player(pid))
  162. async def _get_player(self, pid):
  163. return await self.fpl.get_player(pid)
  164. def search_player(self, name):
  165. results = [{'info': str(x), 'id': x.id } for x in self.players
  166. if (name in x.web_name.lower()) or ( name in position_converter(x.element_type).lower())]
  167. return results
  168. async def main():
  169. async with aiohttp.ClientSession() as session:
  170. fpl = FPL(session)
  171. gameweek = await fpl.get_gameweek(1)
  172. cg = await get_current_gameweek(fpl.session)
  173. gameweek2 = await fpl.get_gameweek(cg)
  174. gameweek3 = await fpl.get_gameweek(cg+1)
  175. players = await fpl.get_players()
  176. #print("==== players ====")
  177. '''
  178. for p in players[:10]:
  179. print(dir(p))
  180. '''
  181. #print(gameweek.name)
  182. #print(cg)
  183. #print(dir(gameweek))
  184. print(gameweek2)
  185. print("======================")
  186. #print(gameweek3)
  187. team = Team("Tum Team")
  188. team.set_players(players[:15])
  189. team.show_players_info()
  190. if __name__ == "__main__":
  191. asyncio.get_event_loop().run_until_complete(main())