| 22 | return f'<a href="{link}"{cls}>{title}</a>' |
| 23 | |
| 24 | def process(self): |
| 25 | self.order_by = self.request.args.get("order_by") or "name" |
| 26 | sort_func = { |
| 27 | "name": lambda x: x, |
| 28 | "map": lambda x: x.map, |
| 29 | "gametype": lambda x: x.gametype, |
| 30 | "players": lambda x: x.player_count, |
| 31 | "progression": lambda x: x.progression, |
| 32 | }.get(self.order_by) |
| 33 | if sort_func is None: |
| 34 | return redirect(self.url_for("serverlist")) |
| 35 | |
| 36 | self.servers = self.cup.server_browser.servers.values() |
| 37 | self.servers.sort(key=sort_func) |
| 38 | if self.request.args.get("dir") == "desc": |
| 39 | self.servers.reverse() |
| 40 | self.order_desc = True |
| 41 | else: |
| 42 | self.order_desc = False |
| 43 | |
| 44 | self.players = reduce(lambda a, b: a + b.players, self.servers, []) |
| 45 | self.players = sorted(self.players, key=lambda a, b: unicodecmp(a.name, b.name)) |
| 46 | |
| 47 | |
| 48 | class Server(Page): |