Source code for solcore.source_managed_class
"""
Another short python 3.4 travesty by Markus.
Updated by Diego
"""
from configparser import ConfigParser
from solcore.singleton import Singleton
from typing import Optional
[docs]class SourceManagedClassDeprecated(metaclass=Singleton):
""" Base class that manages the sources of Solcore, from the materials to the unit conversion system.
It must be defined as a derived class from Singleton so only one instance of this class containing all sources
exists at any time.
"""
def __init__(self):
""" Constructor of the class. """
self.sources = {}
self.initialise_cache()
[docs] def add_source(self, name, path):
""" Read a materials database file in ConfigParser format with case-sensitive options. """
self.sources[name] = path
self.read(name)
[docs] def remove_source(self, name, reread=True):
""" Removes a source from the database. """
del self.sources[name]
if reread:
self.read()
[docs] def read(self, name=None):
""" Reads the sources and add its contents to the database. """
if name is None:
self.initialise_cache()
for sourcename in self.sources.keys():
self.database.read(self.sources[sourcename], encoding='utf-8')
else:
self.database.read(self.sources[name], encoding='utf-8')
[docs] def initialise_cache(self):
""" Initialises th database, kept in a ConfigParser format. Quite convenient if you think about it. """
self.database = ConfigParser()
# Normally the config parser converts options to lower case; this preserves case.
self.database.optionxform = str
[docs]class SourceManagedClass(metaclass=Singleton):
""" Base class that manages the sources of Solcore. """
def __init__(self, sources: dict):
""" Constructor of the class. """
self.sources = sources
self.database = ConfigParser()
self.database.optionxform = str
self.database.read(self.sources.values(), encoding='utf-8')
[docs] def read(self, source: Optional[str] = None, value: Optional[str] = None):
""" Updates the information in the database. """
if source is not None and value is not None:
self.sources[source] = value
self.database.read(value, encoding='utf-8')
elif source in self.sources and value is None:
del self.sources[source]
self.database.read(self.sources.values(), encoding='utf-8')
else:
self.database.read(self.sources.values(), encoding='utf-8')