Fixes for importing and HUD with the postgres db.
This commit is contained in:
		
							parent
							
								
									f55460341d
								
							
						
					
					
						commit
						069aa025e4
					
				| 
						 | 
					@ -38,12 +38,15 @@ class Database:
 | 
				
			||||||
        if   c.supported_databases[db_name].db_server == 'postgresql':
 | 
					        if   c.supported_databases[db_name].db_server == 'postgresql':
 | 
				
			||||||
            #    psycopg2 database module for posgres via DB-API
 | 
					            #    psycopg2 database module for posgres via DB-API
 | 
				
			||||||
            import psycopg2
 | 
					            import psycopg2
 | 
				
			||||||
 | 
					            import psycopg2.extensions 
 | 
				
			||||||
 | 
					            psycopg2.extensions.register_type(psycopg2.extensions.UNICODE)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            try:
 | 
					            try:
 | 
				
			||||||
                self.connection = psycopg2.connect(host = c.supported_databases[db_name].db_ip,
 | 
					#                self.connection = psycopg2.connect(host = c.supported_databases[db_name].db_ip,
 | 
				
			||||||
                                       user = c.supported_databases[db_name].db_user,
 | 
					#                                       user = c.supported_databases[db_name].db_user,
 | 
				
			||||||
                                       password = c.supported_databases[db_name].db_pass,
 | 
					#                                       password = c.supported_databases[db_name].db_pass,
 | 
				
			||||||
                                       database = c.supported_databases[db_name].db_name)
 | 
					#                                       database = c.supported_databases[db_name].db_name)
 | 
				
			||||||
 | 
					                self.connection = psycopg2.connect(database = c.supported_databases[db_name].db_name)
 | 
				
			||||||
            except:
 | 
					            except:
 | 
				
			||||||
                print "Error opening database connection %s.  See error log file." % (file)
 | 
					                print "Error opening database connection %s.  See error log file." % (file)
 | 
				
			||||||
                traceback.print_exc(file=sys.stderr)
 | 
					                traceback.print_exc(file=sys.stderr)
 | 
				
			||||||
| 
						 | 
					@ -120,7 +123,7 @@ class Database:
 | 
				
			||||||
        """Get and return the cards for each player in the hand."""
 | 
					        """Get and return the cards for each player in the hand."""
 | 
				
			||||||
        cards = {} # dict of cards, the key is the seat number example: {1: 'AcQd9hTs5d'}
 | 
					        cards = {} # dict of cards, the key is the seat number example: {1: 'AcQd9hTs5d'}
 | 
				
			||||||
        c = self.connection.cursor()
 | 
					        c = self.connection.cursor()
 | 
				
			||||||
        c.execute(self.sql.query['get_cards'], hand)
 | 
					        c.execute(self.sql.query['get_cards'], (hand, ))
 | 
				
			||||||
        colnames = [desc[0] for desc in c.description]
 | 
					        colnames = [desc[0] for desc in c.description]
 | 
				
			||||||
        for row in c.fetchall():
 | 
					        for row in c.fetchall():
 | 
				
			||||||
            s_dict = {}
 | 
					            s_dict = {}
 | 
				
			||||||
| 
						 | 
					@ -133,7 +136,7 @@ class Database:
 | 
				
			||||||
        """Get and return the community cards for the specified hand."""
 | 
					        """Get and return the community cards for the specified hand."""
 | 
				
			||||||
        cards = {}
 | 
					        cards = {}
 | 
				
			||||||
        c = self.connection.cursor()
 | 
					        c = self.connection.cursor()
 | 
				
			||||||
        c.execute(self.sql.query['get_common_cards'], hand)
 | 
					        c.execute(self.sql.query['get_common_cards'], (hand,))
 | 
				
			||||||
        colnames = [desc[0] for desc in c.description]
 | 
					        colnames = [desc[0] for desc in c.description]
 | 
				
			||||||
        for row in c.fetchall():
 | 
					        for row in c.fetchall():
 | 
				
			||||||
            s_dict = {}
 | 
					            s_dict = {}
 | 
				
			||||||
