diff options
author | emkael <emkael@tlen.pl> | 2015-08-31 12:18:33 +0200 |
---|---|---|
committer | emkael <emkael@tlen.pl> | 2015-08-31 12:18:33 +0200 |
commit | c4c71d8e81031de0c7c992b6a441e10c3d82f442 (patch) | |
tree | e86f0c4174129d8dbf6c6372647f0c334e9887c8 | |
parent | a1a9683939c1033fac258339c1896dc51242368c (diff) | |
parent | b302060ca3df8d13508c7129021325c36f96a073 (diff) |
Merge branch 'csv'
-rw-r--r-- | README.md | 22 | ||||
-rw-r--r-- | bidding_data.py | 51 |
2 files changed, 27 insertions, 46 deletions
@@ -6,7 +6,7 @@ Narzędzie dodające do strony wyników z JFR Pary dane licytacji, zbierane w pl BWS "pierniczkami" nowego typu. Przykładowe efekty działania: -[rozdania szkoleniowe z BOOM 2015](http://www.pzbs.pl/wyniki/boom/2015/boom_wirtualne_me.html), +[rozdania szkoleniowe z BOOM 2015](http://www.pzbs.pl/wyniki/boom/2015/boom_wirtualne_me.html), [Kadra U-20 z butlerem ligowym](http://emkael.info/brydz/wyniki/2015/u20_szczyrk/ligowe.html). Wymagania systemowe @@ -44,7 +44,7 @@ danych wejściowych: Skrypt przyjmuje parametry w sposób następujący: ``` -python bidding_data.py DANE_SESJI.bws KATALOG_ROBOCZY_Z_PREFIKSEM_TURNIEJU [mapowanie numerów rozdań] +python bidding_data.py DANE_SESJI.bws KATALOG_ROBOCZY_Z_PREFIKSEM_TURNIEJU ``` `DANE_SESJI.bws` to plik BWS z zebranymi danymi sesji. @@ -54,22 +54,8 @@ Parowym prefiksem turnieju (czyli np. `..\www\moj_turniej`). Narzędzie obsługuje niestandardowe zakresy numeracji rozdań w turnieju. -Domyślnie, mapowanie numeru rozdań z Par na numer rozdania w BWS -(numer fizycznego pudełka), odbywa się automatycznie (na podstawie danych z BWS). - -Możliwe jest jednak podanie własnego mapowania numerów rozdań (przydatne np. -wtedy, gdy w turnieju te same pudełka używane są więcej niż jeden raz, a gdy -fizyczne numery rozdań używane są wiele razy w jednym BWS - wręcz niezbędne). - -Osiąga się to poprzez podanie dodatkowych parametrów za katalogiem roboczym. -Mapowanie określają, kolejno, trzy liczby: -* numer pierwszego rozdania wg numeracji JFR Pary -* numer ostatniego rozdania wg numeracji JFR Pary -* numer pierwszego rozdania w BWS (zakłada się ciągłość numeracji -w ramach mapowania) - -Na przykład, podanie parametrów `1 8 23` sprawi, że protokoły od `*001.html` -do `*008.html` zostaną uzupełnione o licytację z rozdań 23-30. +Mapowanie numeru rozdań z Par na numer rozdania w BWS (numer fizycznego pudełka) +odbywa się automatycznie (na podstawie danych z BWS). Kompatybilność -------------- diff --git a/bidding_data.py b/bidding_data.py index c88ab12..b8373f6 100644 --- a/bidding_data.py +++ b/bidding_data.py @@ -25,15 +25,15 @@ class JFRBidding: sitting[3], sitting[4]]) return round_lineups - # converts BWS bidding to - # {board}.{sector}_{table}.{round}.{bidding}[] structure, + # converts BWS 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 = bid[4] round_no = bid[3] table_no = str(bid[1]) + '_' + str(bid[2]) + board_no = str(bid[4]) + '_' + str(round_no) + '_' + table_no bid_counter = bid[5] bid_erased = bid[10] if board_no not in bids: @@ -95,28 +95,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 = round_data[12] - if jfr_number: - # 5th and 6th - actual board number - for board_number in range(round_data[5], - round_data[6]+1): - self.__board_number_mapping[board_number] = \ - jfr_number + board_number - 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 = 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 - \ + round_data[5] + # only include these board numbers from mapping # which actually exist in JFR output custom_files = [] for b_number, jfr_number in self.__board_number_mapping.iteritems(): @@ -145,7 +145,7 @@ class JFRBidding: # BWS number -> JFR number mapping __board_number_mapping = {} - def __init__(self, bws_file, file_prefix, board_mapping): + def __init__(self, bws_file, file_prefix): connection = pypyodbc.win_connect_mdb(bws_file) cursor = connection.cursor() self.__lineup_data = cursor.execute('SELECT * FROM RoundData').fetchall() @@ -156,7 +156,7 @@ 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() def write_bidding_tables(self): for board_no, board_data in self.__bids.items(): @@ -277,17 +277,12 @@ if __name__ == '__main__': help='path to BWS file') 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( bws_file=arguments.bws_file, file_prefix=arguments.path, - board_mapping=arguments.board_mapping ) bidding_parser.write_bidding_tables() bidding_parser.write_bidding_scripts() |