Esempio n. 1
0
def fetch_data(
    session_id:str,
    session:requests.Session=None,
    logger:logging.Logger=None,
)->Quotecast:
    """ Fetch data from the feed.

    Args:
        session_id (str):
            API's session id.
        session (requests.Session, optional):
            This object will be generated if None.
            Defaults to None.
        logger (logging.Logger, optional):
            This object will be generated if None.
            Defaults to None.

    Raises:
        BrokenPipeError:
            A new "session_id" is required.

    Returns:
        Quotecast:
            quotecast.json_data : raw JSON data string.
            quotecast.metadata.response_datetime : reception timestamp.
            quotecast.metadata.request_duration : request duration.
    """

    if logger is None:
        logger = build_logger()
    if session is None:
        session = build_session()

    url = f'{Endpoint.URL}/{session_id}'

    request = requests.Request(method='GET', url=url)
    prepped = session.prepare_request(request=request)

    start_ns = time.perf_counter_ns()
    response = session.send(request=prepped, verify=False)
    # We could have used : response.elapsed.total_seconds()
    duration_ns = time.perf_counter_ns() - start_ns

    if response.text == '[{"m":"sr"}]' :
        raise BrokenPipeError('A new "session_id" is required.')

    quotecast = Quotecast()
    quotecast.json_data = response.text
    # There is no "date" header returned
    # We could have used : response.cookies._now
    quotecast.metadata.response_datetime.GetCurrentTime()
    quotecast.metadata.request_duration.FromNanoseconds(duration_ns)

    return quotecast
Esempio n. 2
0
def test_quotecast(quotecast_api):
    time.sleep(random.uniform(0, 2))

    request = Quotecast.Request()
    request.subscriptions['AAPL.BATS,E'].extend([
        'LastDate',
        'LastTime',
        'LastPrice',
        'LastVolume',
        'AskPrice',
        'BidPrice',
    ])
    quotecast_api.subscribe(request=request)

    quotecast = quotecast_api.fetch_data()

    quotecast_parser = QuotecastParser()
    quotecast_parser.put_quotecast(quotecast=quotecast)
    ticker = quotecast_parser.ticker
    ticker_dict = pb_handler.message_to_dict(message=ticker)
    metrics = ticker_dict['products']['AAPL.BATS,E']['metrics']

    assert 'AAPL.BATS,E' in ticker.product_list

    for metric in metrics:
        assert isinstance(metrics[metric], float)
Esempio n. 3
0
    def rebuild_request(self) -> Quotecast.Request:
        """ Rebuild the request from history (self.__references).

        Returns:
            Quotecast.Request:
                Request matching data-stream.
        """

        references = self.references
        request = Quotecast.Request()

        for vwd_id, metric in references.values():
            request.subscriptions[vwd_id].append(metric)

        return request
# SETUP CONFIG DICT
with open('config/config.json') as config_file:
    config_dict = json.load(config_file)

# SETUP CREDENTIALS
user_token = config_dict['user_token']  # HERE GOES YOUR USER_TOKEN

# SETUP API
quotecast_api = QuotecastAPI(user_token=user_token)

# CONNECTION
quotecast_api.connect()

# SUBSCRIBE TO METRICS
request = Quotecast.Request()
request.subscriptions['AAPL.BATS,E'].extend([
    'LastDate',
    'LastTime',
    'LastPrice',
    'LastVolume',
    'AskPrice',
    'BidPrice',
])
quotecast_api.subscribe(request=request)

# SETUP JSON PARSER
quotecast_parser = QuotecastParser()

while True:
    try: