tum 5 年 前
コミット
7a135c6a0f
共有5 個のファイルを変更した191 個の追加5 個の削除を含む
  1. BIN
      __pycache__/app.cpython-36.pyc
  2. BIN
      __pycache__/fpl_lib.cpython-36.pyc
  3. 36 0
      app.py
  4. 125 5
      fpl_lib.py
  5. 30 0
      templates/team2.html

BIN
__pycache__/app.cpython-36.pyc


BIN
__pycache__/fpl_lib.cpython-36.pyc


+ 36 - 0
app.py

@@ -54,6 +54,42 @@ def lgs():
54 54
 
55 55
     return render_template('lgs.html', lgs = lgs, lg=lg, teams = teams)
56 56
 
57
+
58
+@app.route('/team2/<team_id>', methods=["GET", "POST"])
59
+def team2(team_id):
60
+    t = Team.from_id(team_id, mongo)
61
+    t.sfp = sfp
62
+
63
+    currentPlayers = t.get_players()
64
+
65
+    results = sfp.search_player("")
66
+
67
+    if 'searchBtn' in request.form:
68
+        name = request.form.get('name', '')
69
+        results = sfp.search_player(name)
70
+
71
+    if 'selectPlayers' in request.form:
72
+        selectPlayers = request.form.getlist('players')
73
+        selectPlayers = [int(x) for x in selectPlayers]
74
+
75
+        for i in selectPlayers:
76
+            p = sfp.get_player(i)
77
+            t.add_player(p)
78
+
79
+        t.save()
80
+
81
+        return redirect(url_for("team2", team_id=team_id))
82
+
83
+    if 'deletePlayer' in request.form:
84
+        deletePlayers = request.form.getlist('deletes')
85
+        for i in deletePlayers:
86
+            t.remove_player(int(i))
87
+
88
+        t.save()
89
+        return redirect(url_for("team2", team_id=team_id))
90
+
91
+    return render_template("team2.html", team = t, results = results, currentPlayers = currentPlayers)
92
+
57 93
 @app.route('/team/<team_id>', methods=["GET", "POST"])
58 94
 def team(team_id):
59 95
     team = mongo.db.teams.find_one({"_id": ObjectId(team_id)})

+ 125 - 5
fpl_lib.py

@@ -1,16 +1,65 @@
1 1
 from fpl import FPL
2
-from fpl.utils import get_current_gameweek
2
+from fpl.utils import get_current_gameweek, position_converter
3 3
 import aiohttp
4 4
 import asyncio
5 5
 from bson.objectid import ObjectId
6 6
 
7 7
 class Team:
8
-    def __init__(self, name):
9
-        self.name = name
8
+    def __init__(self, title, mongo, sfp=None):
9
+        self.mongo = mongo
10
+
11
+        self.title = title
12
+        self.gks = []
13
+        self.gks_n = 2
14
+
15
+        self.defs = []
16
+        self.defs_n = 5
17
+
18
+        self.mids = []
19
+        self.mids_n = 5
20
+
21
+        self.fwds = []
22
+        self.fwds_n = 3
23
+
24
+
10 25
 
11 26
     def set_players(self, players):
12 27
         self.players = players
13 28
 
29
+
30
+    def get_players(self):
31
+        temp = []
32
+        if self.gks != None:
33
+            for o in self.gks:
34
+                temp.append(self.sfp.get_player(o))
35
+
36
+        if self.defs != None:
37
+            for o in self.defs:
38
+                temp.append(self.sfp.get_player(o))
39
+
40
+        if self.mids != None:
41
+            for o in self.mids:
42
+                temp.append(self.sfp.get_player(o))
43
+
44
+        if self.fwds != None:
45
+            for o in self.fwds:
46
+                temp.append(self.sfp.get_player(o))
47
+
48
+        return temp
49
+
50
+    def remove_player(self, pid):
51
+        p = self.sfp.get_player(pid)
52
+        ps = self.pos_str(p)
53
+
54
+        if ps == "Goalkeeper":
55
+            self.gks.remove(pid)
56
+        if ps == "Defender":
57
+            self.defs.remove(pid)
58
+        if ps == "Midfielder":
59
+            self.mids.remove(pid)
60
+        if ps == "Forward":
61
+            self.fwds.remove(pid)
62
+
14 63
     def show_players_info(self):
15 64
         print(f"{self.name} players:")
16 65
         for p in self.players:
@@ -20,7 +69,43 @@ class Team:
20 69
         print(f"Total Score => {total}")
21 70
 
22 71
     def manage_squad(self):
23
-        pass
72
+        self.select_gk()
73
+        self.select_def()
74
+        self.select_mid()
75
+        self.select_fwd()
76
+
77
+    def pos_str(self, player):
78
+        return position_converter(player.element_type)
79
+
80
+    def add_player(self, player):
81
+        print(f"add player {player}")
82
+        self.select_gk(player)
83
+        self.select_def(player)
84
+        self.select_mid(player)
85
+        self.select_fwd(player)
86
+
87
+    def select_gk(self, player):
88
+        if len(self.gks) < self.gks_n:
89
+            print(f"xxx {len(self.gks)}")
90
+            if self.pos_str(player) == "Goalkeeper":
91
+                print("Goal Keep")
92
+                self.gks.append(player.id)
93
+                print(self.gks)
94
+
95
+    def select_def(self, player):
96
+        if len(self.defs) < self.defs_n:
97
+            if self.pos_str(player) == "Defender":
98
+                self.defs.append(player.id)
99
+
100
+    def select_mid(self, player):
101
+        if len(self.mids) < self.mids_n:
102
+            if self.pos_str(player) == "Midfielder":
103
+                self.mids.append(player.id)
104
+
105
+    def select_fwd(self, player):
106
+        if len(self.fwds) < self.fwds_n:
107
+            if self.pos_str(player) == "Forward":
108
+                self.fwds.append(player.id)
24 109
 
25 110
     def set_starting(self):
26 111
         pass
@@ -28,8 +113,42 @@ class Team:
28 113
     def transfer(self):
29 114
         pass
30 115
 
116
+    def save(self):
117
+        return  self.mongo.db.teams.update_one({"_id": self._id}, {'$set':{
118
+            'title': self.title, 'gks': self.gks, 'defs': self.defs, 'mids': self.mids,
119
+            'fwds': self.fwds
120
+        }})
121
+
122
+    def create(self):
123
+        return  self.mongo.db.teams.insert_one({
124
+            'name': self.name, 'gks': self.gks, 'defs': self.defs, 'mids': self.mids,
125
+            'fwds': self.fwds
126
+        })
127
+
128
+
129
+    @classmethod
130
+    def from_id(cls, oid, mongo=None):
131
+        doc = mongo.db.teams.find_one({"_id": ObjectId(oid)})
132
+        c = cls(None, mongo)
133
+        c.init_db(doc)
134
+        return c
135
+
136
+    def init_db(self,  col):
137
+        for f in ['title', 'gks', 'defs', 'mids', 'fwds', "_id"]:
138
+            print(col)
139
+            setattr(self, f, col.get(f, None))
140
+
141
+        if self.gks == None:
142
+            self.gks = []
143
+
144
+        if self.defs == None:
145
+            self.defs = []
31 146
 
147
+        if self.mids == None:
148
+            self.mids = []
32 149
 
150
+        if self.fwds == None:
151
+            self.fwds = []
33 152
 
34 153
 class Leauge:
35 154
     def __init__(self, title, mongo=None):
@@ -97,7 +216,8 @@ class SFL:
97 216
         return await self.fpl.get_player(pid)
98 217
 
99 218
     def search_player(self, name):
100
-        results = [{'info':  str(x), 'id': x.id } for x in self.players if name in x.web_name.lower()]
219
+        results = [{'info':  str(x), 'id': x.id } for x in self.players
220
+                   if (name in x.web_name.lower()) or ( name  in position_converter(x.element_type).lower())]
101 221
         return results
102 222
 
103 223
 

+ 30 - 0
templates/team2.html

@@ -0,0 +1,30 @@
1
+{% extends "base.html" %}
2
+{% block sidemenu %}
3
+<form method="post">
4
+    Enter Player Name
5
+    <input type="text" name="name" >
6
+    <input type="submit" name="searchBtn" value="Search">
7
+</form>
8
+    <form  method="post">
9
+        
10
+    <ul>
11
+    {% for r in results %}
12
+    <li><input type=checkbox name="players" value="{{ r.id }}" />{{ r.info }}</li>
13
+    {% endfor %}
14
+    </ul>
15
+    <input type="submit" name="selectPlayers" value="Select Players">
16
+    </form>
17
+{% endblock %}
18
+{% block content %}
19
+{{ team }}
20
+<h1> Current Team: {{ team.title }}</h1>
21
+    <h2>Players</h2>
22
+    <form method="post">
23
+    <ol>
24
+    {% for p in  currentPlayers %}
25
+    <li>{{ p }}  GS={{ p.goals_scored }} <input type="checkbox" name="deletes" value="{{ p.id  }}">Delete</li>
26
+    {% endfor %}
27
+    </ul>
28
+    <input type="submit" name="deletePlayer"  value="Delete Players">
29
+    </form>
30
+{% endblock %}