From a8f5ed27933181879bba9dda2bb0d6a77f627400 Mon Sep 17 00:00:00 2001 From: Suryasree Medikonduru Date: Fri, 13 Sep 2024 15:13:20 +0530 Subject: [PATCH] Applied patch from 0001-Re-add-sample-unit-test.patch --- client3.py | 50 +++++++++++++++++++++----------------------------- client_test.py | 45 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+), 29 deletions(-) diff --git a/client3.py b/client3.py index 3fc09b75f16..00a87efdd29 100644 --- a/client3.py +++ b/client3.py @@ -1,59 +1,51 @@ -################################################################################ -# -# Permission is hereby granted, free of charge, to any person obtaining a -# copy of this software and associated documentation files (the "Software"), -# to deal in the Software without restriction, including without limitation -# the rights to use, copy, modify, merge, publish, distribute, sublicense, -# and/or sell copies of the Software, and to permit persons to whom the -# Software is furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -# DEALINGS IN THE SOFTWARE. - import json import random import urllib.request +import time # Server API URLs QUERY = "http://localhost:8080/query?id={}" -# 500 server request +# Number of server requests N = 500 def getDataPoint(quote): """ Produce all the needed values to generate a datapoint """ - """ ------------- Update this function ------------- """ stock = quote['stock'] bid_price = float(quote['top_bid']['price']) ask_price = float(quote['top_ask']['price']) - price = bid_price + price = (bid_price + ask_price) / 2 return stock, bid_price, ask_price, price def getRatio(price_a, price_b): """ Get ratio of price_a and price_b """ - """ ------------- Update this function ------------- """ - return 1 + if price_b == 0: + return float('inf') # Return infinity to indicate division by zero + return price_a / price_b # Main if __name__ == "__main__": - # Query the price once every N seconds. - for _ in iter(range(N)): + for _ in range(N): quotes = json.loads(urllib.request.urlopen(QUERY.format(random.random())).read()) - """ ----------- Update to get the ratio --------------- """ + prices = {} for quote in quotes: stock, bid_price, ask_price, price = getDataPoint(quote) + prices[stock] = price print("Quoted %s at (bid:%s, ask:%s, price:%s)" % (stock, bid_price, ask_price, price)) - print("Ratio %s" % getRatio(price, price)) + # Ensure there are at least two stocks to calculate a ratio + if len(prices) >= 2: + stock_list = list(prices.keys()) + for i in range(len(stock_list)): + for j in range(i + 1, len(stock_list)): + stock_a = stock_list[i] + stock_b = stock_list[j] + ratio = getRatio(prices[stock_a], prices[stock_b]) + print("Ratio of %s to %s: %s" % (stock_a, stock_b, ratio)) + + # Sleep for a while to avoid making requests too quickly + time.sleep(1) diff --git a/client_test.py b/client_test.py index af2bf26b3cc..31d02177907 100644 --- a/client_test.py +++ b/client_test.py @@ -23,3 +23,48 @@ def test_getDataPoint_calculatePriceBidGreaterThanAsk(self): if __name__ == '__main__': unittest.main() + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +MH''