Module hoshmap.value.entry
Expand source code
# Copyright (c) 2021. Davi Pereira dos Santos
# This file is part of the hoshmap project.
# Please respect the license - more about this in the section (*) below.
#
# hoshmap is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# hoshmap is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with hoshmap. If not, see <http://www.gnu.org/licenses/>.
#
# (*) Removing authorship by any means, e.g. by distribution of derived
# works or verbatim, obfuscated, compiled or rewritten versions of any
# part of this work is illegal and it is unethical regarding the effort and
# time spent here.
#
from functools import cached_property
from typing import Any
from hosh import Hosh
class Entry:
value: Any
hosh: Hosh
@cached_property
def id(self):
return self.hosh.id
def __mul__(self, other):
return self.hosh * (other if isinstance(other, Hosh) else other.hosh)
def __rmul__(self, other):
return (other if isinstance(other, Hosh) else other.hosh) * self.hosh
# @staticmethod
# def handle_id(id):
# """
# >>> iVal.handle_id("sduityv76453rjhgv7utfgsdfkhsdfsdfgi7tgsg").id
# 'sduityv76453rjhgv7utfgsdfkhsdfsdfgi7tgsg'
# >>> from hosh import Hosh
# >>> iVal.handle_id(Hosh.fromid("sduityv76453rjhgv7utfgsdfkhsdfsdfgi7tgsg")).id
# 'sduityv76453rjhgv7utfgsdfkhsdfsdfgi7tgsg'
# """
# if isinstance(id, str):
# return Hosh.fromid(id)
# elif isinstance(id, Hosh):
# return id
# else: # pragma: no cover
# raise Exception(f"Wrong id type: {type(id)}")
# @property
# def isevaluated(self):
# from hoshmap.value.lazyival import Unevaluated
#
# return self.results[self.id] is not Unevaluated
#
# def evaluate(self):
# val = self.value
# from hoshmap import Idict, FrozenIdict
#
# if isinstance(val, (Idict, FrozenIdict)):
# val.evaluate()
Classes
class Entry-
Expand source code
class Entry: value: Any hosh: Hosh @cached_property def id(self): return self.hosh.id def __mul__(self, other): return self.hosh * (other if isinstance(other, Hosh) else other.hosh) def __rmul__(self, other): return (other if isinstance(other, Hosh) else other.hosh) * self.hosh # @staticmethod # def handle_id(id): # """ # >>> iVal.handle_id("sduityv76453rjhgv7utfgsdfkhsdfsdfgi7tgsg").id # 'sduityv76453rjhgv7utfgsdfkhsdfsdfgi7tgsg' # >>> from hosh import Hosh # >>> iVal.handle_id(Hosh.fromid("sduityv76453rjhgv7utfgsdfkhsdfsdfgi7tgsg")).id # 'sduityv76453rjhgv7utfgsdfkhsdfsdfgi7tgsg' # """ # if isinstance(id, str): # return Hosh.fromid(id) # elif isinstance(id, Hosh): # return id # else: # pragma: no cover # raise Exception(f"Wrong id type: {type(id)}") # @property # def isevaluated(self): # from hoshmap.value.lazyival import Unevaluated # # return self.results[self.id] is not Unevaluated # # def evaluate(self): # val = self.value # from hoshmap import Idict, FrozenIdict # # if isinstance(val, (Idict, FrozenIdict)): # val.evaluate()Class variables
var hosh : hosh.hosh_.Hoshvar value : Any
Instance variables
var id-
Expand source code
def __get__(self, instance, owner=None): if instance is None: return self if self.attrname is None: raise TypeError( "Cannot use cached_property instance without calling __set_name__ on it.") try: cache = instance.__dict__ except AttributeError: # not all objects have __dict__ (e.g. class defines slots) msg = ( f"No '__dict__' attribute on {type(instance).__name__!r} " f"instance to cache {self.attrname!r} property." ) raise TypeError(msg) from None val = cache.get(self.attrname, _NOT_FOUND) if val is _NOT_FOUND: with self.lock: # check if another thread filled cache while we awaited lock val = cache.get(self.attrname, _NOT_FOUND) if val is _NOT_FOUND: val = self.func(instance) try: cache[self.attrname] = val except TypeError: msg = ( f"The '__dict__' attribute on {type(instance).__name__!r} instance " f"does not support item assignment for caching {self.attrname!r} property." ) raise TypeError(msg) from None return val