summaryrefslogtreecommitdiff
path: root/bidding_data.py
diff options
context:
space:
mode:
authoremkael <emkael@tlen.pl>2015-08-31 12:14:10 +0200
committeremkael <emkael@tlen.pl>2015-08-31 12:14:10 +0200
commitb302060ca3df8d13508c7129021325c36f96a073 (patch)
tree0c1386c52923773a9222f97a7c23b65f88b5035e /bidding_data.py
parentcb5d9a600c62c378d9acdd90d1045478ef99edbe (diff)
* getting rid of custom board mapping - supporting duplicate board numbers from BWS data
Diffstat (limited to 'bidding_data.py')
-rw-r--r--bidding_data.py55
1 files changed, 26 insertions, 29 deletions
diff --git a/bidding_data.py b/bidding_data.py
index 0ea56d4..f27f157 100644
--- a/bidding_data.py
+++ b/bidding_data.py
@@ -2,6 +2,7 @@ import csv
import sys
import glob
import re
+import json
from os import path
from bs4 import BeautifulSoup as bs4
@@ -35,15 +36,15 @@ class JFRBidding:
int(sitting[4])])
return round_lineups
- # converts CSV bidding to
- # {board}.{sector}_{table}.{round}.{bidding}[] structure,
+ # converts CSV bidding to the structure:
+ # {board}_{round}_{sector}_{table}.{sector}_{table}.{round} -> {bidding}[],
# including erased calls
def __parse_bidding_data(self, bidding_data):
bids = {}
for bid in bidding_data[1:]:
- board_no = int(bid[4])
round_no = int(bid[3])
table_no = bid[1] + '_' + bid[2]
+ board_no = bid[4] + '_' + str(round_no) + '_' + table_no
bid_counter = int(bid[5])
bid_erased = int(bid[10])
if board_no not in bids:
@@ -105,28 +106,28 @@ class JFRBidding:
if pair_numbers is None # read numbers from lineup
else pair_numbers))) # or use provided numbers
- def __map_board_numbers(self, custom_mapping=None):
+ def __map_board_numbers(self):
self.__tournament_files = [
f for f
in glob.glob(self.__tournament_prefix + '*.html')
if re.search(self.__tournament_files_match, f)]
- if custom_mapping is None or len(custom_mapping) < 3:
- for round_data in self.__lineup_data:
- # 13th column has JFR number for the first board
- if len(round_data[12]):
- jfr_number = int(round_data[12])
- if jfr_number:
- # 5th and 6th - actual board number
- for board_number in range(int(round_data[5]),
- int(round_data[6])+1):
- self.__board_number_mapping[board_number] = \
- jfr_number + board_number - int(round_data[5])
- else:
- for jfr_number in range(custom_mapping[0], custom_mapping[1]+1):
- self.__board_number_mapping[
- jfr_number - custom_mapping[0] + custom_mapping[2]
- ] = jfr_number
- # only include these board numbers from custom mapping
+ for round_data in self.__lineup_data:
+ # 13th column has JFR number for the first board
+ if len(round_data[12]):
+ jfr_number = int(round_data[12])
+ if jfr_number:
+ # 5th and 6th - actual board number
+ for board_number in range(int(round_data[5]),
+ int(round_data[6])+1):
+ board_string = '_'.join([
+ str(board_number),
+ str(round_data[2]), # round number
+ str(round_data[0]), # sector number
+ str(round_data[1])]) # table number
+ self.__board_number_mapping[
+ board_string] = jfr_number + board_number - \
+ int(round_data[5])
+ # only include these board numbers from mapping
# which actually exist in JFR output
custom_files = []
for board_number, jfr_number in self.__board_number_mapping.iteritems():
@@ -155,7 +156,7 @@ class JFRBidding:
# BWS number -> JFR number mapping
__board_number_mapping = {}
- def __init__(self, bidding_file, lineup_file, file_prefix, board_mapping):
+ def __init__(self, bidding_file, lineup_file, file_prefix):
self.__lineup_data = self.__csv_to_list(lineup_file)
self.__round_lineups = self.__parse_lineup_data(self.__lineup_data)
self.__bids = self.__parse_bidding_data(
@@ -164,7 +165,8 @@ class JFRBidding:
path.realpath(file_prefix + '.html'))[0]
self.__tournament_files_match = re.compile(
re.escape(self.__tournament_prefix) + '([0-9]{3})\.html')
- self.__map_board_numbers(board_mapping)
+ self.__map_board_numbers()
+ print json.dumps([self.__bids, self.__board_number_mapping])
def write_bidding_tables(self):
for board_no, board_data in self.__bids.items():
@@ -286,18 +288,13 @@ if __name__ == '__main__':
help='CSV containing lineup data from BWS')
argument_parser.add_argument('path', metavar='PATH',
help='tournament path with JFR prefix')
- argument_parser.add_argument('board_mapping', metavar='BOARD_MAPPING',
- default=[], nargs='*', type=int,
- help='board number mapping ' +
- '(JFR_FROM JFR_TO BWS_FROM)')
arguments = argument_parser.parse_args()
bidding_parser = JFRBidding(
bidding_file=arguments.bidding_file,
lineup_file=arguments.lineup_file,
- file_prefix=arguments.path,
- board_mapping=arguments.board_mapping
+ file_prefix=arguments.path
)
bidding_parser.write_bidding_tables()
bidding_parser.write_bidding_scripts()