Source code for nomspectra.metadata

#    Copyright 2022 Volikov Alexander <ab.volikov@gmail.com>
#
#    This file is part of nomspectra. 
#
#    nomspectra 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.
#
#    nomspectra 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 nomspectra.  If not, see <http://www.gnu.org/licenses/>.

from typing import Dict, Optional, Mapping
from collections import UserDict


[docs]class MetaData(UserDict): """ Class for store and processing metadata of spectrum """
[docs] def __init__(self, metadata: Optional[Dict] = None): """ Parameters ---------- metadata: Dict Optional. Default None. To add some data into spectrum metedata. Key must be string. """ if metadata is None: metadata = {} elif isinstance(metadata, Mapping) == False: raise Exception("Metadata must be dictionary, or None") metadata = self._make_uniform(metadata) super().__init__(metadata)
def _make_uniform(self, metadata:Dict) -> Dict: """ Uniform metadata keys Parameters ---------- metadata: Dict Dictonary for uniform Return ------ Dict """ uniform_metadata = {} for key in metadata.keys(): if isinstance(key, str) == False: raise Exception(f"Key in metadata must be string, not {type(key)}") new_key = key.lower().replace(" ","_") uniform_metadata[new_key] = metadata[key] return uniform_metadata
[docs] def add(self, metadata:Mapping) -> None: """ add new fields to metadata dictonary Parameters ---------- metadata: Mapping new fields for adding. For example {'operator':'Alex'} """ if isinstance(metadata, Mapping) == False: raise Exception("Metadata must be dictionary, or None") if metadata is not None: metadata = self._make_uniform(metadata) for key in metadata.keys(): self[key] = metadata[key]
[docs] @staticmethod def combine_two_name(spec1, spec2) -> str: """ combine two names from metadata into one string with '_' as separator Parameters ---------- spec1: Spectrum first spectrum object spec2: Spectrum second spectrum object Return ------ str """ name1 = name2 = '_' if 'name' in spec1.metadata: name1 = spec1.metadata['name'] if 'name' in spec2.metadata: name2 = spec2.metadata['name'] return f"{name1}_{name2}"
if __name__ == '__main__': pass