Compare commits
	
		
			3 Commits 
		
	
	
		
			2545def7bb
			...
			6f782862f8
		
	
	| Author | SHA1 | Date | 
|---|---|---|
| 
							
							
								 | 
						6f782862f8 | |
| 
							
							
								 | 
						baff466ee0 | |
| 
							
							
								 | 
						b01edcf65a | 
| 
						 | 
				
			
			@ -96,7 +96,10 @@ async def _setup_persistent_brokerd(
 | 
			
		|||
    # - `open_symbol_search()`
 | 
			
		||||
    # NOTE: see ep invocation details inside `.data.feed`.
 | 
			
		||||
    try:
 | 
			
		||||
        async with trio.open_nursery() as service_nursery:
 | 
			
		||||
        async with (
 | 
			
		||||
            tractor.trionics.collapse_eg(),
 | 
			
		||||
            trio.open_nursery() as service_nursery
 | 
			
		||||
        ):
 | 
			
		||||
            bus: _FeedsBus = feed.get_feed_bus(
 | 
			
		||||
                brokername,
 | 
			
		||||
                service_nursery,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -34,6 +34,7 @@ import urllib.parse
 | 
			
		|||
import hashlib
 | 
			
		||||
import hmac
 | 
			
		||||
import base64
 | 
			
		||||
import tractor
 | 
			
		||||
import trio
 | 
			
		||||
 | 
			
		||||
from piker import config
 | 
			
		||||
| 
						 | 
				
			
			@ -372,8 +373,7 @@ class Client:
 | 
			
		|||
        #     1658347714, 'status': 'Success'}]}
 | 
			
		||||
 | 
			
		||||
        if xfers:
 | 
			
		||||
            import tractor
 | 
			
		||||
            await tractor.pp()
 | 
			
		||||
            await tractor.pause()
 | 
			
		||||
 | 
			
		||||
        trans: dict[str, Transaction] = {}
 | 
			
		||||
        for entry in xfers:
 | 
			
		||||
| 
						 | 
				
			
			@ -501,7 +501,8 @@ class Client:
 | 
			
		|||
            for xkey, data in resp['result'].items():
 | 
			
		||||
 | 
			
		||||
                # NOTE: always cache in pairs tables for faster lookup
 | 
			
		||||
                pair = Pair(xname=xkey, **data)
 | 
			
		||||
                with tractor.devx.maybe_open_crash_handler(): # as bxerr:
 | 
			
		||||
                    pair = Pair(xname=xkey, **data)
 | 
			
		||||
 | 
			
		||||
                # register the above `Pair` structs for all
 | 
			
		||||
                # key-sets/monikers: a set of 4 (frickin) tables
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -21,7 +21,6 @@ Symbology defs and search.
 | 
			
		|||
from decimal import Decimal
 | 
			
		||||
 | 
			
		||||
import tractor
 | 
			
		||||
from rapidfuzz import process as fuzzy
 | 
			
		||||
 | 
			
		||||
from piker._cacheables import (
 | 
			
		||||
    async_lifo_cache,
 | 
			
		||||
| 
						 | 
				
			
			@ -41,8 +40,13 @@ from piker.accounting._mktinfo import (
 | 
			
		|||
)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# https://www.kraken.com/features/api#get-tradable-pairs
 | 
			
		||||
class Pair(Struct):
 | 
			
		||||
    '''
 | 
			
		||||
    A tradable asset pair as schema-defined by,
 | 
			
		||||
 | 
			
		||||
    https://docs.kraken.com/api/docs/rest-api/get-tradable-asset-pairs
 | 
			
		||||
 | 
			
		||||
    '''
 | 
			
		||||
    xname: str  # idiotic bs_mktid equiv i guess?
 | 
			
		||||
    altname: str  # alternate pair name
 | 
			
		||||
    wsname: str  # WebSocket pair name (if available)
 | 
			
		||||
| 
						 | 
				
			
			@ -53,7 +57,6 @@ class Pair(Struct):
 | 
			
		|||
    lot: str  # volume lot size
 | 
			
		||||
 | 
			
		||||
    cost_decimals: int
 | 
			
		||||
    costmin: float
 | 
			
		||||
    pair_decimals: int  # scaling decimal places for pair
 | 
			
		||||
    lot_decimals: int  # scaling decimal places for volume
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -79,6 +82,7 @@ class Pair(Struct):
 | 
			
		|||
    tick_size: float  # min price step size
 | 
			
		||||
    status: str
 | 
			
		||||
 | 
			
		||||
    costmin: str|None = None  # XXX, only some mktpairs?
 | 
			
		||||
    short_position_limit: float = 0
 | 
			
		||||
    long_position_limit: float = float('inf')
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -25,7 +25,10 @@ from typing import TYPE_CHECKING
 | 
			
		|||
 | 
			
		||||
import trio
 | 
			
		||||
import tractor
 | 
			
		||||
from tractor.trionics import broadcast_receiver
 | 
			
		||||
from tractor.trionics import (
 | 
			
		||||
    broadcast_receiver,
 | 
			
		||||
    collapse_eg,
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
from ._util import (
 | 
			
		||||
    log,  # sub-sys logger
 | 
			
		||||
| 
						 | 
				
			
			@ -281,8 +284,11 @@ async def open_ems(
 | 
			
		|||
            client._ems_stream = trades_stream
 | 
			
		||||
 | 
			
		||||
            # start sync code order msg delivery task
 | 
			
		||||
            async with trio.open_nursery() as n:
 | 
			
		||||
                n.start_soon(
 | 
			
		||||
            async with (
 | 
			
		||||
                collapse_eg(),
 | 
			
		||||
                trio.open_nursery() as tn,
 | 
			
		||||
            ):
 | 
			
		||||
                tn.start_soon(
 | 
			
		||||
                    relay_orders_from_sync_code,
 | 
			
		||||
                    client,
 | 
			
		||||
                    fqme,
 | 
			
		||||
| 
						 | 
				
			
			@ -298,4 +304,4 @@ async def open_ems(
 | 
			
		|||
                )
 | 
			
		||||
 | 
			
		||||
                # stop the sync-msg-relay task on exit.
 | 
			
		||||
                n.cancel_scope.cancel()
 | 
			
		||||
                tn.cancel_scope.cancel()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -498,6 +498,7 @@ async def cascade(
 | 
			
		|||
 | 
			
		||||
        func_name: str = func.__name__
 | 
			
		||||
        async with (
 | 
			
		||||
            tractor.trionics.collapse_eg(),  # avoid multi-taskc tb in console
 | 
			
		||||
            trio.open_nursery() as tn,
 | 
			
		||||
        ):
 | 
			
		||||
            # TODO: might be better to just make a "restart" method where
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -200,7 +200,8 @@ async def open_pikerd(
 | 
			
		|||
            reg_addrs,
 | 
			
		||||
        ),
 | 
			
		||||
        tractor.open_nursery() as actor_nursery,
 | 
			
		||||
        trio.open_nursery() as service_nursery,
 | 
			
		||||
        tractor.trionics.collapse_eg(),
 | 
			
		||||
        trio.open_nursery() as service_tn,
 | 
			
		||||
    ):
 | 
			
		||||
        for addr in reg_addrs:
 | 
			
		||||
            if addr not in root_actor.accept_addrs:
 | 
			
		||||
| 
						 | 
				
			
			@ -211,7 +212,7 @@ async def open_pikerd(
 | 
			
		|||
 | 
			
		||||
        # assign globally for future daemon/task creation
 | 
			
		||||
        Services.actor_n = actor_nursery
 | 
			
		||||
        Services.service_n = service_nursery
 | 
			
		||||
        Services.service_n = service_tn
 | 
			
		||||
        Services.debug_mode = debug_mode
 | 
			
		||||
 | 
			
		||||
        try:
 | 
			
		||||
| 
						 | 
				
			
			@ -221,7 +222,7 @@ async def open_pikerd(
 | 
			
		|||
            # TODO: is this more clever/efficient?
 | 
			
		||||
            # if 'samplerd' in Services.service_tasks:
 | 
			
		||||
            #     await Services.cancel_service('samplerd')
 | 
			
		||||
            service_nursery.cancel_scope.cancel()
 | 
			
		||||
            service_tn.cancel_scope.cancel()
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# TODO: do we even need this?
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -33,7 +33,6 @@ import trio
 | 
			
		|||
 | 
			
		||||
from piker.ui.qt import (
 | 
			
		||||
    QtCore,
 | 
			
		||||
    QtWidgets,
 | 
			
		||||
    Qt,
 | 
			
		||||
    QLineF,
 | 
			
		||||
    QFrame,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1445,7 +1445,10 @@ async def display_symbol_data(
 | 
			
		|||
        # for pause/resume on mouse interaction
 | 
			
		||||
        rt_chart.feed = feed
 | 
			
		||||
 | 
			
		||||
        async with trio.open_nursery() as ln:
 | 
			
		||||
        async with (
 | 
			
		||||
            tractor.trionics.collapse_eg(),
 | 
			
		||||
            trio.open_nursery() as ln,
 | 
			
		||||
        ):
 | 
			
		||||
            # if available load volume related built-in display(s)
 | 
			
		||||
            vlm_charts: dict[
 | 
			
		||||
                str,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -22,7 +22,10 @@ from contextlib import asynccontextmanager as acm
 | 
			
		|||
from typing import Callable
 | 
			
		||||
 | 
			
		||||
import trio
 | 
			
		||||
from tractor.trionics import gather_contexts
 | 
			
		||||
from tractor.trionics import (
 | 
			
		||||
    gather_contexts,
 | 
			
		||||
    collapse_eg,
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
from piker.ui.qt import (
 | 
			
		||||
    QtCore,
 | 
			
		||||
| 
						 | 
				
			
			@ -207,7 +210,10 @@ async def open_signal_handler(
 | 
			
		|||
        async for args in recv:
 | 
			
		||||
            await async_handler(*args)
 | 
			
		||||
 | 
			
		||||
    async with trio.open_nursery() as tn:
 | 
			
		||||
    async with (
 | 
			
		||||
        collapse_eg(),
 | 
			
		||||
        trio.open_nursery() as tn
 | 
			
		||||
    ):
 | 
			
		||||
        tn.start_soon(proxy_to_handler)
 | 
			
		||||
        async with send:
 | 
			
		||||
            yield
 | 
			
		||||
| 
						 | 
				
			
			@ -242,6 +248,7 @@ async def open_handlers(
 | 
			
		|||
    widget: QWidget
 | 
			
		||||
    streams: list[trio.abc.ReceiveChannel]
 | 
			
		||||
    async with (
 | 
			
		||||
        collapse_eg(),
 | 
			
		||||
        trio.open_nursery() as tn,
 | 
			
		||||
        gather_contexts([
 | 
			
		||||
            open_event_stream(
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -600,6 +600,7 @@ async def open_fsp_admin(
 | 
			
		|||
            kwargs=kwargs,
 | 
			
		||||
        ) as (cache_hit, cluster_map),
 | 
			
		||||
 | 
			
		||||
        tractor.trionics.collapse_eg(),
 | 
			
		||||
        trio.open_nursery() as tn,
 | 
			
		||||
    ):
 | 
			
		||||
        if cache_hit:
 | 
			
		||||
| 
						 | 
				
			
			@ -613,6 +614,8 @@ async def open_fsp_admin(
 | 
			
		|||
        )
 | 
			
		||||
        try:
 | 
			
		||||
            yield admin
 | 
			
		||||
 | 
			
		||||
        # ??TODO, does this *need* to be inside a finally?
 | 
			
		||||
        finally:
 | 
			
		||||
            # terminate all tasks via signals
 | 
			
		||||
            for key, entry in admin._registry.items():
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -792,6 +792,7 @@ async def open_order_mode(
 | 
			
		|||
            brokerd_accounts,
 | 
			
		||||
            ems_dialog_msgs,
 | 
			
		||||
        ),
 | 
			
		||||
        tractor.trionics.collapse_eg(),
 | 
			
		||||
        trio.open_nursery() as tn,
 | 
			
		||||
 | 
			
		||||
    ):
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue