def test_lazy(): from xoutil.objects import lazy, setdefaultattr class new(object): pass inst = new() setter = lambda a: -a setdefaultattr(inst, 'c', lazy(setter, 10)) assert inst.c == -10 setdefaultattr(inst, 'c', lazy(setter, 20)) assert inst.c == -10
def _handle_browser_tags(self, record, request): tags = setdefaultattr(record, "tags", {}) ua = request.user_agent if ua: tags["os"] = ua.platform.capitalize() browser = str(ua.browser).capitalize() + " " + str(ua.version) tags["browser"] = browser
def __set__(self, inst, value): from xoutil.objects import setdefaultattr target = self.target if target and not isinstance(value, target): raise TypeError('Cannot assign %s to %s' % (value, self.name)) previous = getattr(inst, self._name, None) if previous: backrefs = getattr(previous, self.ref) backrefs.remove(self) setattr(inst, self._name, value) backrefs = setdefaultattr(value, self.ref, []) backrefs.append(inst)
def initialize_sys_path(self): from xoutil.objects import setdefaultattr from xoeuf.odoo.modules import module _super = patch.get_super("initialize_sys_path") external_addons = setdefaultattr(self, "__addons", []) if not external_addons: _super() result = module.ad_paths external_addons.extend(self.find_external_addons()) result.extend(external_addons) module.ad_paths = result return result else: return module.ad_paths
def _handle_cli_tags(self, record): import sys from itertools import takewhile tags = setdefaultattr(record, "tags", {}) if sys.argv: cmd = " ".join(takewhile(lambda arg: not arg.startswith("-"), sys.argv)) else: cmd = None if cmd: import os cmd = os.path.basename(cmd) if cmd: tags["cmd"] = cmd
def __new__(cls, **attrs): from xoutil.objects import setdefaultattr this_instances = setdefaultattr(Entity, 'this_instances', []) res = super(Entity, cls).__new__(cls, **attrs) this_instances.append(res) return res
def _handle_db_tags(self, record, request): db = getattr(request, "session", {}).get("db", None) if db: tags = setdefaultattr(record, "tags", {}) tags["db"] = db
def inner(self, *args, **kwargs): stack = setdefaultattr(self, attr, []) items = pop_n(stack, n) kwargs[kwargname] = tuple(items) return f(self, *args, **kwargs)
def inner(self, *args, **kwargs): res = f(self, *args, **kwargs) setdefaultattr(self, attr, []).append(res) return res