Page MenuHomec4science

lowercase_btree.py
No OneTemporary

File Metadata

Created
Sat, Sep 14, 09:55

lowercase_btree.py

#!/usr/bin/env python3
from . import bdlogging
################################################################
import BTrees
import persistent
################################################################
print = bdlogging.invalidPrint
logger = bdlogging.getLogger(__name__)
BTree = BTrees.OOBTree.BTree
################################################################
class LowerCaseBTree(object):
def __init__(self):
self.entries = BTree()
def __delitem__(self, attr):
del self.entries[attr.lower()]
def __getattr__(self, attr):
if 'entries' not in self.__dict__:
raise AttributeError(attr)
key = attr.lower()
if isinstance(key, str) and key[:5] == 'index':
key = int(key[5:])
# logger.error(key)
# logger.error(self.entries)
# logger.error(self.entries.__dir__())
try:
if key in self.entries:
return self.entries[key]
else:
# logger.error(attr)
raise AttributeError(attr)
except TypeError:
# logger.error(attr)
raise AttributeError(attr)
def __setattr__(self, attr, value):
key = attr.lower()
if key == 'entries':
try:
object.__setattr__(self, key, value)
except TypeError:
persistent.Persistent.__setattr__(self, key, value)
# logger.error(f"set attr {attr} {value}")
entries = self.entries
# logger.error(f"set attr {[ e for e in entries.keys()]}")
if key in entries:
# logger.error(f"set attr in entries {attr} {value}")
self.__setitem__(attr, value)
else:
try:
object.__setattr__(self, attr, value)
except TypeError:
persistent.Persistent.__setattr__(self, attr, value)
def __getitem__(self, index):
if isinstance(index, str):
index = index.lower()
return self.entries[index]
def keys(self):
return self.entries.keys()
def __iter__(self):
return self.entries.__iter__()
def __setitem__(self, index, value):
if isinstance(index, str):
index = index.lower()
self.entries[index] = value
def items(self):
# logger.error(f'{[e for e in self.entries.items()]}')
return self.entries.items()
def __deepcopy__(self, memo):
cp = LowerCaseBTree()
for k, v in self.entries.items():
cp.entries[k] = v
return cp
def setEntries(self, params):
for p, val in params.items():
if p in self.types:
self.entries[p] = val
def __dir__(self):
return ([e for e in self.entries.keys() if type(e) == str] +
[f'index{e}' for e in self.entries.keys() if type(e) == int])
################################################################

Event Timeline