__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
import copy
from threading import Lock
from typing import TYPE_CHECKING, Any
import sentry_sdk
from sentry_sdk._lru_cache import LRUCache
from sentry_sdk.tracing import Span
from sentry_sdk.tracing_utils import has_span_streaming_enabled
if TYPE_CHECKING:
from typing import TypedDict
FlagData = TypedDict("FlagData", {"flag": str, "result": bool})
DEFAULT_FLAG_CAPACITY = 100
class FlagBuffer:
def __init__(self, capacity: int) -> None:
self.capacity = capacity
self.lock = Lock()
# Buffer is private. The name is mangled to discourage use. If you use this attribute
# directly you're on your own!
self.__buffer = LRUCache(capacity)
def clear(self) -> None:
self.__buffer = LRUCache(self.capacity)
def __deepcopy__(self, memo: "dict[int, Any]") -> "FlagBuffer":
with self.lock:
buffer = FlagBuffer(self.capacity)
buffer.__buffer = copy.deepcopy(self.__buffer, memo)
return buffer
def get(self) -> "list[FlagData]":
with self.lock:
return [
{"flag": key, "result": value} for key, value in self.__buffer.get_all()
]
def set(self, flag: str, result: bool) -> None:
if isinstance(result, FlagBuffer):
# If someone were to insert `self` into `self` this would create a circular dependency
# on the lock. This is of course a deadlock. However, this is far outside the expected
# usage of this class. We guard against it here for completeness and to document this
# expected failure mode.
raise ValueError(
"FlagBuffer instances can not be inserted into the dictionary."
)
with self.lock:
self.__buffer.set(flag, result)
def add_feature_flag(flag: str, result: bool) -> None:
"""
Records a flag and its value to be sent on subsequent error events.
We recommend you do this on flag evaluations. Flags are buffered per Sentry scope.
"""
client = sentry_sdk.get_client()
flags = sentry_sdk.get_isolation_scope().flags
flags.set(flag, result)
if has_span_streaming_enabled(client.options):
span = sentry_sdk.traces.get_current_span()
if span and isinstance(span, sentry_sdk.traces.StreamedSpan):
span.set_attribute(f"flag.evaluation.{flag}", result)
else:
span = sentry_sdk.get_current_span()
if span and isinstance(span, Span):
span.set_flag(f"flag.evaluation.{flag}", result)
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| __pycache__ | Folder | 0755 |
|
|
| ai | Folder | 0755 |
|
|
| crons | Folder | 0755 |
|
|
| integrations | Folder | 0755 |
|
|
| profiler | Folder | 0755 |
|
|
| __init__.py | File | 1.46 KB | 0644 |
|
| _batcher.py | File | 5.7 KB | 0644 |
|
| _compat.py | File | 3 KB | 0644 |
|
| _init_implementation.py | File | 2.43 KB | 0644 |
|
| _log_batcher.py | File | 1.88 KB | 0644 |
|
| _lru_cache.py | File | 1.14 KB | 0644 |
|
| _metrics_batcher.py | File | 1.21 KB | 0644 |
|
| _queue.py | File | 10.98 KB | 0644 |
|
| _span_batcher.py | File | 8.12 KB | 0644 |
|
| _types.py | File | 13.16 KB | 0644 |
|
| _werkzeug.py | File | 3.85 KB | 0644 |
|
| api.py | File | 15.59 KB | 0644 |
|
| attachments.py | File | 2.95 KB | 0644 |
|
| client.py | File | 49.95 KB | 0644 |
|
| consts.py | File | 61.95 KB | 0644 |
|
| debug.py | File | 959 B | 0644 |
|
| envelope.py | File | 9.37 KB | 0644 |
|
| feature_flags.py | File | 2.5 KB | 0644 |
|
| hub.py | File | 24.54 KB | 0644 |
|
| logger.py | File | 2.6 KB | 0644 |
|
| metrics.py | File | 1.42 KB | 0644 |
|
| monitor.py | File | 4.47 KB | 0644 |
|
| py.typed | File | 0 B | 0644 |
|
| scope.py | File | 74.09 KB | 0644 |
|
| scrubber.py | File | 5.99 KB | 0644 |
|
| serializer.py | File | 12.82 KB | 0644 |
|
| session.py | File | 5.08 KB | 0644 |
|
| sessions.py | File | 8.59 KB | 0644 |
|
| spotlight.py | File | 11.85 KB | 0644 |
|
| traces.py | File | 25.08 KB | 0644 |
|
| tracing.py | File | 50.33 KB | 0644 |
|
| tracing_utils.py | File | 54.36 KB | 0644 |
|
| transport.py | File | 44.41 KB | 0644 |
|
| types.py | File | 1.24 KB | 0644 |
|
| utils.py | File | 65.96 KB | 0644 |
|
| worker.py | File | 10.91 KB | 0644 |
|