Database.py : fillDefaultData()
Remove manual 'id' from INSERT command. In database schema,
TourneyTypes.id is a primary key and thus autoincrement. In postgres,
autoincrements are implemented as sequences - inserting a value
"manually" bypasses the sequence generation, which resulted in a
remarkably weird error.
Namely, upon the first hand to import, the insert fails due to primary
key violation. The default value from an unused sequence is 1, but a
row with such an id already exists.
The solution is to create the single row of default data values with
unspecified TourneyTypes.id, hence allowing postgres to generate the
correct id from the sequence. This way the import works again.
Database.py : fillDefaultData()
Sql-coder had fixed the default data insert, and in the process changed
the default type ID. Since his works in general case, I can remove my
modifications.
* Database.py : fillDefaultData()
PostgreSQL has a rather annoying (mis)feature when dealing with boolean
data types: raw 1/0 input as integer is not automatically cast to
boolean values. Instead, one must use one of several other ways of
signifying true/false.
http://www.postgresql.org/docs/8.4/static/datatype-boolean.html
documents the available and understood formatting.
Fix by special-casing PostgreSQL and making all boolean values fed as
strings, '1' for true and '0' for false.
PostgreSQL does not have an UNSIGNED specifier in its language.
Mysql's "TINYINT UNSIGNED" is postgreSQL's "SMALLINT" which is a bit
inconvenient but apart from annoying, not a problem.
modified: Hand.py
- writeTableLine : adds the tourneyNo in tourney context
modified: Tables.py
- discover_nt_by_name : add filter for HUD and chat windows
modified: Database.py
* correct the HandsPlayers.tourneyTypeId entry (null for omaha/he ring games, correct value instead of 1 or null for omaha/he & stud tourneys)
* add prototypes and description of new methods to store Tourneys info
modified: Tourney.py
* add calls to new methods in Tourney.insert
modified: Database.py
* fillDefaultData : queries that inserts the default line into TourneyTypes rewritten (simplified to take into account the columns that have "new" DEFAULT attribute)
modified: SQL.py
* createTourneyTypesTable query modified : some existing columns are now created with a default values, new columns added
* createTourneysTable query modified : new columns added
* createTourneysPlayersTable query modified : new columns added
modified: FulltiltToFpdb.py
* Tourney Summary File parsing : add support for Madness tourneys
* HH file parsing : enhance Tourney topline parsing to retrieve some info (HU, Rebuy, KO, Turbo, ...) and store it into Hand object
modified: Hand.py
* Some attributes added to store tourney specific info
modified: SQL.py
* Add a new request (getTourneyTypeIdByTourneyNo) to help finding a tourney already in db (preparation for Tourney Summary import)
modified: Tourney.py
* Attribute tourneyComment added
modified: fpdb_parse_logic.py
* Change parameters in call of fpdb_simple.recogniseTourneyTypeId
modified: fpdb_simple.py
* recogniseTourneyTypeId : signature changed to allow for the search of a tourney id already in db prior to searching for tourneyTypeId
modified: FulltiltToFpdb.py
* Modified re_HandInfo regex to take into account Matrix Tournament Hands Histories
* Add Regex for Tourney Summaries files parsing
* New methods : readSummaryInfo, determineTourneyType, getPlayersPositionsAndWinnings
modified: HandHistoryConverter.py
* Add a Tourney object in the attributes to allow storing the summary info retrieved and the ability to hand it over after parsing
* Add a new attribut parsedObjectType (string : "HH" or "Summary")
* In follow = False mode : read the first line to swicth between HH & Summary parsing
* TO DO : Deal with parsing summary files in follow = True mode
* New methods added : isSummary, getParsedObjectType (to be called in fpdb_import), readSummaryInfo : abstract (to be implemented in each specific HHC), getTourney (returns the new attribute)
new file: Tourney.py
* New object
* Lots of attributes regarding the tourney info (buy-in, fee, entries, speed, Rebuy/add-on info, starting chips, KnockOut info, isHeadsUp, isShootout, isMatrix, ...
* List of players with finishing positions (when available) and winnings (when available)
* Methods :
** addPlayer(self, rank, name, winnings)
** incrementPlayerWinnings(self, name, additionnalWinnings): used for KO tourneys when KO occured (for Hero only)
** calculatePayinAmount : unused yet, should be necessary for DB storage
** some Hand methods copied that are still to be done including : assemble and insert
** TO DO : write the insert method for the object to be stored in DB. This will have to deal with the fact that the DB write can occur both before (Bulk Import) or after the HH file info has been stored (tourney might or might not already exist)
modified: fpdb_import.py
* import_file_dict modified :
** after the construction of the hhc, it now calls the new getParsedObjectType method of HHC in order to know what has been parsed by the HHC
** If it's a hand history file (actual expected behaviour) : do as before
** If it's a summary file, gets the tourney object that has been built from the hhc and calls the insert method on it (similar to NEWIMPORT=True for HH)
fix SummaryEverleaf to be a little more friendly to being imported and accessed from other modules
TournamentTracker pops open an Edit Window when you add a tournament, but I don't know how to actually populate it with Edit boxes yet
modified: FulltiltToFpdb.py
- Sitting out players are no longer considered out of a hand (in a tourney context, they can act even if out at the beggining of the hand)
- re_CollectPot modified to take into account Tournament context (no $ in the pot)
- Try to read buy-in/fee from topline in Tournament context
- Deal with commas in pot size (readCollectPot)
do_import: change label of Stop button when running an import, to provide a visual indicator
startClicked: refactor so only the Pipe Open is inside the exception handler, since that should be the only thing in there that we need to ignore an exception from.
Configuration: Only trap the thrown error when checking for existence of site default paths, if not found set path to a reasonable ERROR message instead of "default"
When menu->reposition is called, only the HUD windows were moved to
their new positions. The auxiliary windows used for mucked cards
remained where they were at the time the HUD instance was created. This
caused mucked cards to appear in wrong places after the poker table was
moved.
Split positioning code in Mucked.py to its own method. Now the same
routine that moves HUD windows to their new places also invokes code
to reposition auxiliary windows.
Now the mucked cards are displayed at correct screen coordinates too.