Marek4321 commited on
Commit
9b7ca40
verified
1 Parent(s): 5d5afac

Update cache_manager.py

Browse files
Files changed (1) hide show
  1. cache_manager.py +20 -40
cache_manager.py CHANGED
@@ -24,19 +24,22 @@ class CacheManager:
24
 
25
  # Inicjalizacja pliku metadanych
26
  self.metadata_file = self.cache_dir / "metadata.json"
27
- asyncio.create_task(self._init_metadata())
28
-
29
- async def _init_metadata(self):
30
- """Inicjalizuje lub wczytuje metadane cache"""
31
- if not self.metadata_file.exists():
32
- await self._save_metadata({
33
- 'entries': {},
34
- 'total_size': 0,
35
- 'last_cleanup': time.time()
36
- })
 
 
37
 
38
  async def _load_metadata(self) -> Dict:
39
  """Wczytuje metadane cache"""
 
40
  try:
41
  if not self.metadata_file.exists():
42
  return {'entries': {}, 'total_size': 0, 'last_cleanup': time.time()}
@@ -49,6 +52,7 @@ class CacheManager:
49
 
50
  async def _save_metadata(self, metadata: Dict):
51
  """Zapisuje metadane cache"""
 
52
  async with aiofiles.open(self.metadata_file, 'w') as f:
53
  await f.write(json.dumps(metadata, indent=2))
54
 
@@ -61,6 +65,7 @@ class CacheManager:
61
 
62
  async def get(self, key: str) -> Optional[Dict]:
63
  """Pobiera warto艣膰 z cache je艣li istnieje i nie wygas艂a."""
 
64
  try:
65
  metadata = await self._load_metadata()
66
  entry_meta = metadata['entries'].get(key)
@@ -86,6 +91,7 @@ class CacheManager:
86
 
87
  async def set(self, key: str, value: Dict):
88
  """Zapisuje warto艣膰 do cache."""
 
89
  try:
90
  cache_file = self.cache_dir / f"{key}.json"
91
  data_str = json.dumps(value)
@@ -113,6 +119,7 @@ class CacheManager:
113
 
114
  async def invalidate(self, key: str):
115
  """Usuwa wpis z cache."""
 
116
  try:
117
  cache_file = self.cache_dir / f"{key}.json"
118
  if cache_file.exists():
@@ -131,6 +138,7 @@ class CacheManager:
131
 
132
  async def invalidate_all(self):
133
  """Czy艣ci ca艂y cache."""
 
134
  try:
135
  metadata = await self._load_metadata()
136
  # Usu艅 wszystkie pliki cache
@@ -153,9 +161,9 @@ class CacheManager:
153
 
154
  async def _cleanup_old_entries(self):
155
  """Usuwa najstarsze wpisy gdy cache przekroczy limit rozmiaru."""
 
156
  try:
157
  metadata = await self._load_metadata()
158
-
159
  sorted_entries = sorted(
160
  metadata['entries'].items(),
161
  key=lambda x: x[1]['timestamp']
@@ -170,32 +178,4 @@ class CacheManager:
170
  metadata = await self._load_metadata()
171
 
172
  except Exception as e:
173
- self.logger.error(f"B艂膮d podczas czyszczenia cache: {str(e)}")
174
-
175
- def cache_result(ttl: int = 3600):
176
- """
177
- Dekorator do cache'owania wynik贸w funkcji.
178
- """
179
- def decorator(func):
180
- @wraps(func)
181
- async def wrapper(*args, **kwargs):
182
- if not args or not hasattr(args[0], 'cache'):
183
- return await func(*args, **kwargs)
184
-
185
- cache = args[0].cache
186
- cache_key = cache._compute_key(
187
- func.__name__,
188
- *args[1:],
189
- **kwargs
190
- )
191
-
192
- result = await cache.get(cache_key)
193
- if result is not None:
194
- return result
195
-
196
- result = await func(*args, **kwargs)
197
- await cache.set(cache_key, result)
198
- return result
199
-
200
- return wrapper
201
- return decorator
 
24
 
25
  # Inicjalizacja pliku metadanych
26
  self.metadata_file = self.cache_dir / "metadata.json"
27
+ self._initialized = False
28
+
29
+ async def _ensure_initialized(self):
30
+ """Zapewnia, 偶e cache jest zainicjalizowany przed u偶yciem"""
31
+ if not self._initialized:
32
+ if not self.metadata_file.exists():
33
+ await self._save_metadata({
34
+ 'entries': {},
35
+ 'total_size': 0,
36
+ 'last_cleanup': time.time()
37
+ })
38
+ self._initialized = True
39
 
40
  async def _load_metadata(self) -> Dict:
41
  """Wczytuje metadane cache"""
42
+ await self._ensure_initialized()
43
  try:
44
  if not self.metadata_file.exists():
45
  return {'entries': {}, 'total_size': 0, 'last_cleanup': time.time()}
 
52
 
53
  async def _save_metadata(self, metadata: Dict):
54
  """Zapisuje metadane cache"""
55
+ await self._ensure_initialized()
56
  async with aiofiles.open(self.metadata_file, 'w') as f:
57
  await f.write(json.dumps(metadata, indent=2))
58
 
 
65
 
66
  async def get(self, key: str) -> Optional[Dict]:
67
  """Pobiera warto艣膰 z cache je艣li istnieje i nie wygas艂a."""
68
+ await self._ensure_initialized()
69
  try:
70
  metadata = await self._load_metadata()
71
  entry_meta = metadata['entries'].get(key)
 
91
 
92
  async def set(self, key: str, value: Dict):
93
  """Zapisuje warto艣膰 do cache."""
94
+ await self._ensure_initialized()
95
  try:
96
  cache_file = self.cache_dir / f"{key}.json"
97
  data_str = json.dumps(value)
 
119
 
120
  async def invalidate(self, key: str):
121
  """Usuwa wpis z cache."""
122
+ await self._ensure_initialized()
123
  try:
124
  cache_file = self.cache_dir / f"{key}.json"
125
  if cache_file.exists():
 
138
 
139
  async def invalidate_all(self):
140
  """Czy艣ci ca艂y cache."""
141
+ await self._ensure_initialized()
142
  try:
143
  metadata = await self._load_metadata()
144
  # Usu艅 wszystkie pliki cache
 
161
 
162
  async def _cleanup_old_entries(self):
163
  """Usuwa najstarsze wpisy gdy cache przekroczy limit rozmiaru."""
164
+ await self._ensure_initialized()
165
  try:
166
  metadata = await self._load_metadata()
 
167
  sorted_entries = sorted(
168
  metadata['entries'].items(),
169
  key=lambda x: x[1]['timestamp']
 
178
  metadata = await self._load_metadata()
179
 
180
  except Exception as e:
181
+ self.logger.error(f"B艂膮d podczas czyszczenia cache: {str(e)}")