Example #1
0
def parse_market_prices(mkt):
    return {'market_id': mkt.get('Id'),
            'market_name': mkt.get('Name'),
            'market_type': MarketType(int(mkt.get('Type'))).name if mkt.get('Type') else None,
            'market_start_time': make_tz_naive(mkt.get('StartTime')),
            'runners': [parse_runner_prices(runner) for runner in mkt.get('Selections', [])],
            'is_play_market': mkt.get('IsPlayMarket'),
            'status': MarketStatus(int(mkt.get('Status'))).name if mkt.get('Status') else None,
            'number_of_winners': floatify(mkt.get('NumberOfWinningSelections')),
            'withdrawal_sequence_number': mkt.get('WithdrawalSequenceNumber'),
            'market_display_order': mkt.get('DisplayOrder'),
            'enabled_for_multiples': mkt.get('IsEnabledForMultiples'),
            'in_play_available': mkt.get('IsInRunningAllowed'),
            'race_grade': mkt.get('RaceGrade'),
            'managed_in_running': mkt.get('IsManagedWhenInRunning'),
            'in_play': mkt.get('IsCurrentlyInRunning'),
            'in_running_delay': mkt.get('InRunningDelaySeconds'),
            'event_id': mkt.get('EventClassifierId'),
            'market_total_matched': floatify(mkt.get('TotalMatchedAmount')),
            'place_payout': floatify(mkt.get('PlacePayout')),
            'market_back_matched': floatify(mkt.get('MatchedMarketForStake')),
            'market_lay_matched': floatify(mkt.get('MatchedMarketAgainstStake')),
            'home_team_score': mkt.get('HomeTeamScore'),
            'away_team_score': mkt.get('AwayTeamScore'),
            'score_type': mkt.get('ScoreType'),
            }
Example #2
0
def parse_orders_receipt(order):
    return {
        'order_id':
        order.get('OrderHandle'),
        'side':
        Polarity(int(order.get('Polarity'))).name
        if order.get('Polarity') else None,
        'size_remaining':
        floatify(order.get('UnmatchedStake')),
        'matched_price':
        floatify(order.get('MatchedPrice')),
        'matched_size':
        floatify(order.get('MatchedStake')),
        'matched_lay_size':
        floatify(order.get('MatchedAgainstStake')),
        'sent_time':
        make_tz_naive(order.get('IssuedAt')),
        'status':
        OrderStatus(int(order.get('Status'))) if order.get('Status') else None,
        'runner_sequence_number':
        order.get('SequenceNumber'),
        'runner_id':
        order.get('SelectionId'),
        'customer_reference':
        order.get('PunterReferenceNumber'),
        'return_code':
        order.get('ReturnCode'),
    }
Example #3
0
def parse_trade_item(trade):
    trd = trade.get('TradeItems', {})
    return {
        'traded_time': make_tz_naive(trd.get('occurredAt')),
        'price': floatify(trd.get('price')),
        'size': floatify(trd.get('backersStake')),
        'side': Polarity(int(trd.get('tradeType'))).name if trd.get('tradeType') else None,
    }
Example #4
0
def parse_market_withdrawal(data):
    return {
        'runner_id': data.get('SelectionId'),
        'withdrawal_time': make_tz_naive(data.get('WithdrawalTime')),
        'sequence_number': data.get('SequenceNumber'),
        'reduction_factor': floatify(data.get('ReductionFactor')),
        'compound_reduction_factor': floatify(data.get('CompoundReductionFactor')),
    }
Example #5
0
def parse_account_balance(bal):
    return {
        'currency': bal.get('Currency'),
        'available_funds': floatify(bal.get('AvailableFunds')),
        'balance': floatify(bal.get('Balance')),
        'credit': floatify(bal.get('Credit')),
        'exposure': floatify(bal.get('Exposure')),
    }
Example #6
0
def parse_runners(data):
    return {'runner_id': data.get('Id'),
            'runner_name': data.get('Name'),
            'runner_status': SelectionStatus(int(data.get('Status'))).name if data.get('Status') else None,
            'reset_count': data.get('ResetCount'),
            'deduction_factor': floatify(data.get('DeductionFactor')),
            'runner_display_order': data.get('DisplayOrder')}
