33
44from viur .core import conf , logging
55from viur .core .bones import RelationalBone
6- from viur .core .decorators import exposed
76from viur .core .module import Module
87from viur .core .modules .translation import Creator , TranslationSkel
98from viur .core .modules .user import UserSkel
109from viur .core .prototypes .instanced_module import InstancedModule
10+ from viur .core .render .abstract import AbstractRenderer
1111from viur .core .skeleton import MetaSkel , skeletonByKind
1212from viur .shop .data .translations import TRANSLATIONS
1313from viur .shop .skeletons .article import ArticleAbstractSkel
2929
3030
3131class Shop (InstancedModule , Module ):
32+ _is_registered_for : t .ClassVar [set [str ]] = set ()
33+
3234 def __init__ (
3335 self ,
3436 * ,
@@ -50,6 +52,7 @@ def __init__(
5052 #
5153 ** kwargs : t .Any ,
5254 ):
55+ # logger.debug(f"{self.__class__.__name__}<Shop>.__init__()")
5356 super ().__init__ ()
5457 self .hooks = HOOK_SERVICE
5558
@@ -115,8 +118,26 @@ def __call__(self, *args, **kwargs) -> t.Self:
115118 SHOP_INSTANCE .set (self )
116119 elif self .modulePath == f"/vi/{ self .moduleName } " :
117120 SHOP_INSTANCE_VI .set (self )
121+
122+ import renders
123+
124+ logger .debug (dir (renders ))
125+
118126 return self
119127
128+ def register (self , target : dict , render : AbstractRenderer ) -> None :
129+ """
130+ Overwritten to avoid loops.
131+ The modules have an `shop` root/parent reference, but this should
132+ not again be discovered by :meth:`register`.
133+ """
134+ # logging.debug(f"{self.__class__.__name__}.register() {self.moduleName=} {self.modulePath=} "
135+ # f"{id(target)=} {render=} {self._is_registered_for=}")
136+ if (render_name := f"{ type (render ).__module__ } .{ type (render ).__qualname__ } " ) in Shop ._is_registered_for :
137+ return
138+ Shop ._is_registered_for .add (render_name )
139+ return super ().register (target , render )
140+
120141 def _set_kind_names (self ) -> None :
121142 """Set kindname of bones where the kind name can be dynamically
122143
@@ -228,6 +249,16 @@ def _add_translations(self) -> None:
228249 except Exception as exc :
229250 logger .exception (f"Failed to write added translation { skel = } :: { exc } " )
230251
252+ def __repr__ (self ) -> str :
253+ cls = type (self )
254+ return (
255+ f"<{ cls .__module__ } .{ cls .__qualname__ } object"
256+ f"with moduleName={ getattr (self , "moduleName" , "NOT_SET" )} , "
257+ f"modulePath={ getattr (self , "modulePath" , "NOT_SET" )} , "
258+ f"render={ getattr (self , "render" , "NOT_SET" )} "
259+ f"at { hex (id (self ))} >"
260+ )
261+
231262
232263Shop .html = True
233264Shop .vi = True
0 commit comments