Source code for polaris.integrations.quote

from decimal import Decimal
from typing import List, Union, Optional

from rest_framework.request import Request

from polaris.sep10.token import SEP10Token
from polaris.models import Quote, OffChainAsset, Asset, DeliveryMethod


[docs]class QuoteIntegration:
[docs] def get_prices( self, token: SEP10Token, request: Request, sell_asset: Union[Asset, OffChainAsset], sell_amount: Decimal, buy_assets: List[Union[Asset, OffChainAsset]], sell_delivery_method: Optional[DeliveryMethod] = None, buy_delivery_method: Optional[DeliveryMethod] = None, country_code: Optional[str] = None, *args, **kwargs ) -> List[Decimal]: """ Return a list of prices in the order of the `buy_assets` provided. Each price should be the value of one unit of the `buy_asset` in terms of `sell_asset`. The prices returned from this function are non-binding, meaning a ``Quote`` object will not be created and returned to the client as a result of this call. The `buy_assets` list passed are the assets that have an ``ExchangePair`` database record with the `sell_asset`. Polaris will also ensure all `buy_assets` support the `buy_delivery_method` and `country_code` if specified by the client. Polaris will also ensure that the `sell_delivery_method` is supported for `sell_asset`. Raise a ``ValueError`` if the parameters are invalid in some way. Because Polaris validates all the parameters passed, the only reason to raise this exception _should_ be because the `sell_amount` is outside the minimum and maximum bounds for your service. Polaris will return a 400 Bad Request status code in this case. Raise a ``RuntimeError`` if you cannot return prices for the provided `sell_asset` and `buy_assets` for any reason. For example, the service used by the anchor to source exchange prices could be down. Polaris will return a 503 Server Unavailable status code in this case. :param token: The ``SEP10Token`` object representing the authenticated session :param request: The ``rest_framework.Request`` object representing the request :param sell_asset: The asset the client would like to sell for `buy_assets` :param buy_assets: The assets the client would like to buy using `sell_asset` :param sell_amount: The amount the client would like to sell of `sell_asset` :param sell_delivery_method: The method the client would like to use to deliver funds to the anchor. :param buy_delivery_method: The method the client would like to use to receive or collect funds from the anchor. :param country_code: The ISO 3166-1 alpha-3 code of the user's current address """ raise NotImplementedError()
[docs] def get_price( self, token: SEP10Token, request: Request, sell_asset: Union[Asset, OffChainAsset], buy_asset: Union[Asset, OffChainAsset], buy_amount: Optional[Decimal] = None, sell_amount: Optional[Decimal] = None, sell_delivery_method: Optional[DeliveryMethod] = None, buy_delivery_method: Optional[DeliveryMethod] = None, country_code: Optional[str] = None, *args, **kwargs ) -> Decimal: """ Return the price of one unit of `buy_asset` in terms of `sell_asset`. The price returned from this function is non-binding, meaning a ``Quote`` object will not be created and returned to the client as a result of this call. Polaris will ensure that there is an ``ExchangePair`` database record for the `sell_asset` and `buy_asset`, that the specified `sell_delivery_method` or `buy_delivery_method` is supported by the off-chain asset, and that the anchor supports transacting the off-chain asset in the `country_code`, if specified. Raise a ``ValueError`` if the parameters are invalid in some way. Because Polaris validates all the parameters passed, the only reason to raise this exception _should_ be because `sell_amount` or `buy_amount` is outside the minimum and maximum bounds for your service. Polaris will return a 400 Bad Request status code in this case. Raise a ``RuntimeError`` if you cannot return prices for the provided `sell_asset` and `buy_asset` for any reason. For example, the service used by the anchor to source exchange prices could be down. Polaris will return a 503 Server Unavailable status code in this case. :param token: The ``SEP10Token`` object representing the authenticated session :param request: The ``rest_framework.Request`` object representing the request :param sell_asset: The asset the client would like to sell for `buy_assets` :param sell_amount: The amount the client would like to sell of `sell_asset` :param buy_asset: The asset the client would like to buy using `sell_asset` :param buy_amount: The amount the client would like to purchase of `buy_asset` :param sell_delivery_method: The method the client would like to use to deliver funds to the anchor. :param buy_delivery_method: The method the client would like to use to receive or collect funds from the anchor. :param country_code: The ISO 3166-1 alpha-3 code of the user's current address """ raise NotImplementedError()
[docs] def post_quote( self, token: SEP10Token, request: Request, quote: Quote, *args, **kwargs ) -> Quote: """ Assign ``Quote.price`` and Quote.expire_at`` on the `quote` passed and return it. The anchor will be expected to honor the price set when the quote is used in a ``Transaction``. Note that the ``Quote`` object passed is not yet saved to the database when this function is called. If no exception is raised, Polaris will calculate the amount of the asset not specified in the request using the price assigned and save the returned quote to the database. However, the anchor is free to save the quote to the database in this function if necessary. Polaris will ensure that there is an ``ExchangePair`` database record for the `sell_asset` and `buy_asset`, that the specified `sell_delivery_method` or `buy_delivery_method` is supported by the off-chain asset, and that the anchor supports transacting the off-chain asset in the `country_code`, if specified. Raise a ``ValueError`` if the parameters are invalid in some way. Because Polaris validates all the parameters passed, the only reason to raise this exception _should_ be because `sell_amount` or `buy_amount` is outside the minimum and maximum bounds for your service OR the requested `expires_at` value is not acceptable to the anchor. Polaris will return a 400 Bad Request status code in this case. Raise a ``RuntimeError`` if you cannot return prices for the provided `sell_asset` and `buy_asset` for any reason. For example, the service used by the anchor to source exchange prices could be down. Polaris will return a 503 Server Unavailable status code in this case. :param token: The ``SEP10Token`` object representing the authenticated session :param request: The ``rest_framework.Request`` object representing the request :param quote: The ``Quote`` object representing the exchange rate to be offered """ raise NotImplementedError()
registered_quote_integration = QuoteIntegration()