Exemple #1
0
    def _generate_dependency_keys(self) -> Set[str]:
        """
        Objects are stored in the cache using unique but identifiable IDs. Any
        dependant object must be able to figure out all the keys for its
        dependencies.

        This method fetches all the dependencies, builds their keys and then
        returns the keys as a set.
        """
        depends_on = set()
        if not self.dependencies:
            return depends_on
        for dependency in self.dependencies:
            if dependency.serializer_class != self.serializer_class:
                raise MismatchedSerializerError(
                    f"Dependent parsers must have the same serializer_class as their dependencies. "
                    f"Dependency {dependency.__name__} has "
                    f"serializer_class {dependency.serializer_class.__name__}. "
                    f"{self.__class__.__name__} has serializer_class {self.serializer_class.__name__}.",
                )
            depends_on.add(
                generate_key(
                    tag=dependency.tag,
                    identifying_fields=self.identifying_fields,
                    data=self.data,
                ), )
        return depends_on
Exemple #2
0
 def generate_cache_key(
     cls,
     model: Type[TrackedModel],
     identifying_fields: Iterable,
     obj: dict,
 ) -> str:
     """Generate a cache key based on the model name and the identifying
     values used to find it."""
     return "object_cache_" + generate_key(model.__name__,
                                           identifying_fields, obj)
Exemple #3
0
def test_generate_key():
    """
    Verifies that generate_key produces the expected key.

    TODO: This test needs to be more robust.
    """
    key = utils.generate_key("test", ["1", "2"], {"1": 1, "2": 2})
    assert (
        key
        == "a98ec5c5044800c88e862f007b98d89815fc40ca155d6ce7909530d792e909ce"  # /PS-IGNORE
    )
Exemple #4
0
    def __init__(
        self,
        dispatched_object: DispatchedObjectType,
        nursery: TariffObjectNursery,
    ):
        self.nursery = nursery

        self.data = dispatched_object["data"]
        if not self.identifying_fields:
            self.identifying_fields = self.model.identifying_fields
        self.transaction_id = dispatched_object["transaction_id"]

        self.key = generate_key(
            tag=self.tag,
            identifying_fields=self.identifying_fields,
            data=self.data,
        )

        self.dependency_keys = self._generate_dependency_keys()
        self.resolved_links = {}
Exemple #5
0
def test_generate_key():
    key = utils.generate_key("test", ["1", "2"], {"1": 1, "2": 2})
    assert key == "a98ec5c5044800c88e862f007b98d89815fc40ca155d6ce7909530d792e909ce"