feat: CV Application - AI-powered CV management, parsing, matching, and generation
This commit is contained in:
85
venv/lib/python3.12/site-packages/openai/_event_handler.py
Normal file
85
venv/lib/python3.12/site-packages/openai/_event_handler.py
Normal file
@@ -0,0 +1,85 @@
|
||||
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import threading
|
||||
from typing import Any, Callable
|
||||
|
||||
EventHandler = Callable[..., Any]
|
||||
|
||||
|
||||
class EventHandlerRegistry:
|
||||
"""Thread-safe (optional) registry of event handlers."""
|
||||
|
||||
def __init__(self, *, use_lock: bool = False) -> None:
|
||||
self._handlers: dict[str, list[EventHandler]] = {}
|
||||
self._once_ids: set[int] = set()
|
||||
self._lock: threading.Lock | None = threading.Lock() if use_lock else None
|
||||
|
||||
def _acquire(self) -> None:
|
||||
if self._lock is not None:
|
||||
self._lock.acquire()
|
||||
|
||||
def _release(self) -> None:
|
||||
if self._lock is not None:
|
||||
self._lock.release()
|
||||
|
||||
def add(self, event_type: str, handler: EventHandler, *, once: bool = False) -> None:
|
||||
self._acquire()
|
||||
try:
|
||||
handlers = self._handlers.setdefault(event_type, [])
|
||||
handlers.append(handler)
|
||||
if once:
|
||||
self._once_ids.add(id(handler))
|
||||
finally:
|
||||
self._release()
|
||||
|
||||
def remove(self, event_type: str, handler: EventHandler) -> None:
|
||||
self._acquire()
|
||||
try:
|
||||
handlers = self._handlers.get(event_type)
|
||||
if handlers is not None:
|
||||
try:
|
||||
handlers.remove(handler)
|
||||
except ValueError:
|
||||
pass
|
||||
self._once_ids.discard(id(handler))
|
||||
finally:
|
||||
self._release()
|
||||
|
||||
def get_handlers(self, event_type: str) -> list[EventHandler]:
|
||||
"""Return a snapshot of handlers for the given event type, removing once-handlers."""
|
||||
self._acquire()
|
||||
try:
|
||||
handlers = self._handlers.get(event_type)
|
||||
if not handlers:
|
||||
return []
|
||||
result = list(handlers)
|
||||
to_remove = [h for h in result if id(h) in self._once_ids]
|
||||
for h in to_remove:
|
||||
handlers.remove(h)
|
||||
self._once_ids.discard(id(h))
|
||||
return result
|
||||
finally:
|
||||
self._release()
|
||||
|
||||
def has_handlers(self, event_type: str) -> bool:
|
||||
self._acquire()
|
||||
try:
|
||||
handlers = self._handlers.get(event_type)
|
||||
return bool(handlers)
|
||||
finally:
|
||||
self._release()
|
||||
|
||||
def merge_into(self, target: EventHandlerRegistry) -> None:
|
||||
"""Move all handlers from this registry into *target*, then clear self."""
|
||||
self._acquire()
|
||||
try:
|
||||
for event_type, handlers in self._handlers.items():
|
||||
for handler in handlers:
|
||||
once = id(handler) in self._once_ids
|
||||
target.add(event_type, handler, once=once)
|
||||
self._handlers.clear()
|
||||
self._once_ids.clear()
|
||||
finally:
|
||||
self._release()
|
||||
Reference in New Issue
Block a user