Example #7
0
def parse_account_postings(posts):
    return {
        'postings_complete':
        posts.get('HaveAllPostingsBeenReturned'),
        'currency':
        posts.get('Currency'),
        'available_funds':
        floatify(posts.get('AvailableFunds')),
        'balance':
        floatify(posts.get('Balance')),
        'credit':
        floatify(posts.get('Credit')),
        'exposure':
        floatify(posts.get('Exposure')),
        'transactions':
        [{
            'transaction_time': make_tz_naive(order.get('PostedAt')),
            'description': order.get('Description'),
            'amount': floatify(order.get('Amount')),
            'resulting_balance': floatify(order.get('ResultingBalance')),
            'transaction_category': order.get('PostingCategory'),
            'order_id': order.get('OrderId'),
            'market_id': order.get('MarketId'),
            'transaction_id': order.get('TransactionId')
        } for order in posts.get('Orders', {}).get('Order', [])
         if posts.get('Orders')]
    } if posts.get('Orders') and posts.get('Orders', {}).get('Order',
                                                             []) else {}
Example #8
0
def parse_runner_book(book):
    back_levels = []
    lay_levels = []
    order_book = {'batb': [], 'batl': []}
    for level in book:
        for side, order in level.items():
            if order:
                side = price_side_map.get(side)
                if side == 'back':
                    bisect.insort(back_levels, floatify(order.get('Price')))
                    order_book['batb'].append([
                        floatify(order.get('Price')),
                        floatify(order.get('Stake'))
                    ])
                elif side == 'lay':
                    bisect.insort_right(lay_levels,
                                        floatify(order.get('Price')))
                    order_book['batl'].append([
                        floatify(order.get('Price')),
                        floatify(order.get('Stake'))
                    ])
    back_levels.reverse()
    order_book['batb'] = [[back_levels.index(x[0]), x[0], x[1]]
                          for x in order_book['batb']]
    order_book['batl'] = [[lay_levels.index(x[0]), x[0], x[1]]
                          for x in order_book['batl']]
    return order_book
Example #9
0
def parse_market(mkt_data, other_info):
    return [{
        **{
            'runners': [
                parse_runners(runner) for runner in mkt.get('Selections', [])
            ],
            'market_id':
            mkt.get('Id'),
            'market_name':
            mkt.get('Name'),
            'market_type':
            MarketType(int(mkt.get('Type'))).name if mkt.get('Type') else None,
            'is_play_market':
            mkt.get('IsPlayMarket'),
            'market_status':
            MarketStatus(int(mkt.get('Status'))).name if mkt.get('Status') else None,
            'number_of_winners':
            mkt.get('NumberOfWinningSelections'),
            'market_start_time':
            make_tz_naive(mkt.get('StartTime')),
            'withdrawal_sequence_number':
            mkt.get('WithdrawalSequenceNumber'),
            'market_display_order':
            mkt.get('DisplayOrder'),
            'enabled_for_multiples':
            mkt.get('IsEnabledForMultiples'),
            'in_play_available':
            mkt.get('IsInRunningAllowed'),
            'race_grade':
            mkt.get('RaceGrade'),
            'managed_in_running':
            mkt.get('IsManagedWhenInRunning'),
            'in_play':
            mkt.get('IsCurrentlyInRunning'),
            'in_play_delay':
            mkt.get('InRunningDelaySeconds'),
            'event_id':
            mkt.get('EventClassifierId'),
            'place_payout':
            floatify(mkt.get('PlacePayout'))
        },
        **other_info
    } for mkt in mkt_data]
Example #10
0
def parse_ladder(data):
    return [
        {'price': floatify(ol.get('price')),
         'value': ol.get('representation')} for ol in data]
Example #11
0
def parse_runner_prices(runner):
    return {
        'runner_book': parse_runner_book(runner.get('_value_1', [])),
        'runner_id': runner.get('Id'),
        'runner_name': runner.get('Name'),
        'runner_status': SelectionStatus(int(runner.get('Status'))).name if runner.get('Status') else None,
        'runner_reset_count': floatify(runner.get('ResetCount')),
        'deduction_factor': floatify(runner.get('DeductionFactor')),
        'runner_back_matched_size': floatify(runner.get('MatchedSelectionForStake')),
        'runner_lay_matched_size': floatify(runner.get('MatchedSelectionAgainstStake')),
        'runner_last_matched_time': make_tz_naive(runner.get('LastMatchedOccurredAt')),
        'runner_last_matched_price': floatify(runner.get('LastMatchedPrice')),
        'runner_last_matched_back_size': floatify(runner.get('LastMatchedForSideAmount')),
        'runner_last_matched_lay_size': floatify(runner.get('LastMatchedAgainstSideAmount')),
        'runner_open_interest': floatify(runner.get('SelectionOpenInterest')),
        'runner_market_winnings': floatify(runner.get('MarketWinnings')),
        'runner_positive_winnings': floatify(runner.get('MarketPositiveWinnings')),
        'runner_back_matched_same_price': floatify(runner.get('MatchedForSideAmountAtSamePrice')),
        'runner_lay_matched_same_price': floatify(runner.get('MatchedAgainstSideAmountAtSamePrice')),
        'runner_last_traded_same_price': make_tz_naive(runner.get('FirstMatchAtSamePriceOccurredAt')),
        'runner_total_matched_orders': floatify(runner.get('NumberOrders')),
        'runner_total_matched_punters': floatify(runner.get('NumberPunters')),
        }
