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

from twisted.web import http

from Tribler.community.market.core.message import TraderId
from Tribler.community.market.core.transaction import TransactionId, TransactionNumber
from Tribler.Core.Modules.restapi.market import BaseMarketEndpoint
import Tribler.Core.Utilities.json_util as json


[docs]class TransactionsEndpoint(BaseMarketEndpoint): """ This class handles requests regarding (past) transactions in the market community. """ def getChild(self, path, request): return TransactionSpecificTraderEndpoint(self.session, path)
[docs] def render_GET(self, request): """ .. http:get:: /market/transactions A GET request to this endpoint will return all performed transactions in the market community. **Example request**: .. sourcecode:: none curl -X GET http://localhost:8085/market/transactions **Example response**: .. sourcecode:: javascript { "transactions": [{ "trader_id": "12c406358ba05e5883a75da3f009477e4ca699a9", "order_number": 4, "partner_trader_id": "34c406358ba05e5883a75da3f009477e4ca699a9", "partner_order_number": 1, "transaction_number": 3, "assets" { "first": { "amount": 3, "type": "BTC", }, "second": { "amount": 3, "type": "MB", } }, "transferred" { "first": { "amount": 3, "type": "BTC", }, "second": { "amount": 3, "type": "MB", } } "timestamp": 1493906434.627721, "payment_complete": False ] } """ transactions = self.get_market_community().transaction_manager.find_all() return json.dumps({"transactions": [transaction.to_dictionary() for transaction in transactions]})
[docs]class TransactionSpecificTraderEndpoint(BaseMarketEndpoint): """ This class handles requests for a specific transaction. """ def __init__(self, session, path): BaseMarketEndpoint.__init__(self, session) self.transaction_trader_id = path def getChild(self, path, request): return TransactionSpecificNumberEndpoint(self.session, self.transaction_trader_id, path)
[docs]class TransactionSpecificNumberEndpoint(BaseMarketEndpoint): """ This class handles requests for a transaction with a specific number. """ def __init__(self, session, transaction_trader_id, path): BaseMarketEndpoint.__init__(self, session) self.transaction_trader_id = transaction_trader_id self.transaction_number = path child_handler_dict = {"payments": TransactionPaymentsEndpoint} for path, child_cls in child_handler_dict.iteritems(): self.putChild(path, child_cls(self.session, self.transaction_trader_id, self.transaction_number))
[docs]class TransactionPaymentsEndpoint(BaseMarketEndpoint): """ This class handles requests for the payments of a specific transaction. """ def __init__(self, session, transaction_trader_id, transaction_number): BaseMarketEndpoint.__init__(self, session) self.transaction_trader_id = transaction_trader_id self.transaction_number = transaction_number
[docs] def render_GET(self, request): """ .. http:get:: /market/transactions/(string:trader_id)/(string:transaction_number)/payments A GET request to this endpoint will return all payments tied to a specific transaction. **Example request**: .. sourcecode:: none curl -X GET http://localhost:8085/market/transactions/ 12c406358ba05e5883a75da3f009477e4ca699a9/3/payments **Example response**: .. sourcecode:: javascript { "payments": [{ "trader_id": "12c406358ba05e5883a75da3f009477e4ca699a9", "transaction_number": 3, "price": 10, "price_type": "MC", "quantity": 10, "quantity_type": "BTC", "transferred_quantity": 4, "payment_id": "abcd", "address_from": "my_mc_address", "address_to": "my_btc_address", "timestamp": 1493906434.627721, ] } """ transaction_id = TransactionId(TraderId(self.transaction_trader_id), TransactionNumber(int(self.transaction_number))) transaction = self.get_market_community().transaction_manager.find_by_id(transaction_id) if not transaction: request.setResponseCode(http.NOT_FOUND) return json.dumps({"error": "transaction not found"}) return json.dumps({"payments": [payment.to_dictionary() for payment in transaction.payments]})