diff --git a/jussi/upstream.py b/jussi/upstream.py index bd7bd43c99fd78ae2efff09d6394fa49a6118f77..7b9728d9d04402274f689eae639e0f747eca8d42 100644 --- a/jussi/upstream.py +++ b/jussi/upstream.py @@ -18,7 +18,7 @@ from .errors import InvalidUpstreamURL logger = structlog.get_logger(__name__) -ACCOUNT_TRANSFER_PATTERN = re.compile(r'^\/?@([^\/\s]+)/transfers$') +ACCOUNT_TRANSFER_PATTERN = re.compile(r'^\/?(@([^\/\s]+)/transfers|~?witnesses)$') # ------------------- @@ -88,14 +88,16 @@ class _Upstreams(object): @functools.lru_cache(8192) def url(self, request_urn) -> str: - try: - if (request_urn.api == 'database_api' or request_urn.api == 'condenser_api') and ACCOUNT_TRANSFER_PATTERN.match( - request_urn.params[0]): - url = os.environ.get('JUSSI_ACCOUNT_TRANSFER_STEEMD_URL') - if url: - return url - except Exception: - pass + # certain steemd.get_state paths must be routed differently + if (request_urn.api in ['database_api', 'condenser_api'] + and request_urn.method == 'get_state' + and isinstance(request_urn.params, list) + and len(request_urn.params) == 1 + and ACCOUNT_TRANSFER_PATTERN.match(request_urn.params[0])): + url = os.environ.get('JUSSI_ACCOUNT_TRANSFER_STEEMD_URL') + if url: + return url + _, url = self.__URLS.longest_prefix(str(request_urn)) if not url: raise InvalidUpstreamURL(