def test_creation(self): event = Event('TheEvent', date.today()+timedelta(days=1)) self.session.add(event) # self.layer.commit() event = self.session.query(Event).one() nation1 = Nation('Nation1', event.id_, 'SWE') self.session.add(nation1) nation2 = Nation('Nation2', event.id_, 'GBR') self.session.add(nation2) nation3 = Nation('Nation3', event.id_, 'FRA') self.session.add(nation3) team1 = Team('TheTeam', 'testi.testmann') self.session.add(team1) # self.layer.commit() nations = self.session.query(Nation).all() event = self.session.query(Event).one() game = Game(datetime.now(), event.id_,'group1', nation1_id=nations[0].id_, nation2_id=nations[1].id_) game.score_nation1 = 3 game.score_nation2 = 0 game2 = Game(datetime.now(), event.id_,'group1', nation1_id=nations[0].id_, nation2_id=nations[2].id_) game2.score_nation1 = 0 game2.score_nation2 = 1 self.session.add(game) self.session.add(game2) # self.layer.commit() team = self.session.query(Team).first() nation = self.session.query(Nation).first() event = self.session.query(Event).one() player1 = Player('Freddy', 'midfield', nation.id_, event.id_) self.session.add(player1) # self.layer.commit() team = self.session.query(Team).first() player1 = self.session.query(Player).first() team.players.append(Teams_Players(team.id_, player1, is_starter=True)) player1 = self.session.query(Player).one() game = self.session.query(Game).all() game[0].players.append(player1) game[1].players.append(player1) goal1 = Goal(player1.id_, game[0].id_, False) self.session.add(goal1) card1 = Card(player1.id_, game[0].id_, 'Yellow') self.session.add(card1) # self.layer.commit() player1 = self.session.query(Player).one() log = player1.get_log() goal = self.session.query(Goal).first() card = self.session.query(Card).first() self.assertEqual(len(log), 4) self.assertEqual(log[0][0], card) self.assertEqual(log[1][0], goal) self.assertEqual(log[2][1], 4) self.assertEqual(log[3][1], -2) team = self.session.query(Team).one()
def import_team(rootpage, session, event): """Imports multiple Players a time from a external Site. Currently only working with Transfermarkt.ch """ headers = {"User-agent": "Mozilla/5.0"} for page in rootpage: f = requests.get(page, headers=headers) nationpage = f.content nationpage = PyQuery(nationpage.decode("utf8")) content = nationpage("#main") nation_name = content(".box-header .spielername-profil").text() country_code = COUNTRY_CODE_MAPPING[nation_name] # Lookup nation nation = session.query(Nation).filter(Nation.country == country_code).first() # Create a new nation if we didn't find one if nation is None: nation = Nation(nation_name, event, country_code) nation.country = country_code session.add(nation) playertable = content("table.items") playerlist = playertable("tbody") for item in playerlist("tbody > tr"): name = PyQuery(item)(".hide-for-small a.spielprofil_tooltip").text() link = PyQuery(item)(".hide-for-small a.spielprofil_tooltip").attr("href") link = "http://www.transfermarkt.ch" + link f = requests.get(link, headers=headers) playerpage = f.content playerpage = PyQuery(playerpage.decode("utf8")) clubname = playerpage(".dataZusatzDaten .hauptpunkt .vereinprofil_tooltip").text() league = playerpage(".dataZusatzDaten .mediumpunkt a").text() data_items = playerpage(".dataContent p") player_props = dict( [ (k.text(), v.text()) for k, v in zip(data_items(".dataItem").items(), data_items(".dataValue").items()) ] ) img_src = playerpage(".dataBild img").attr("src") img = requests.get(img_src, headers=headers).content try: im = Image.open(StringIO.StringIO(img)) im.verify() except Exception: img = None # Conversions position = POSITION_MAPPING.get(player_props.get("Position:")) # Marktwert value_data = playerpage(".dataMarktwert").text() value = value_data.split()[0] multiplier = MULTIPLIER_MAPPING.get(value_data.split()[1], 1) if "," in value: value = int(value.split(",")[0]) * multiplier + int(value.split(",")[1]) * multiplier * 0.01 else: value = int(value) * multiplier size = player_props.get(u"Gr\xf6\xdfe:", "0.00").replace(",", ".") date_of_birth = date.fromtimestamp( time.mktime(time.strptime(player_props.get("Geb./Alter:").split()[0], "%d.%m.%Y")) ) # Lookup player player = session.query(Player).filter(Player.name == name and Player.nation_id == nation.id_).first() # Create a new player if we didn't find one. if player is None: player = Player(name, position, nation.id_, event) session.add(player) # Set/update player properties player.original_name = player_props.get("Name im Heimatland:") player.date_of_birth = date_of_birth player.age = int(player_props.get("Geb./Alter:").split()[1].strip("()")) # player.foot = player_props.get(u'Fu\xdf:') player.value = value player.size = size player.club = clubname player.league = league player.image = img