| 
						 | 
					@ -154,20 +157,20 @@ class Database:
 | 
				
			||||||
#                cards += "xx"
 | 
					#                cards += "xx"
 | 
				
			||||||
#            else:
 | 
					#            else:
 | 
				
			||||||
#                cards += ranks[d['card' + str(i) + 'Value']] + d['card' +str(i) + 'Suit']
 | 
					#                cards += ranks[d['card' + str(i) + 'Value']] + d['card' +str(i) + 'Suit']
 | 
				
			||||||
            cv = "card%dValue" % i
 | 
					            cv = "card%dvalue" % i
 | 
				
			||||||
            if cv not in d or d[cv] == None:
 | 
					            if cv not in d or d[cv] == None:
 | 
				
			||||||
                break
 | 
					                break
 | 
				
			||||||
            elif d[cv] == 0:
 | 
					            elif d[cv] == 0:
 | 
				
			||||||
                cards += "xx"
 | 
					                cards += "xx"
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
                cs = "card%dSuit" % i
 | 
					                cs = "card%dsuit" % i
 | 
				
			||||||
                cards = "%s%s%s" % (cards, ranks[d[cv]], d[cs])
 | 
					                cards = "%s%s%s" % (cards, ranks[d[cv]], d[cs])
 | 
				
			||||||
        return cards
 | 
					        return cards
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_action_from_hand(self, hand_no):
 | 
					    def get_action_from_hand(self, hand_no):
 | 
				
			||||||
        action = [ [], [], [], [], [] ]
 | 
					        action = [ [], [], [], [], [] ]
 | 
				
			||||||
        c = self.connection.cursor()
 | 
					        c = self.connection.cursor()
 | 
				
			||||||
        c.execute(self.sql.query['get_action_from_hand'], (hand_no))
 | 
					        c.execute(self.sql.query['get_action_from_hand'], (hand_no, ))
 | 
				
			||||||
        for row in c.fetchall():
 | 
					        for row in c.fetchall():
 | 
				
			||||||
            street = row[0]
 | 
					            street = row[0]
 | 
				
			||||||
            act = row[1:]
 | 
					            act = row[1:]
 | 
				
			||||||
| 
						 | 
					@ -178,7 +181,7 @@ class Database:
 | 
				
			||||||
        """Returns a hash of winners:amount won, given a hand number."""
 | 
					        """Returns a hash of winners:amount won, given a hand number."""
 | 
				
			||||||
        winners = {}
 | 
					        winners = {}
 | 
				
			||||||
        c = self.connection.cursor()
 | 
					        c = self.connection.cursor()
 | 
				
			||||||
        c.execute(self.sql.query['get_winners_from_hand'], (hand))
 | 
					        c.execute(self.sql.query['get_winners_from_hand'], (hand, ))
 | 
				
			||||||
        for row in c.fetchall():
 | 
					        for row in c.fetchall():
 | 
				
			||||||
            winners[row[0]] = row[1]
 | 
					            winners[row[0]] = row[1]
 | 
				
			||||||
        return winners
 | 
					        return winners
 | 
				
			||||||
| 
						 | 
					@ -205,7 +208,6 @@ class Database:
 | 
				
			||||||
        return stat_dict
 | 
					        return stat_dict
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
    def get_player_id(self, config, site, player_name):
 | 
					    def get_player_id(self, config, site, player_name):
 | 
				
			||||||
        print "site  = %s, player name = %s" % (site, player_name)
 | 
					 | 
				
			||||||
        c = self.connection.cursor()
 | 
					        c = self.connection.cursor()
 | 
				
			||||||
        c.execute(self.sql.query['get_player_id'], {'player': player_name, 'site': site})
 | 
					        c.execute(self.sql.query['get_player_id'], {'player': player_name, 'site': site})
 | 
				
			||||||
        row = c.fetchone()
 | 
					        row = c.fetchone()
 | 
				
			||||||
