Source code for ManifoldMarketManager.rule

"""Umbrella package for all rules.

Anyone who wants to develop a plugin is welcome to modify the values in this specific namespace. In particular, to add
a rule with your plugin:
1) Add your plugin's rules as a submodule of this using
   `from sys import modules; modules['.'.join((PATH_TO_RULE_MODULE, PATH_TO_YOUR_RULE))] = module[PATH_TO_YOUR_RULE]
2) Append your plugin's namespace to `rule.__all__`
3) Append each of your rules' import paths to `consts.AVAILABLE_RULES`
"""

from __future__ import annotations

from importlib import import_module
from typing import Any, Optional, Type, cast

from attrs import define

from .. import Rule
from ..consts import AnyResolution
from ..util import dynamic_import


[docs]def get_rule(type_: str) -> Type[Rule[Any]]: """Dynamically import and return a rule type by name.""" ret = getattr( import_module(".".join(("", *type_.split(".")[:-1])), __name__), type_.split(".")[-1] ) if issubclass(ret, Rule): return cast(Type[Rule[Any]], ret) raise NameError()
[docs]@define(slots=False) # type: ignore class DoResolveRule(Rule[Optional[bool]]): """The subtype of rule which determines if a market should resolve, returning a bool."""
[docs]@define(slots=False) # type: ignore class ResolutionValueRule(Rule[AnyResolution]): """The subtype of rule which determines what a market should resolve to."""
__all__ = ['get_rule', 'DoResolveRule', 'ResolutionValueRule'] # dynamically load optional plugins where able to exempt = {'__init__', '__main__', '__pycache__'} dynamic_import(__file__, __name__, __all__, exempt)