Skip to content

Commit

Permalink
fix: add cache override
Browse files Browse the repository at this point in the history
  • Loading branch information
vberlier committed Nov 29, 2021
1 parent b64603c commit 071a64a
Showing 1 changed file with 22 additions and 1 deletion.
23 changes: 22 additions & 1 deletion beet/core/cache.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,11 @@
import json
import logging
import shutil
from contextlib import contextmanager
from datetime import datetime, timedelta
from pathlib import Path
from textwrap import indent
from typing import Any, ClassVar, Iterator, List, Optional, Type, TypeVar
from typing import Any, ClassVar, Iterator, List, Optional, Set, Type, TypeVar
from urllib.request import urlopen

from .container import Container, MatchMixin
Expand Down Expand Up @@ -166,6 +167,26 @@ def flush(self):
self.directory.mkdir(parents=True, exist_ok=True)
self.index_path.write_text(dump_json(self.index))

@contextmanager
def override(self, **data: Any):
"""Temporarily update the json data."""
to_restore: JsonDict = {}
to_remove: Set[str] = set()

for key, value in data.items():
if key in self.json:
to_restore[key] = self.json[key]
else:
to_remove.add(key)
self.json[key] = value

try:
yield self
finally:
for key in to_remove:
del self.json[key]
self.json.update(to_restore)

def __repr__(self) -> str:
return f"{self.__class__.__name__}({str(self.directory)!r})"

Expand Down

0 comments on commit 071a64a

Please sign in to comment.