Files
2025-09-10 12:05:15 +02:00

82 lines
2.2 KiB
Python

#
# This file is distributed under the MIT License. See LICENSE.md for details.
#
from __future__ import annotations
from datetime import datetime
from typing import Iterable, Mapping
from revng.pypeline.container import ConfigurationId
from revng.pypeline.model import ModelPathSet
from revng.pypeline.object import ObjectID
from revng.pypeline.task.task import ObjectDependencies
from .storage_provider import ContainerLocation, ProjectMetadata, SavePointsRange, StorageProvider
from .util import _REVNG_VERSION_PLACEHOLDER
class NullStorageProvider(StorageProvider):
"""The /dev/null of storage providers. It stores nothing and caches nothing.
It just keeps track of the model, project ID, and last change time as those
are required by the interface.
"""
def __init__(self):
self.model = b""
self.last_change = datetime.now()
def has(
self,
location: ContainerLocation,
keys: Iterable[ObjectID],
) -> Iterable[ObjectID]:
return []
def get(
self,
location: ContainerLocation,
keys: Iterable[ObjectID],
) -> Mapping[ObjectID, bytes]:
assert not keys, "NullStorageProvider does not support get operation."
return {}
def add_dependencies(
self,
savepoint_range: SavePointsRange,
configuration_id: ConfigurationId,
deps: ObjectDependencies,
) -> None:
self.last_change = datetime.now()
def put(
self,
location: ContainerLocation,
values: Mapping[ObjectID, bytes],
) -> None:
self.last_change = datetime.now()
def invalidate(self, invalidation_list: ModelPathSet) -> None:
self.last_change = datetime.now()
def get_model(self) -> bytes:
return self.model
def set_model(self, new_model: bytes):
self.model = new_model
self.last_change = datetime.now()
def metadata(self) -> ProjectMetadata:
"""
Fetch metadata about the current project
"""
return ProjectMetadata(
last_change=self.last_change,
revng_version=_REVNG_VERSION_PLACEHOLDER,
)
def prune_objects(self):
"""
Prunes all the objects (except metadata) from storage
"""