def test_from_identifier(self): self.assertEqual(CallHistory.from_identifier('E:EW:P').identifier(), CallHistory.from_string('P', 'E', 'E-W').identifier()) # Test that from_identifier is forgiving of a missing trailing colon self.assertEqual(CallHistory.from_identifier('E:EW:').identifier(), CallHistory.from_string('', 'E', 'E-W').identifier()) self.assertEqual(CallHistory.from_identifier('E:EW').identifier(), CallHistory.from_string('', 'E', 'E-W').identifier()) # Test that from_identifier is forgiving of a trailing comma. self.assertEqual(CallHistory.from_identifier('N:NO:P,').calls_string(), "P")
def from_identifier(self, identifier): components = identifier.split("-") if len(components) == 2: (board_number_string, deal_and_history_identifier) = components if ':' in deal_and_history_identifier: deal_identifier, call_history_identifier = deal_and_history_identifier.split(':') # We have to do a bit of a dance to convert from the board url system that # the JS code uses to the one the python uses. call_history = CallHistory.from_board_number_and_calls_string(int(board_number_string), call_history_identifier) else: deal_identifier = deal_and_history_identifier call_history = CallHistory.empty_for_board_number(int(board_number_string)) else: (board_number_string, deal_identifier, call_history_identifier) = components call_history = CallHistory.from_identifier(call_history_identifier) board_number = int(board_number_string) deal = Deal.from_identifier(deal_identifier) return Board(number=board_number, deal=deal, call_history=call_history)
def _history_from_calls_string(self, calls_string): history_identifier = "N:NO:%s" % calls_string # FIXME: I doubt this is right with the new identifiers. return CallHistory.from_identifier(history_identifier)