Source code for ritpytrading.tenders

'''
This script contains results for the /tenders module

Sample JSON output formats for the function returns
Tender object return value: JSON formatted
[
  {
    "tender_id": 0,
    "period": 0,
    "tick": 0,
    "expires": 0,
    "caption": "string",
    "quantity": 0,
    "action": "BUY",
    "is_fixed_bid": true,
    "price": 0
  }
]
'''

# Make sure the RIT client uses the same 9999 port
host_url = 'http://localhost:9999'
base_path = '/v1'
base_url = host_url + base_path

[docs]class ApiException(Exception): """ to print error messages and stop the program when needed """ pass
[docs]class Tender(): """ case_response is a json obj returned from the API get request """ def __init__(self, tender_response): self.tender_id = tender_response["tender_id"] self.period = tender_response["period"] self.tick = tender_response["tick"] self.expires = tender_response["expires"] self.caption = tender_response["caption"] self.quantity = tender_response["quantity"] self.action = tender_response["action"] self.is_fixed_bid = tender_response["is_fixed_bid"] self.price = tender_response["price"] def __repr__(self): return self.tender_id + ' ' + self.caption def __eq__(self, other): return self.__dict__ == other.__dict__
def _get_tender_json(ses): """ function requires a requests.Session() object as the ses argument with a loaded API_KEY """ response = ses.get(base_url + "/tenders") if response.ok: tenders_json = response.json() # returns all attributes of the news json response object return tenders_json raise ApiException('Authorization Error: Please check API key.') def _tender_response_handle(tenders_json): """ function to return a tenders_dict dict with Tender objects as values """ tenders_dict = {Tender(tender_obj).tender_id: Tender(tender_obj) for tender_obj in tenders_json} return tenders_dict def _post_tender_response(ses, tender_id, price=None): """ function requires a requests.Session() object as the ses argument with a loaded API_KEY price Required if the tender is not fixed-bid. """ payload = {} tender_id_parm = tender_id if price is not None: payload = {"price": price} response = ses.post(base_url + "/tenders/" + str(tender_id_parm), params=payload) if response.ok: tenders_json = response.json() tenders_return = tenders_json["success"] if tenders_return: print("Tender was successfully accepted.") else: print("Tender was not accepted.") else: raise ApiException('Authorization Error: Please check API key.') def _delete_tender_response(ses, tender_id): """ function requires a requests.Session() object as the ses argument with a loaded API_KEY """ tender_id_parm = tender_id response = ses.delete(base_url + "/tenders/{}").format(tender_id_parm) if response.ok: tenders_json = response.json() tenders_return = tenders_json["success"] if tenders_return: print("Tender was successfully declined.") else: print("Tender was not declined.") else: raise ApiException('Authorization Error: Please check API key.')
[docs]def tenders_dict(ses): """ function that returns the tender object """ return _tender_response_handle(_get_tender_json(ses))
[docs]def tenders_json(ses): """ returns a list of JSON fomratted output for tender object """ return _get_tender_json(ses)
[docs]def accept_tender(ses, tender_iden, price_tender=None): tender_dict = tenders_dict(ses) if tender_dict[tender_iden].is_fixed_bid: _post_tender_response(ses, tender_iden, price=price_tender) # if the tender is not fixed bid, price must be supplied else: if price_tender is None: print("Price is required since tender is not fixed bid.") else: _post_tender_response(ses, tender_iden, price=price_tender)
[docs]def decline_tender(ses, tender_iden): _delete_tender_response(ses, tender_iden)