2025-10-10 09:46:41 +02:00

62 lines
1.6 KiB
Python

"""
pyexcel.internal.attributes
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Book and sheet attributes
:copyright: (c) 2015-2025 by Onni Software Ltd.
:license: New BSD License
"""
from pyexcel import constants
ATTRIBUTE_REGISTRY = {
constants.SHEET: {
constants.READ_ACTION: set(),
constants.WRITE_ACTION: set(),
constants.RW_ACTION: set(),
},
constants.BOOK: {
constants.READ_ACTION: set(),
constants.WRITE_ACTION: set(),
constants.RW_ACTION: set(),
},
}
def register_book_attribute(target, action, attr):
from .meta import BookMeta
register_an_attribute(BookMeta, target, action, attr)
def register_sheet_attribute(target, action, attr):
from .meta import SheetMeta
register_an_attribute(SheetMeta, target, action, attr)
def register_an_attribute(meta_cls, target, action, attr):
"""Register a file type as an attribute"""
if attr in ATTRIBUTE_REGISTRY[target][constants.RW_ACTION]:
# No registration required
return
ATTRIBUTE_REGISTRY[target][action].add(attr)
if action == constants.READ_ACTION:
meta_cls.register_input(attr)
else:
meta_cls.register_presentation(attr)
intersection = (
attr in ATTRIBUTE_REGISTRY[target][constants.READ_ACTION]
and attr in ATTRIBUTE_REGISTRY[target][constants.WRITE_ACTION]
)
if intersection:
ATTRIBUTE_REGISTRY[target][constants.RW_ACTION].add(attr)
ATTRIBUTE_REGISTRY[target][constants.READ_ACTION].remove(attr)
ATTRIBUTE_REGISTRY[target][constants.WRITE_ACTION].remove(attr)
meta_cls.register_io(attr)