def get(self, apikey): acc = User.query.filter_by(api_public=apikey).first() if not acc: return create_error_response( 404, "Account does not exist", "Account with api-key '{}' does not exist.".format(apikey)) if not authorize(acc, request): return create_error_response(401, "Unauthorized", "No API-key or wrong API-key") try: ws = BitMEXWebsocket(endpoint="https://testnet.bitmex.com/api/v1", symbol="", api_key=apikey, api_secret=request.headers["api_secret"]) positions = [] parsed_positions = [] positions = ws.positions() ws.exit() if positions: for position in positions: parsed_position_symbol = position["symbol"] parsed_position_size = position["currentQty"] if position["crossMargin"] == True: parsed_position_leverage = 0 else: parsed_position_leverage = position["leverage"] parsed_position_entyprice = position["avgEntryPrice"] parsed_position_liquidationPrice = position[ "liquidationPrice"] parsed_position = MasonControls( symbol=parsed_position_symbol, size=parsed_position_size, leverage=parsed_position_leverage, avgEntryPrice=parsed_position_entyprice, liquidationPrice=parsed_position_liquidationPrice) parsed_position.add_control( "self", href=api.url_for(Position, apikey=apikey, symbol=parsed_position_symbol)) if not position["currentQty"] == 0: parsed_positions.append(parsed_position) body = MasonControls(items=parsed_positions) body.add_control_account(apikey) body.add_control("self", api.url_for(Positions, apikey=apikey)) return Response(json.dumps(body), status=200, mimetype=MASON) except TypeError: return create_error_response(400, "Query Error", "Query Parameter doesn't exist")
def get(self, apikey, symbol): """ Gets a single active position from the BitMEX testnet """ acc = User.query.filter_by(api_public=apikey).first() if not acc: return create_error_response( 404, "Account does not exist", "Account with api-key '{}' does not exist.".format(apikey)) if not authorize(acc, request): return create_error_response(401, "Unauthorized", "No API-key or wrong API-key") try: ws = BitMEXWebsocket(endpoint="https://testnet.bitmex.com/api/v1", symbol=symbol, api_key=apikey, api_secret=request.headers["api_secret"]) positions = [] parsed_positions = [] positions = ws.positions() ws.exit() if positions: for position in positions: parsed_position_symbol = position["symbol"] parsed_position_size = position["currentQty"] if position["crossMargin"] == True: parsed_position_leverage = 0 else: parsed_position_leverage = position["leverage"] parsed_position_entyprice = position["avgEntryPrice"] parsed_position_liquidationPrice = position[ "liquidationPrice"] parsed_position = MasonControls( symbol=parsed_position_symbol, size=parsed_position_size, leverage=parsed_position_leverage, avgEntryPrice=parsed_position_entyprice, liquidationPrice=parsed_position_liquidationPrice) parsed_position.add_control( "self", href=api.url_for(Position, apikey=apikey, symbol=parsed_position_symbol)) parsed_position.add_control( "edit", href=api.url_for(Position, apikey=apikey, symbol=parsed_position_symbol), method="PATCH", encoding="json", title="Change position leverage", schema=parsed_position.position_schema()) parsed_position.add_control_positions(apikey) parsed_positions.append(parsed_position) if len(parsed_positions) == 1: body = parsed_positions[0] return Response(json.dumps(body), status=200, mimetype=MASON) else: return Response(json.dumps(parsed_positions), status=200, mimetype=MASON) except TypeError: return create_error_response(400, "Query Error", "Query Parameter doesn't exist")