コード例 #1
0
    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()
コード例 #2
0
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