Пример #1
0
    def get_sport_markets(
            self, sport_ids, include_selections=True, WantDirectDescendentsOnly=Boolean.F.value, WantPlayMarkets=None
    ):
        """
        Get the tree of events and markets for given sports/events.
        
        :param sport_ids: list of sports for which to return events/markets
        :param include_selections: whether to include the selections in returned data.
        :param WantDirectDescendentsOnly: whether to return only direct descendents of the event.
        :param WantPlayMarkets: whether information about real or play markets should be returned
        :return: all markets for the given sport, with comp and event data flattened.
        """
        date_time_sent = datetime.datetime.utcnow()
        if include_selections:
            method = 'GetEventSubTreeWithSelections'
            params = self.client.readonly_types['%sRequest' % method](
                _value_1=[{'EventClassifierIds': s_id} for s_id in listy_mc_list(sport_ids)],
                WantPlayMarkets=WantPlayMarkets,
            )
        else:
            method = 'GetEventSubTreeNoSelections'
            params = self.client.readonly_types['%sRequest' % method](
                _value_1=[{'EventClassifierIds': s_id} for s_id in listy_mc_list(sport_ids)],
                WantDirectDescendentsOnly=WantDirectDescendentsOnly,
                WantPlayMarkets=WantPlayMarkets,
            )
        response = self.request(method, params, secure=False)
        if self.client.raw_response:
            return response

        data = self.process_response(response, date_time_sent, 'EventClassifiers', error_handler=err_sport_markets)
        return parse_deep_markets(listy_mc_list(data.get('data', []))) if data.get('data') else []
Пример #2
0
 def get_markets(self, market_ids):
     """
     Get detailed information about given market(s).
     
     :param market_ids: market id(s) to get data for.
     :return: market information for each market id provided.
     """
     date_time_sent = datetime.datetime.utcnow()
     params = self.client.readonly_types['GetMarketInformationRequest'](
         _value_1=[{'MarketIds': m_id} for m_id in listy_mc_list(market_ids)]
     )
     response = self.request('GetMarketInformation', params, secure=False)
     data = self.process_response(response, date_time_sent, 'Markets', error_handler=err_mkt_info)
     return parse_market(listy_mc_list(data.get('data', [])), {})if data.get('data') else []
Пример #3
0
 def get_selection_trades(self, selection_info, currency='EUR'):
     """
     Get the history of trades on the selection(s) specified.
     
     :param selection_info: list of dicts of selection information.
     :param currency: 3 letter code for currency to return trade info in.
     :return: trades on any selections provided from the tradeId specified.
     """
     params = self.client.readonly_types['ListSelectionTradesRequest'](
         _value_1=[{
             'selectionRequests': {
                 'selectionId': s_i.get('selectionId'),
                 'fromTradeId': s_i.get('fromTradeId')
             }
         } for s_i in selection_info],
         currency=currency,
     )
     date_time_sent = datetime.datetime.utcnow()
     response = self.request('ListSelectionTrades', params, secure=False)
     data = self.process_response(response,
                                  date_time_sent,
                                  'SelectionTrades',
                                  error_handler=err_selection_trades)
     return [
         parse_selection_trades(trd)
         for trd in listy_mc_list(data.get('data', []))
     ] if data.get('data') else []
Пример #4
0
 def get_prices(self, market_ids, ThresholdAmount=5., NumberForPricesRequired=-1, NumberAgainstPricesRequired=-1,
                WantMarketMatchedAmount=Boolean.T.value, WantSelectionsMatchedAmounts=Boolean.T.value,
                WantSelectionMatchedDetails=Boolean.T.value):
     """
     Get prices by selection for all markets given in market_ids.
     
     :param market_ids: Markets to get prices for.
     :param ThresholdAmount: Minimum backers stake at a level for that level to be included.
     :param NumberForPricesRequired: Depth of the Back side of the book to cut off at, -1 returns all available.
     :param NumberAgainstPricesRequired: Depth of the Lay side of the book to cut off at, -1 returns all available.
     :param WantMarketMatchedAmount: whether or not the total amount matched on the market is returned.
     :param WantSelectionsMatchedAmounts: whether or not the total amount matched on each selection is returned. 
     :param WantSelectionMatchedDetails: whether or not details about the last match occurring on each selection.
     :return: Prices for each selection in each market.
     """
     date_time_sent = datetime.datetime.utcnow()
     params = self.client.readonly_types['GetPricesRequest'](
         _value_1=[{'MarketIds': e_id} for e_id in market_ids], ThresholdAmount=ThresholdAmount,
         NumberForPricesRequired=NumberForPricesRequired, NumberAgainstPricesRequired=NumberAgainstPricesRequired,
         WantMarketMatchedAmount=WantMarketMatchedAmount, WantSelectionsMatchedAmounts=WantSelectionsMatchedAmounts,
         WantSelectionMatchedDetails=WantSelectionMatchedDetails,
     )
     response = self.request('GetPrices', params, secure=False)
     data = self.process_response(response, date_time_sent, 'MarketPrices', error_handler=err_prices)
     return [parse_market_prices(mkt) for mkt in listy_mc_list(data.get('data', []))] if data.get('data') else []
