SPB Git forge

spb/hfmarketdata

Public

Open high-frequency market data platform — FirstRate full-history downloader, DuckDB/Parquet lake, open REST API and React docs platform (www.hfmarketdata.io)

127commits 1branches 0releases
24.7 MBsize
maindefault branch
11 days agolast push
JavaScript 53.7% Python 38.3% CSS 4.6% TypeScript 3.1%

History of tests/test_stream.py · clear filter

  1. Sun, Sep 6, 2026 2

    1. stream: registre de connexions ZSET et livraison par XREAD bloquant
      …
      * stream:conns:{principal} : ZSET (membre = id de connexion, score = dernier
        heartbeat) au lieu d'un compteur INCR/DECR qui restait gonflé 1 h quand un worker
        mourait sans DECR (4029 injustifiés). Les membres muets depuis 90 s sont élagués à
        chaque comptage ; le score est rafraîchi toutes les 30 s ; ZREM à la déconnexion.
      * Fan-out : un XREAD BLOCK (1 s) par socket abonnée sur filings:stream, via le client
        redis.asyncio, au lieu d'un XRANGE toutes les 250 ms par connexion. Le lecteur a sa
        propre connexion Redis fermée avec lui (une lecture bloquante annulée peut laisser une
        réponse tardive sur la connexion — doublons à la ré-abonnement) + événement d'arrêt.
      * Plus aucun appel Redis synchrone dans la coroutine : ZSET/hello via le client async,
        accounting.charge (compteur sync) via asyncio.to_thread.
      * Tests : élagage des connexions fantômes, rafraîchissement du score au heartbeat,
        livraison bloquante + unsubscribe/resume sans doublon. conftest.make_user : e-mail
        unique par uuid (id(counter) provoquait des collisions EMAIL_TAKEN).
      
      Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 18 days ago · 1 file +61
    2. stream: principal du middleware ratelimit, fin du repli permissif
      …
      stream/auth.py cherchait verify_api_key/resolve_api_key/authenticate_key dans
      accounts.security — aucune n'existe — puis acceptait toute chaîne hfmd_live_<32> avec
      un principal key:<sha256[:16]> : les lignes livrées étaient débitées à un compteur
      Redis orphelin et _tier_for_principal retombait sur free.
      
      * stream_ws lit ws.scope["state"] (principal, principal_kind, tier) posés par
        ratelimit.middleware._websocket ; keyless → JSON AUTH_REQUIRED + 4001 comme avant ;
        aucun contexte alors que HFMD_RATELIMIT est actif → refus 4401 sans handshake.
      * authenticate(key) = recherche api_keys.key_hash (sha256(sel+clé)) + statut compte,
        utilisée seulement quand le middleware est désactivé ; plus aucune acceptation par
        forme de clé.
      * Tests : principal = key:<id> (≠ hash), clé inconnue bien formée refusée,
        _resolve_principal sans contexte.
      
      Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 18 days ago · 1 file +51
  2. Fri, Sep 4, 2026 2

    1. fundamentals: tests unitaires, intégration, WebSocket et bulk + fixtures EDGAR réelles tronquées (Apple, Microsoft, Shake Shack), aucun accès réseau (respx)
      …
      - lac synthétique étendu (SHAK, GOOG, GOOGL) ; conftest : edgar_mock + fundamentals_data
      - 46 tests : mapping, calendrier fiscal (Apple Q2 FY2024 = 2024-03-30), priorités/unités, dérivation Q4, restatements/as_of, TTM, formules validées sur les chiffres réels d'Apple, grammaire de filtres, tous les endpoints json/csv/parquet, enveloppes 404/400, bulk 304, WebSocket (auth, abonnement, réception, resume, heartbeat, limite)
      
      Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 20 days ago · 1 file +153