| 
						 | 
					@ -224,19 +226,19 @@ if __name__=="__main__":
 | 
				
			||||||
    h = db_connection.get_last_hand()
 | 
					    h = db_connection.get_last_hand()
 | 
				
			||||||
    print "last hand = ", h
 | 
					    print "last hand = ", h
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    hero = db_connection.get_player_id(c, 'PokerStars', 'nutOmatic')
 | 
					    hero = db_connection.get_player_id(c, 'Full Tilt Poker', 'PokerAscetic')
 | 
				
			||||||
    print "nutOmatic is id_player = %d" % hero
 | 
					    print "nutOmatic is id_player = %d" % hero
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    stat_dict = db_connection.get_stats_from_hand(h)
 | 
					    stat_dict = db_connection.get_stats_from_hand(h)
 | 
				
			||||||
    for p in stat_dict.keys():
 | 
					    for p in stat_dict.keys():
 | 
				
			||||||
        print p, "  ", stat_dict[p]
 | 
					        print p, "  ", stat_dict[p]
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
    print "nutOmatics stats:"
 | 
					#    print "nutOmatics stats:"
 | 
				
			||||||
    stat_dict = db_connection.get_stats_from_hand(h, hero)
 | 
					#    stat_dict = db_connection.get_stats_from_hand(h, hero)
 | 
				
			||||||
    for p in stat_dict.keys():
 | 
					#    for p in stat_dict.keys():
 | 
				
			||||||
        print p, "  ", stat_dict[p]
 | 
					#        print p, "  ", stat_dict[p]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    print "cards =", db_connection.get_cards(73525)
 | 
					    print "cards =", db_connection.get_cards(u'1')
 | 
				
			||||||
    db_connection.close_connection
 | 
					    db_connection.close_connection
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    print "press enter to continue"
 | 
					    print "press enter to continue"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -147,7 +147,6 @@ class HUD_main(object):
 | 
				
			||||||
            if new_hand_id == "":           # blank line means quit
 | 
					            if new_hand_id == "":           # blank line means quit
 | 
				
			||||||
                self.destroy()
 | 
					                self.destroy()
 | 
				
			||||||
                break # this thread is not always killed immediately with gtk.main_quit()
 | 
					                break # this thread is not always killed immediately with gtk.main_quit()
 | 
				
			||||||
    
 | 
					 | 
				
			||||||
#    get basic info about the new hand from the db
 | 
					#    get basic info about the new hand from the db
 | 
				
			||||||
#    if there is a db error, complain, skip hand, and proceed
 | 
					#    if there is a db error, complain, skip hand, and proceed
 | 
				
			||||||
            try:
 | 
					            try:
 | 
				
			||||||
| 
						 | 
					@ -168,7 +167,7 @@ class HUD_main(object):
 | 
				
			||||||
                    (tour_number, tab_number) = mat_obj.group(1, 2)
 | 
					                    (tour_number, tab_number) = mat_obj.group(1, 2)
 | 
				
			||||||
                    temp_key = tour_number
 | 
					                    temp_key = tour_number
 | 
				
			||||||
                else:   # tourney, but can't get number and table
 | 
					                else:   # tourney, but can't get number and table
 | 
				
			||||||
                    print "could not find tournamtne: skipping "
 | 
					                    print "could not find tournament: skipping "
 | 
				
			||||||
                    sys.stderr.write("Could not find tournament %d in hand %d. Skipping.\n" % (int(tour_number), int(new_hand_id)))
 | 
					                    sys.stderr.write("Could not find tournament %d in hand %d. Skipping.\n" % (int(tour_number), int(new_hand_id)))
 | 
				
			||||||
                    continue
 | 
					                    continue
 | 
				
			||||||
                    
 | 
					                    
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -237,7 +237,7 @@ class Sql:
 | 
				
			||||||
                                                 AND HudCache.gametypeId+0 = Hands.gametypeId+0)
 | 
					                                                 AND HudCache.gametypeId+0 = Hands.gametypeId+0)
 | 
				
			||||||
                         INNER JOIN Players ON (Players.id = HandsPlayers.PlayerId+0)
 | 
					                         INNER JOIN Players ON (Players.id = HandsPlayers.PlayerId+0)
 | 
				
			||||||
                    WHERE Hands.id = %s
 | 
					                    WHERE Hands.id = %s
 | 
				
			||||||
                    GROUP BY HudCache.PlayerId
 | 
					                    GROUP BY HudCache.PlayerId, Players.name, seatNo
 | 
				
			||||||
                """
 | 
					                """
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#    same as above except stats are aggregated for all blind/limit levels
 | 
					#    same as above except stats are aggregated for all blind/limit levels
 | 
				
			||||||
| 
						 | 
					@ -312,7 +312,7 @@ class Sql:
 | 
				
			||||||
                        AND    gt1.limittype = gt2.limittype
 | 
					                        AND    gt1.limittype = gt2.limittype
 | 
				
			||||||
                        AND    gt2.id = Hands.gametypeId
 | 
					                        AND    gt2.id = Hands.gametypeId
 | 
				
			||||||
                        AND    Hands.id = %s)
 | 
					                        AND    Hands.id = %s)
 | 
				
			||||||
                    GROUP BY HudCache.PlayerId
 | 
					                    GROUP BY HudCache.PlayerId, Players.name, seatNo
 | 
				
			||||||
                """
 | 
					                """
 | 
				
			||||||
         
 | 
					         
 | 
				
			||||||
            self.query['get_players_from_hand'] = """
 | 
					            self.query['get_players_from_hand'] = """
 | 
				
			||||||
| 
						 | 
					@ -349,13 +349,20 @@ class Sql:
 | 
				
			||||||
                    select 
 | 
					                    select 
 | 
				
			||||||
                        seatNo     AS seat_number, 
 | 
					                        seatNo     AS seat_number, 
 | 
				
			||||||
                        name       AS screen_name, 
 | 
					                        name       AS screen_name, 
 | 
				
			||||||
                        card1Value, card1Suit,
 | 
					                        card1Value AS card1value,
 | 
				
			||||||
                        card2Value, card2Suit,
 | 
					                        card1Suit  AS card1suit,
 | 
				
			||||||
                        card3Value, card3Suit,
 | 
					                        card2Value AS card2value,
 | 
				
			||||||
                        card4Value, card4Suit,
 | 
					                        card2Suit  AS card2suit,
 | 
				
			||||||
                        card5Value, card5Suit,
 | 
					                        card3Value AS card3value,
 | 
				
			||||||
                        card6Value, card6Suit,
 | 
					                        card3Suit  AS card3suit,
 | 
				
			||||||
                        card7Value, card7Suit
 | 
					                        card4Value AS card4value,
 | 
				
			||||||
 | 
					                        card4Suit  AS card4suit,
 | 
				
			||||||
 | 
					                        card5Value AS card5value,
 | 
				
			||||||
 | 
					                        card5Suit  AS card5suit,
 | 
				
			||||||
 | 
					                        card6Value AS card6value,
 | 
				
			||||||
 | 
					                        card6Suit  AS card6suit,
 | 
				
			||||||
 | 
					                        card7Value AS card7value,
 | 
				
			||||||
 | 
					                        card7Suit  AS card7suit
 | 
				
			||||||
                    from HandsPlayers, Players 
 | 
					                    from HandsPlayers, Players 
 | 
				
			||||||
                    where handID = %s and HandsPlayers.playerId = Players.id 
 | 
					                    where handID = %s and HandsPlayers.playerId = Players.id 
 | 
				
			||||||
                    order by seatNo
 | 
					                    order by seatNo
 | 
				
			||||||
| 
						 | 
					@ -363,11 +370,16 @@ class Sql:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            self.query['get_common_cards'] = """
 | 
					            self.query['get_common_cards'] = """
 | 
				
			||||||
                    select 
 | 
					                    select 
 | 
				
			||||||
                        card1Value, card1Suit, 
 | 
					                        card1Value AS card1value,
 | 
				
			||||||
                        card2Value, card2Suit, 
 | 
					                        card1Suit  AS card1suit,
 | 
				
			||||||
                        card3Value, card3Suit, 
 | 
					                        card2Value AS card2value,
 | 
				
			||||||
                        card4Value, card4Suit, 
 | 
					                        card2Suit  AS card2suit,
 | 
				
			||||||
                        card5Value, card5Suit
 | 
					                        card3Value AS card3value,
 | 
				
			||||||
 | 
					                        card3Suit  AS card3suit,
 | 
				
			||||||
 | 
					                        card4Value AS card4value,
 | 
				
			||||||
 | 
					                        card4Suit  AS card4suit,
 | 
				
			||||||
 | 
					                        card5Value AS card5value,
 | 
				
			||||||
 | 
					                        card5Suit  AS card5suit
 | 
				
			||||||
                    from BoardCards
 | 
					                    from BoardCards
 | 
				
			||||||
                    where handId = %s
 | 
					                    where handId = %s
 | 
				
			||||||
                """
 | 
					                """
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -62,9 +62,10 @@ class fpdb_db:
 | 
				
			||||||
            self.db=MySQLdb.connect(host = host, user = user, passwd = password, db = database, use_unicode=True)
 | 
					            self.db=MySQLdb.connect(host = host, user = user, passwd = password, db = database, use_unicode=True)
 | 
				
			||||||
        elif backend==self.PGSQL:
 | 
					        elif backend==self.PGSQL:
 | 
				
			||||||
            import psycopg2
 | 
					            import psycopg2
 | 
				
			||||||
 | 
					            import psycopg2.extensions 
 | 
				
			||||||
 | 
					            psycopg2.extensions.register_type(psycopg2.extensions.UNICODE)
 | 
				
			||||||
            # If DB connection is made over TCP, then the variables
 | 
					            # If DB connection is made over TCP, then the variables
 | 
				
			||||||
            # host, user and password are required
 | 
					            # host, user and password are required
 | 
				
			||||||
            print "host=%s user=%s pass=%s." % (host, user, password)
 | 
					 | 
				
			||||||
            if self.host and self.user and self.password:
 | 
					            if self.host and self.user and self.password:
 | 
				
			||||||
                self.db = psycopg2.connect(host = host,
 | 
					                self.db = psycopg2.connect(host = host,
 | 
				
			||||||
                        user = user, 
 | 
					                        user = user, 
 | 
				
			||||||
| 
						 | 
					@ -75,6 +76,7 @@ class fpdb_db:
 | 
				
			||||||
            # flat out wrong
 | 
					            # flat out wrong
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
                self.db = psycopg2.connect(database = database)
 | 
					                self.db = psycopg2.connect(database = database)
 | 
				
			||||||
 | 
					#            self.db.set_client_encoding('UNICODE')
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
            raise fpdb_simple.FpdbError("unrecognised database backend:"+backend)
 | 
					            raise fpdb_simple.FpdbError("unrecognised database backend:"+backend)
 | 
				
			||||||
        self.cursor=self.db.cursor()
 | 
					        self.cursor=self.db.cursor()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1410,7 +1410,7 @@ def recognisePlayerIDs(cursor, names, site_id):
 | 
				
			||||||
    if len(ids) != len(names):
 | 
					    if len(ids) != len(names):
 | 
				
			||||||
        notfound = [n for n in names if n not in ids] # make list of names not in database
 | 
					        notfound = [n for n in names if n not in ids] # make list of names not in database
 | 
				
			||||||
        if notfound: # insert them into database
 | 
					        if notfound: # insert them into database
 | 
				
			||||||
            cursor.executemany("INSERT INTO Players (name, siteId) VALUES (%s, "+str(site_id)+")", (notfound))
 | 
					            cursor.executemany("INSERT INTO Players (name, siteId) VALUES (%s, "+str(site_id)+")", [(n,) for n in notfound])
 | 
				
			||||||
            q2 = "SELECT name,id FROM Players WHERE name=%s" % " OR name=".join(["%s" for n in notfound])
 | 
					            q2 = "SELECT name,id FROM Players WHERE name=%s" % " OR name=".join(["%s" for n in notfound])
 | 
				
			||||||
            cursor.execute(q2, notfound) # get their new ids
 | 
					            cursor.execute(q2, notfound) # get their new ids
 | 
				
			||||||
            tmp = dict(cursor.fetchall())
 | 
					            tmp = dict(cursor.fetchall())
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user