Example #12
0
def parse_orders(order):
    return {
        'order_id':
        order.get('Id'),
        'commission_information': {
            'gross_settlement_amount':
            floatify(
                order.get('OrderCommissionInformation',
                          {}).get('GrossSettlementAmount')) if order.get(
                              'OrderCommissionInformation',
                              {}).get('GrossSettlementAmount') else None,
            'commission':
            floatify(
                order.get('OrderCommissionInformation',
                          {}).get('OrderCommission')) if order.get(
                              'OrderCommissionInformation',
                              {}).get('OrderCommission') else None,
        } if order.get('OrderCommissionInformation') else {},
        'runner_id':
        order.get('SelectionId'),
        'market_id':
        order.get('MarketId'),
        'sequence_number':
        order.get('SequenceNumber'),
        'status':
        OrderStatus(int(order.get('Status'))).name
        if order.get('Status') else None,
        'side':
        Polarity(int(order.get('Polarity'))).name
        if order.get('Polarity') else None,
        'sent_time':
        make_tz_naive(order.get('IssuedAt')),
        'price':
        floatify(order.get('RequestedPrice')),
        'remaining_size':
        floatify(order.get('UnmatchedStake')),
        'average_price':
        floatify(order.get('AveragePrice')),
        'matched_price':
        floatify(order.get('MatchedPrice')),
        'matched_size':
        floatify(order.get('MatchedStake')),
        'matched_lay_size':
        floatify(order.get('MatchedAgainstStake')),
        'back_take_size':
        floatify(order.get('TotalForSideTakeStake ')),
        'back_make_size':
        floatify(order.get('TotalForSideMakeStake')),
        'customer_reference':
        order.get('PunterReferenceNumber'),
        'withdrawal_sequence_number':
        order.get('ExpectedWithdrawalSequenceNumber'),
        'runner_reset_count':
        order.get('ExpectedSelectionResetCount'),
        'in_play':
        order.get('IsCurrentlyInRunning'),
        'order_fill_type':
        OrderKillType(int(order.get('OrderFillType'))).name
        if order.get('OrderFillType') else None,
        'fill_or_kill_threshold':
        order.get('FillOrKillThreshold'),
        'cancel_on_in_running':
        order.get('CancelOnInRunning'),
        'cancel_if_selection_reset':
        order.get('CancelIfSelectionReset'),
        'commission_base_rate':
        floatify(order.get('PunterCommissionBasis')),
        'commission_take_rate':
        floatify(order.get('TakeCommissionRate')),
        'commission_make_rate':
        floatify(order.get('MakeCommissionRate')),
    }
Example #13
0
def parse_suspended_order(suspend):
    return {
        'order_id': suspend.get('OrderId'),
        'size_suspended': floatify(suspend.get('SuspendedForSideStake')),
        'customer_reference': suspend.get('PunterReferenceNumber'),
    }
