mirror of
https://github.com/langbot-app/LangBot.git
synced 2026-09-16 14:57:15 +00:00
refactor(storage): enforce xxHash3-128 and remove sha256 fallback in MediaCache
- Import xxhash directly instead of conditional try-except block - Remove unused hashlib import and sha256 fallback branch in hash_bytes - Update docstrings to reflect pure xxHash3-128 content-addressing
This commit is contained in:
@@ -4,18 +4,13 @@ import asyncio
|
|||||||
import base64
|
import base64
|
||||||
import copy
|
import copy
|
||||||
import datetime
|
import datetime
|
||||||
import hashlib
|
|
||||||
import mimetypes
|
import mimetypes
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
|
import xxhash
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import TYPE_CHECKING, Any
|
from typing import TYPE_CHECKING, Any
|
||||||
|
|
||||||
try:
|
|
||||||
import xxhash
|
|
||||||
except ImportError:
|
|
||||||
xxhash = None
|
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from ...core import app
|
from ...core import app
|
||||||
from . import mgr as storage_mgr
|
from . import mgr as storage_mgr
|
||||||
@@ -29,7 +24,7 @@ SAFE_MEDIA_FILENAME = re.compile(r'^[a-f0-9]{32,64}(\.[a-zA-Z0-9]{1,10})?$')
|
|||||||
class MediaCache:
|
class MediaCache:
|
||||||
"""Content-addressable storage cache for images and media attachments.
|
"""Content-addressable storage cache for images and media attachments.
|
||||||
|
|
||||||
Deduplicates media files using xxHash3-128 (with sha256 fallback),
|
Deduplicates media files using xxHash3-128,
|
||||||
offloads payloads from SQLite to StorageProvider, and implements LRU
|
offloads payloads from SQLite to StorageProvider, and implements LRU
|
||||||
and age-based retention cleanup.
|
and age-based retention cleanup.
|
||||||
"""
|
"""
|
||||||
@@ -41,9 +36,7 @@ class MediaCache:
|
|||||||
@staticmethod
|
@staticmethod
|
||||||
def hash_bytes(data: bytes) -> str:
|
def hash_bytes(data: bytes) -> str:
|
||||||
"""Compute content-addressable hash for binary data."""
|
"""Compute content-addressable hash for binary data."""
|
||||||
if xxhash is not None:
|
return xxhash.xxh3_128_hexdigest(data)
|
||||||
return xxhash.xxh3_128_hexdigest(data)
|
|
||||||
return hashlib.sha256(data).hexdigest()[:32]
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def parse_data_url(data_url: str) -> tuple[bytes, str] | None:
|
def parse_data_url(data_url: str) -> tuple[bytes, str] | None:
|
||||||
|
|||||||
Reference in New Issue
Block a user