Source code for Tribler.Core.Modules.restapi.market.orders_endpoint

from twisted.web import http

from Tribler.community.market.core.message import TraderId
from Tribler.community.market.core.order import OrderId, OrderNumber
from Tribler.Core.Modules.restapi.market import BaseMarketEndpoint
import Tribler.Core.Utilities.json_util as json


[docs]class OrdersEndpoint(BaseMarketEndpoint): """ This class handles requests regarding your orders in the market community. """ def getChild(self, path, request): return OrderSpecificEndpoint(self.session, path)
[docs] def render_GET(self, request): """ .. http:get:: /market/orders A GET request to this endpoint will return all your orders in the market community. **Example request**: .. sourcecode:: none curl -X GET http://localhost:8085/market/orders **Example response**: .. sourcecode:: javascript { "orders": [{ "trader_id": "12c406358ba05e5883a75da3f009477e4ca699a9", "timestamp": 1493906434.627721, "assets" { "first": { "amount": 3, "type": "BTC", }, "second": { "amount": 3, "type": "MB", } } "reserved_quantity": 0, "is_ask": False, "timeout": 3600, "traded": 0, "order_number": 1, "completed_timestamp": null, "cancelled": False, "status": "open" }] } """ orders = self.get_market_community().order_manager.order_repository.find_all() return json.dumps({"orders": [order.to_dictionary() for order in orders]})
[docs]class OrderSpecificEndpoint(BaseMarketEndpoint): def __init__(self, session, order_number): BaseMarketEndpoint.__init__(self, session) self.order_number = order_number child_handler_dict = {"cancel": OrderCancelEndpoint} for path, child_cls in child_handler_dict.iteritems(): self.putChild(path, child_cls(self.session, self.order_number))
[docs]class OrderCancelEndpoint(BaseMarketEndpoint): """ This class handles requests for cancelling a specific order. """ def __init__(self, session, order_number): BaseMarketEndpoint.__init__(self, session) self.order_number = order_number
[docs] def render_POST(self, request): """ .. http:get:: /market/orders/(string:order_number)/cancel A POST request to this endpoint will cancel a specific order. **Example request**: .. sourcecode:: none curl -X GET http://localhost:8085/market/orders/3/cancel **Example response**: .. sourcecode:: javascript { "cancelled": True } """ market_community = self.get_market_community() order_id = OrderId(TraderId(market_community.mid), OrderNumber(int(self.order_number))) order = market_community.order_manager.order_repository.find_by_id(order_id) if not order: request.setResponseCode(http.NOT_FOUND) return json.dumps({"error": "order not found"}) if order.status != "open" and order.status != "unverified": request.setResponseCode(http.BAD_REQUEST) return json.dumps({"error": "only open and unverified orders can be cancelled"}) market_community.cancel_order(order_id) return json.dumps({"cancelled": True})