lbry-sdk/lbrynet/core/Offer.py

56 lines
1.3 KiB
Python
Raw Normal View History

from lbrynet.core.Error import NegotiationError
class Offer(object):
"""
A rate offer to download blobs from a host
"""
2016-09-30 06:12:17 +02:00
RATE_ACCEPTED = "RATE_ACCEPTED"
RATE_TOO_LOW = "RATE_TOO_LOW"
RATE_UNSET = "RATE_UNSET"
def __init__(self, offer):
self._state = None
self.rate = None
if isinstance(offer, float):
self.rate = round(offer, 5)
2016-09-30 06:12:17 +02:00
elif offer == Offer.RATE_ACCEPTED:
self.accept()
2016-09-30 06:12:17 +02:00
elif offer == Offer.RATE_TOO_LOW:
self.reject()
2016-10-03 08:44:58 +02:00
else:
self.unset()
@property
def accepted(self):
2016-09-30 06:12:17 +02:00
return self._state is Offer.RATE_ACCEPTED
@property
def too_low(self):
2016-09-30 06:12:17 +02:00
return self._state is Offer.RATE_TOO_LOW
2016-10-03 08:44:58 +02:00
@property
def is_unset(self):
return self._state is Offer.RATE_UNSET
@property
def message(self):
if self.accepted:
2016-09-30 06:12:17 +02:00
return Offer.RATE_ACCEPTED
elif self.too_low:
2016-09-30 06:12:17 +02:00
return Offer.RATE_TOO_LOW
2016-10-03 08:44:58 +02:00
elif self.is_unset:
2016-09-30 06:12:17 +02:00
return Offer.RATE_UNSET
2016-10-03 08:44:58 +02:00
return None
def accept(self):
2016-10-03 08:44:58 +02:00
if self._state is None or self.is_unset:
2016-09-30 06:12:17 +02:00
self._state = Offer.RATE_ACCEPTED
def reject(self):
2016-10-03 08:44:58 +02:00
if self._state is None or self.is_unset:
2016-09-30 06:12:17 +02:00
self._state = Offer.RATE_TOO_LOW
2016-10-03 08:44:58 +02:00
def unset(self):
self._state = Offer.RATE_UNSET