Example #14
0
def parse_single_order(order):
    return {
        'order_id':
        order.get('Id'),
        'settlement_information': {
            'gross_settlement_amount':
            floatify(
                order.get('OrderCommissionInformation',
                          {}).get('GrossSettlementAmount'))
            if order.get('OrderCommissionInformation') else None,
            'order_commission':
            floatify(
                order.get('OrderCommissionInformation',
                          {}).get('OrderCommission'))
            if order.get('OrderCommissionInformation') else None,
            'market_commission':
            floatify(
                order.get('OrderCommissionInformation',
                          {}).get('MarketCommission'))
            if order.get('OrderCommissionInformation') else None,
            'settlement_time':
            make_tz_naive(
                order.get('OrderCommissionInformation',
                          {}).get('MarketSettledDate'))
            if order.get('OrderCommissionInformation') else None,
        },
        'audit_log': [{
            'timestamp':
            make_tz_naive(log.get('Time')),
            'matched_size':
            floatify(
                log.get('MatchedOrderInformation', {}).get('MatchedStake'))
            if log.get('MatchedOrderInformation') else None,
            'matched_lay_size':
            floatify(
                log.get('MatchedOrderInformation',
                        {}).get('MatchedAgainstStake'))
            if log.get('MatchedOrderInformation') else None,
            'matched_price':
            floatify(
                log.get('MatchedOrderInformation', {}).get('PriceMatched'))
            if log.get('MatchedOrderInformation') else None,
            'matched_order_id':
            log.get('MatchedOrderInformation', {}).get('MatchedOrderID')
            if log.get('MatchedOrderInformation') else None,
            'maker':
            log.get('MatchedOrderInformation', {}).get('WasMake')
            if log.get('MatchedOrderInformation') else None,
            'order_commission':
            floatify(
                log.get('CommissionInformation', {}).get('OrderCommission')),
            'gross_settlement_amount':
            floatify(
                log.get('CommissionInformation',
                        {}).get('GrossSettlementAmount')),
            'order_action':
            OrderActionType(int(log.get('OrderActionType'))).name,
            'requested_size':
            floatify(log.get('RequestedStake')),
            'total_size':
            floatify(log.get('TotalStake')),
            'total_lay_size':
            floatify(log.get('TotalAgainstStake')),
            'requested_price':
            floatify(log.get('RequestedPrice')),
            'average_price':
            floatify(log.get('AveragePrice')),
        } for log in order.get('AuditLog', {}).get('AuditLog', [])],
        'runner_id':
        order.get('SelectionId'),
        'market_id':
        order.get('MarketId'),
        'status':
        OrderStatus(int(order.get('OrderStatus'))).name
        if order.get('OrderStatus') else None,
        'in_play':
        order.get('IsCurrentlyInRunning'),
        'market_status':
        MarketStatus(int(order.get('MarketStatus'))).name
        if order.get('MarketStatus') else None,
        'sent_time':
        make_tz_naive(order.get('IssuedAt')),
        'last_update_time':
        make_tz_naive(order.get('LastChangedAt')),
        'expiry_time':
        make_tz_naive(order.get('ExpiresAt')),
        'valid_from':
        make_tz_naive(order.get('ValidFrom')),
        'order_fill_type':
        OrderKillType(int(order.get('OrderFillType'))).name
        if order.get('OrderFillType') else None,
        'fill_or_kill_threshold':
        floatify(order.get('FillOrKillThreshold')),
        'requested_size':
        floatify(order.get('RequestedStake')),
        'requested_price':
        floatify(order.get('RequestedPrice')),
        'expected_selection_reset_count':
        order.get('ExpectedSelectionResetCount'),
        'total_size':
        floatify(order.get('TotalStake')),
        'remaining_size':
        floatify(order.get('UnmatchedStake')),
        'matched_size':
        floatify(order.get('MatchedStake')),
        'matched_lay_stake':
        floatify(order.get('MatchedAgainstStake')),
        'matched_price':
        floatify(order.get('MatchedPrice')),
        'average_price':
        floatify(order.get('AveragePrice')),
        'matching_time':
        make_tz_naive(order.get('MatchingTimeStamp')),
        'side':
        Polarity(int(order.get('Polarity')))
        if order.get('Polarity') else None,
        'withdrawal_reprice_option':
        order.get('WithdrawalRepriceOption'),
        'cancel_on_in_running':
        order.get('CancelOnInRunning'),
        'cancel_if_selection_reset':
        order.get('CancelIfSelectionReset'),
        'sequence_number':
        order.get('SequenceNumber'),
        'customer_reference':
        order.get('PunterReferenceNumber'),
        'market_type':
        order.get('MarketType'),
        'expected_withdrawal_sequence_number':
        order.get('ExpectedWithdrawalSequenceNumber'),
    }
Example #15
0
def parse_cancelled_order(cancel):
    return {
        'order_id': cancel.get('OrderHandle'),
        'size_cancelled': floatify(cancel.get('cancelledForSideStake')),
        'customer_reference': cancel.get('PunterReferenceNumber'),
    }