Source code for dimspy.models.peaklist_metadata

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# Copyright © 2017-2020 Ralf Weber, Albert Zhou.
#
# This file is part of DIMSpy.
#
# DIMSpy is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# DIMSpy is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with DIMSpy.  If not, see <https://www.gnu.org/licenses/>.
#


# DO NOT try metadata.metadata.attr.
# All attribute methods overrided
[docs]class PeakList_Metadata(dict): """ The PeakList_Metadata class. Dictionary-like container for PeakList metadata storage. :param args: Iterable object of key-value pairs :param kwargs: Metadata key-value pairs >>> PeakList_Metadata([('name', 'sample_1'), ('qc', False)]) >>> PeakList_Metadata(name = 'sample_1', qc = False) metadata attributes can be accessed in both dictionary-like and property-like manners. >>> meta = PeakList_Metadata(name = 'sample_1', qc = False) >>> meta['name'] sample_1 >>> meta.qc False >>> del meta.qc >>> meta.has_key('qc') False .. warning:: The *__getattr__*, *__setattr__*, and *__delattr__* methods are overrided. **DO NOT** assign a metadata object to another metadata object, e.g., metadata.metadata.attr = value. """ def __getattr__(self, item): return self[item] if item in self else super().__getattribute__(item) def __setattr__(self, item, value): if item == '__dict__': raise ValueError('"__dict__" is not an acceptable metadata key') if type(value) == PeakList_Metadata: raise ValueError('metadata object is not an acceptable metadata value') if item not in self.__dict__: self[item] = value else: super().__setattr__(item, value) def __delattr__(self, item): if item in self: del self[item] else: super().__delattr__(item)