Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F82952158
lowercase_btree.py
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Sat, Sep 14, 09:55
Size
2 KB
Mime Type
text/x-python
Expires
Mon, Sep 16, 09:55 (2 d)
Engine
blob
Format
Raw Data
Handle
20779138
Attached To
R3127 blackdynamite
lowercase_btree.py
View Options
#!/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
Log In to Comment