Compare commits
4 Commits
645572e70a
...
61bef6d5f5
| Author | SHA1 | Date |
|---|---|---|
|
|
61bef6d5f5 | |
|
|
52e65dbe0d | |
|
|
8b3365a249 | |
|
|
2ceec5b9c0 |
|
|
@ -102,7 +102,6 @@ ENV/
|
||||||
|
|
||||||
# mypy
|
# mypy
|
||||||
.mypy_cache/
|
.mypy_cache/
|
||||||
.vscode/settings.json
|
|
||||||
|
|
||||||
# all files under
|
# all files under
|
||||||
.git/
|
.git/
|
||||||
|
|
@ -122,6 +121,9 @@ Session.vim
|
||||||
# wtv git hosting service tho?
|
# wtv git hosting service tho?
|
||||||
gitea/
|
gitea/
|
||||||
|
|
||||||
|
# ------ tina-land ------
|
||||||
|
.vscode/settings.json
|
||||||
|
|
||||||
# ------ macOS ------
|
# ------ macOS ------
|
||||||
# Finder metadata
|
# Finder metadata
|
||||||
**/.DS_Store
|
**/.DS_Store
|
||||||
|
|
|
||||||
|
|
@ -105,6 +105,15 @@ class SymbologyCache(Struct):
|
||||||
|
|
||||||
def write_config(self) -> None:
|
def write_config(self) -> None:
|
||||||
|
|
||||||
|
def clean_dict_for_toml(d):
|
||||||
|
'''Remove None values from dict recursively for TOML serialization'''
|
||||||
|
if isinstance(d, dict):
|
||||||
|
return {k: clean_dict_for_toml(v) for k, v in d.items() if v is not None}
|
||||||
|
elif isinstance(d, list):
|
||||||
|
return [clean_dict_for_toml(item) for item in d if item is not None]
|
||||||
|
else:
|
||||||
|
return d
|
||||||
|
|
||||||
# put the backend's pair-struct type ref at the top
|
# put the backend's pair-struct type ref at the top
|
||||||
# of file if possible.
|
# of file if possible.
|
||||||
cachedict: dict[str, Any] = {
|
cachedict: dict[str, Any] = {
|
||||||
|
|
@ -125,7 +134,9 @@ class SymbologyCache(Struct):
|
||||||
|
|
||||||
dct = cachedict[key] = {}
|
dct = cachedict[key] = {}
|
||||||
for key, struct in table.items():
|
for key, struct in table.items():
|
||||||
dct[key] = struct.to_dict(include_non_members=False)
|
raw_dict = struct.to_dict(include_non_members=False)
|
||||||
|
# Clean None values for TOML compatibility
|
||||||
|
dct[key] = clean_dict_for_toml(raw_dict)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
with self.fp.open(mode='wb') as fp:
|
with self.fp.open(mode='wb') as fp:
|
||||||
|
|
|
||||||
|
|
@ -200,9 +200,13 @@ def maybe_mk_fsp_shm(
|
||||||
)
|
)
|
||||||
|
|
||||||
# (attempt to) uniquely key the fsp shm buffers
|
# (attempt to) uniquely key the fsp shm buffers
|
||||||
|
# Use hash for macOS compatibility (31 char limit)
|
||||||
|
import hashlib
|
||||||
actor_name, uuid = tractor.current_actor().uid
|
actor_name, uuid = tractor.current_actor().uid
|
||||||
uuid_snip: str = uuid[:16]
|
# Create short hash of sym and target name
|
||||||
key: str = f'piker.{actor_name}[{uuid_snip}].{sym}.{target.name}'
|
content = f'{sym}.{target.name}'
|
||||||
|
content_hash = hashlib.md5(content.encode()).hexdigest()[:8]
|
||||||
|
key: str = f'{uuid[:8]}_{content_hash}.fsp'
|
||||||
|
|
||||||
shm, opened = maybe_open_shm_array(
|
shm, opened = maybe_open_shm_array(
|
||||||
key,
|
key,
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,7 @@ from __future__ import annotations
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from functools import partial
|
from functools import partial
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
import platform
|
||||||
from pprint import pformat
|
from pprint import pformat
|
||||||
from types import ModuleType
|
from types import ModuleType
|
||||||
from typing import (
|
from typing import (
|
||||||
|
|
@ -1380,13 +1381,20 @@ async def manage_history(
|
||||||
service: str = name.rstrip(f'.{mod.name}')
|
service: str = name.rstrip(f'.{mod.name}')
|
||||||
fqme: str = mkt.get_fqme(delim_char='')
|
fqme: str = mkt.get_fqme(delim_char='')
|
||||||
|
|
||||||
|
key: str = f'piker.{service}[{uuid[:16]}].{fqme}'
|
||||||
|
# use a short hash of the `fqme` to deal with macOS
|
||||||
|
# file-name-len limit..
|
||||||
|
if platform.system() == 'Darwin':
|
||||||
|
import hashlib
|
||||||
|
fqme_hash: str = hashlib.md5(fqme.encode()).hexdigest()[:8]
|
||||||
|
key: str = f'{uuid[:8]}_{fqme_hash}'
|
||||||
|
|
||||||
# (maybe) allocate shm array for this broker/symbol which will
|
# (maybe) allocate shm array for this broker/symbol which will
|
||||||
# be used for fast near-term history capture and processing.
|
# be used for fast near-term history capture and processing.
|
||||||
hist_shm, opened = maybe_open_shm_array(
|
hist_shm, opened = maybe_open_shm_array(
|
||||||
size=_default_hist_size,
|
size=_default_hist_size,
|
||||||
append_start_index=_hist_buffer_start,
|
append_start_index=_hist_buffer_start,
|
||||||
|
key=f'{key}.hist',
|
||||||
key=f'piker.{service}[{uuid[:16]}].{fqme}.hist',
|
|
||||||
|
|
||||||
# use any broker defined ohlc dtype:
|
# use any broker defined ohlc dtype:
|
||||||
dtype=getattr(mod, '_ohlc_dtype', def_iohlcv_fields),
|
dtype=getattr(mod, '_ohlc_dtype', def_iohlcv_fields),
|
||||||
|
|
@ -1405,7 +1413,7 @@ async def manage_history(
|
||||||
rt_shm, opened = maybe_open_shm_array(
|
rt_shm, opened = maybe_open_shm_array(
|
||||||
size=_default_rt_size,
|
size=_default_rt_size,
|
||||||
append_start_index=_rt_buffer_start,
|
append_start_index=_rt_buffer_start,
|
||||||
key=f'piker.{service}[{uuid[:16]}].{fqme}.rt',
|
key=f'{key}.rt',
|
||||||
|
|
||||||
# use any broker defined ohlc dtype:
|
# use any broker defined ohlc dtype:
|
||||||
dtype=getattr(mod, '_ohlc_dtype', def_iohlcv_fields),
|
dtype=getattr(mod, '_ohlc_dtype', def_iohlcv_fields),
|
||||||
|
|
|
||||||
|
|
@ -214,7 +214,8 @@ async def increment_history_view(
|
||||||
hist_chart: ChartPlotWidget = ds.hist_chart
|
hist_chart: ChartPlotWidget = ds.hist_chart
|
||||||
hist_viz: Viz = ds.hist_viz
|
hist_viz: Viz = ds.hist_viz
|
||||||
# viz: Viz = ds.viz
|
# viz: Viz = ds.viz
|
||||||
assert 'hist' in hist_viz.shm.token['shm_name']
|
# Ensure the "history" shm-buffer is what's reffed.
|
||||||
|
assert hist_viz.shm.token['shm_name'].endswith('.hist')
|
||||||
# name: str = hist_viz.name
|
# name: str = hist_viz.name
|
||||||
|
|
||||||
# TODO: seems this is more reliable at keeping the slow
|
# TODO: seems this is more reliable at keeping the slow
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue