diff --git a/Makefile b/Makefile index 01a6893..311c284 100644 --- a/Makefile +++ b/Makefile @@ -113,7 +113,7 @@ daemon: quiet_daemon: @while [ 1 ]; do\ $(MAKE) run $(MFLAGS);\ - sleep 1800;\ + sleep 21600;\ done; .PHONY: build diff --git a/src/market.py b/src/market.py index 0d9ae88..7b88f37 100644 --- a/src/market.py +++ b/src/market.py @@ -36,7 +36,7 @@ class Market(DictDeserializable): """Represent a market and its corresponding rules. Events - ====== + ------ before_check(market: Market): after_check(market: Market): Called before/after a market is checked. Please don't put anything intensive in here. @@ -94,7 +94,6 @@ class Market(DictDeserializable): """Rebuild sensitive/non-serializable state after retrieving from database.""" self.__dict__.update(state) self.client = get_client() - self.market = self.client.get_market_by_id(self.market.id) if not hasattr(self, "event_emitter"): self.event_emitter = EventEmitter() self.event_emitter._lock = Lock() @@ -104,6 +103,10 @@ class Market(DictDeserializable): def id(self) -> str: """Return the ID of a market as reported by Manifold.""" return self.market.id + + def refresh(self) -> None: + """Ensure market data is recent.""" + self.market = self.client.get_market_by_id(self.market.id) @property def status(self) -> MarketStatus: diff --git a/src/rule/manifold/this.py b/src/rule/manifold/this.py index 2cae275..334fd29 100644 --- a/src/rule/manifold/this.py +++ b/src/rule/manifold/this.py @@ -26,6 +26,7 @@ class ThisMarketClosed(AbstractRule[bool]): _explainer_stub: ClassVar[str] = "If this market reaches its close date" def _value(self, market: Market) -> bool: + market.refresh() assert market.market.closeTime is not None return bool(market.market.closeTime < time() * 1000) @@ -37,6 +38,7 @@ class CurrentValueRule(AbstractRule[AnyResolution]): _explainer_stub: ClassVar[str] = "Resolves to the current market value" def _value(self, market: Market) -> float | dict[Any, float]: + market.refresh() if market.market.outcomeType == Outcome.BINARY: assert market.market.probability is not None return market.market.probability * 100 @@ -62,6 +64,7 @@ class FibonacciValueRule(Rule[Union[float, Mapping[int, float]]]): min_rewarded: float = 0.0001 def _value(self, market: Market) -> float | dict[int, float]: + market.refresh() items = market_to_answer_map(market, self.exclude, (lambda id_, probability: probability < self.min_rewarded)) rank = sorted(items, key=items.__getitem__) ret = {item: fib for item, fib in zip(rank, fibonacci())} @@ -98,6 +101,7 @@ class PopularValueRule(Rule[Union[MultipleChoiceResolution, FreeResponseResoluti size: int = 1 def _value(self, market: Market) -> FreeResponseResolution | MultipleChoiceResolution: + market.refresh() answers = market_to_answer_map(market) final_answers: dict[int, float] = {} try: