summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoremkael <emkael@tlen.pl>2015-08-31 12:18:33 +0200
committeremkael <emkael@tlen.pl>2015-08-31 12:18:33 +0200
commitc4c71d8e81031de0c7c992b6a441e10c3d82f442 (patch)
treee86f0c4174129d8dbf6c6372647f0c334e9887c8
parenta1a9683939c1033fac258339c1896dc51242368c (diff)
parentb302060ca3df8d13508c7129021325c36f96a073 (diff)
Merge branch 'csv'
-rw-r--r--README.md22
-rw-r--r--bidding_data.py51
2 files changed, 27 insertions, 46 deletions
diff --git a/README.md b/README.md
index 66c82f7..a327b80 100644
--- a/README.md
+++ b/README.md
@@ -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()