943acbc573
Durcit la convention de nommage des projets (dérive constatée : 'Sliding Automation', 'code_versioning'... au lieu des formes canoniques). - trilium_api.py : projets_canoniques() lit le référentiel = valeurs du label projet sur les notes de type=projet (source unique, pas de constante en dur). Note-projet CodeVersioning créée (manquait). - mcp_server.py : _valider_projet() branché dans les 6 tools de création (add_decision/history/backlog, new_conversation, create_entite, add_skill). Refuse un projet non canonique (suggestion si faute) ou inconnu (renvoi au processus de création de projet). Ne verrouille pas si référentiel illisible. - lint_audit.py : VAL-nommage aligné sur le référentiel (attrape casse, espace ET snake_case ; l'ancien 'contient un espace' ratait code_versioning). - Données : 79 notes ré-étiquetées vers les 3 formes canoniques. Quality by design : l'erreur de nommage devient impossible à l'écriture, le Lint n'est plus que le filet de sécurité.
39 lines
1.2 KiB
Python
39 lines
1.2 KiB
Python
"""
|
|
IO/concurrency helpers for `tqdm.contrib`.
|
|
"""
|
|
from collections import deque
|
|
from concurrent.futures import ThreadPoolExecutor
|
|
|
|
from ..auto import tqdm as tqdm_auto
|
|
|
|
__author__ = {"github.com/": ["casperdcl"]}
|
|
__all__ = ['MonoWorker']
|
|
|
|
|
|
class MonoWorker:
|
|
"""
|
|
Supports one running task and one waiting task.
|
|
The waiting task is the most recent submitted (others are discarded).
|
|
"""
|
|
def __init__(self):
|
|
self.pool = ThreadPoolExecutor(max_workers=1)
|
|
self.futures = deque([], 2)
|
|
|
|
def submit(self, func, *args, **kwargs):
|
|
"""`func(*args, **kwargs)` may replace currently waiting task."""
|
|
futures = self.futures
|
|
if len(futures) == futures.maxlen:
|
|
running = futures.popleft()
|
|
if not running.done():
|
|
if len(futures): # clear waiting
|
|
waiting = futures.pop()
|
|
waiting.cancel()
|
|
futures.appendleft(running) # re-insert running
|
|
try:
|
|
waiting = self.pool.submit(func, *args, **kwargs)
|
|
except Exception as e:
|
|
tqdm_auto.write(str(e))
|
|
else:
|
|
futures.append(waiting)
|
|
return waiting
|