Source code for microraiden.proxy.resources.expensive
import logging
from flask_restful import Resource
from eth_utils import is_address
from microraiden.channel_manager import (
ChannelManager,
)
from .paywall_decorator import paywall_decorator
log = logging.getLogger(__name__)
[docs]class LightClientProxy:
"""A simple proxy that returns a file that contains paywall html."""
def __init__(self, index_html: str) -> None:
with open(index_html) as fp:
self.data = fp.read()
[docs] def get(self, url: str) -> str:
return self.data
[docs]class Expensive(Resource):
"""Expensive is basically a Flask's resource with a custom method decorator.
The decorator handles all the payment processing and user just needs to
implement methods for HTTP verb he intends to use."""
method_decorators = [paywall_decorator]
def __init__(self,
channel_manager: ChannelManager,
light_client_proxy=None,
paywall=None,
price: None = None,
) -> None:
super(Expensive, self).__init__()
assert isinstance(channel_manager, ChannelManager)
assert price is None or callable(price) or price > 0
self.contract_address = channel_manager.channel_manager_contract.address
self.receiver_address = channel_manager.receiver
assert is_address(self.contract_address)
assert is_address(self.receiver_address)
self.channel_manager = channel_manager
self.light_client_proxy = light_client_proxy
self._price = price
self.paywall = paywall
[docs] def get_paywall(self, url: str) -> str:
"""Implement this if you want to return a custom HTTP paywall code.
Returns:
str: HTML page with the paywall
"""
return self.light_client_proxy.get(url)
[docs] def price(self) -> int:
"""Implement this if you want to have price set dynamically.
Returns:
int: price of a resource. If the value returned is 0, no paywall checks are
done and the actual content will be sent to the user.
"""
if callable(self._price):
return self._price()
else:
return self._price