Пример #5
0
def err_sport_markets(response):
    err_data = [{
        **get_attribs(mkt),
        **parse_market_classifier(mkt),
        **{
            'EventClassifiers': parse_event_classfiers(mkt)
        }
    } for mkt in response.get('_raw_elements', [])]
    response['EventClassifiers'] = listy_mc_list(
        response.get('EventClassifiers', [])) + err_data
    return response
Пример #6
0
 def get_selection_changes(self, SelectionSequenceNumber):
     """
     Poll to see if any selections have changed since the previous poll.
     
     :param SelectionSequenceNumber: sequence of the poll to check diffs from.
     :return: any changes to selections since the given sequence number.
     """
     params = clean_locals(locals())
     date_time_sent = datetime.datetime.utcnow()
     response = self.request('ListSelectionsChangedSince', params, secure=False)
     data = self.process_response(response, date_time_sent, 'Selections', error_handler=err_selection_changes)
     return [parse_selection_changes(chg) for chg in listy_mc_list(data.get('data', []))] if data.get('data') else []
Пример #7
0
    def get_market_withdrawals(self, MarketId):
        """
        Get the prices for a particular market.

        :param MarketId: ID of the market to check for withdrawals.
        :return: any withdrawals from the market.
        """
        params = clean_locals(locals())
        date_time_sent = datetime.datetime.utcnow()
        response = self.request('ListMarketWithdrawalHistory', params, secure=False)
        data = self.process_response(response, date_time_sent, 'Withdrawals', error_handler=err_withdrawals)
        return [parse_market_withdrawal(mkt) for mkt in listy_mc_list(data.get('data', []))] if data.get('data') else []
Пример #8
0
 def get_sports(self, WantPlayMarkets=None):
     """
     Get list of sports and their IDs.
     
     :param WantPlayMarkets: whether to return play or real markets
     :return: 
     """
     params = clean_locals(locals())
     date_time_sent = datetime.datetime.utcnow()
     response = self.request('ListTopLevelEvents', params, secure=False)
     data = self.process_response(response, date_time_sent, 'EventClassifiers', error_handler=err_sports)
     return [parse_sports(sport) for sport in listy_mc_list(data.get('data', []))] if data.get('data') else []
Пример #9
0
def err_sp_events(response):
    err_data = [{
        **get_attribs(child),
        **{
            'MarketTypeIds': {
                'MarketTypeId': sub_child.values()
            }
            for sub_child in child
        }
    } for child in response.get('_raw_elements', [])]
    response['SPEnabledEvent'] = listy_mc_list(
        response.get('SPEnabledEvent', [])) + err_data
    return response
Пример #10
0
    def get_single_order(self, OrderId):
        """
        Get full detail and history about an individual order.

        :param order_id: id of the order we wish to get history for.
        :type order_id: int
        :return: single orders history and current status.
        """
        params = clean_locals(locals())
        date_time_sent = datetime.datetime.utcnow()
        response = self.request('GetOrderDetails', params, secure=True)
        data = self.process_response(response, date_time_sent, None)
        return listy_mc_list(parse_single_order(data.get('data', {})) if data.get('data') else {})
Пример #11
0
    def get_markets_with_sp2(self):
        """
        Get information defining which markets are enabled for starting-price orders.

        :return: information on which markets have SP.
        """
        response = self.request('GetSPEnabledMarketsInformation', {},
                                secure=False,
                                raw=True)

        events = response['GetSPEnabledMarketsInformationResponse'][
            'GetSPEnabledMarketsInformationResult']['SPEnabledEvent']
        data = []
        for event in events:
            market_type_ids = listy_mc_list(
                event['MarketTypeIds']['MarketTypeId'])
            market_type_ids = [int(x) for x in market_type_ids]
            row = {
                'event_id': int(event['@eventId']),
                'market_type_ids': market_type_ids
            }
            data.append(row)
        return data
Пример #12
0
def err_cancel_market(response):
    err_data = parse_classifier(response.get('_raw_elements', []), 'Order')
    response['Order'] = listy_mc_list(response.get('Order', [])) + err_data
    return response
Пример #13
0
def err_suspend_orders(response):
    err_data = parse_classifier(response.get('_raw_elements', []), 'Orders')
    response['Orders'] = listy_mc_list(response.get('Orders', [])) + err_data
    return response
Пример #14
0
def err_selection_trades(response):
    err_data = parse_selection_trades_classifier(
        response.get('_raw_elements', []))
    response['SelectionTrades'] = listy_mc_list(
        response.get('SelectionTrades')) + err_data
    return response
Пример #15
0
def err_mkt_info(response):
    err_data = parse_market_classifier(response.get('_raw_elements', []))
    response['Markets'] = listy_mc_list(response.get(
        'Markets', [])) + err_data.get('Markets', [])
    return response
Пример #16
0
def err_selection_changes(response):
    err_data = parse_selection_sequence_classifier(
        response.get('_raw_elements', []))
    response['Selections'] = listy_mc_list(response.get('Selections',
                                                        [])) + err_data
    return response
Пример #17
0
def err_withdrawals(response):
    err_data = parse_classifier(response.get('_raw_elements', []),
                                'Withdrawals')
    response['Withdrawals'] = listy_mc_list(response.get('Withdrawals',
                                                         [])) + err_data
    return response