Ejemplo n.º 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'),
            }
Ejemplo n.º 2
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 {}
Ejemplo n.º 3
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'),
    }
Ejemplo n.º 4
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,
    }
Ejemplo n.º 5
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')),
    }
Ejemplo n.º 6
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')),
    }
Ejemplo n.º 7
0
def parse_selection_changes(chg):
    return {
        'runner_id': chg.get('Id'),
        'runner_name': chg.get('Name'),
        'runner_display_order': chg.get('DisplayOrder'),
        'runner_hidden': chg.get('IsHidden'),
        'runner_status': SelectionStatus(int(chg.get('Status'))) if chg.get('Status') else None,
        'reset_count': chg.get('ResetCount'),
        'market_id': chg.get('MarketId'),
        'withdrawal_factor': chg.get('WithdrawalFactor'),
        'sequence_number': chg.get('SelectionSequenceNumber'),
        'cancel_orders_time': make_tz_naive(chg.get('CancelOrdersTime')),
        'settlement_info': [{'settled_time': make_tz_naive(stl.get('SettlementInformation', {}).get('SettledTime')),
                             'void_percentage': stl.get('SettlementInformation', {}).get('VoidPercentage'),
                             'result': stl.get('SettlementInformation', {}).get('SettlementResultString'),
                             'left_side_percentage': stl.get('SettlementInformation', {}).get('LeftSideFactor'),
                             'right_side_percentage': stl.get('SettlementInformation', {}).get('RightSideFactor')
                             } for stl in chg.get('_value_1', [])]
    }
Ejemplo n.º 8
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]
Ejemplo n.º 9
0
 def process_response(response,
                      date_time_sent,
                      result_target,
                      error_handler=None):
     """
     :param response: Response from request
     :param date_time_sent: Date time sent
     :param error_handler: function to parse _raw_elements from zeep response.
     :param result_target: name of the key to get response data from, changes per endpoint.
     """
     date_time_received = make_tz_naive(
         response.get('Timestamp')) or datetime.datetime.utcnow()
     if error_handler and response.get('_raw_elements'):
         response = error_handler(response)
     return {
         'data':
         response.get(result_target, []) if result_target else response,
         'date_time_sent': date_time_sent,
         'date_time_received': date_time_received,
     }
Ejemplo n.º 10
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')),
    }
Ejemplo n.º 11
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'),
    }