#!/usr/bin/python # -*- coding: utf-8 -*- # --------------------------------------------------------------------------------------------------------- # Author : Ulrich Carmesin # Source : gitea.ucarmesin.de # --------------------------------------------------------------------------------------------------------- import os import basic.program import basic.constants as B import utils.path_const as P import utils.data_const as D import utils.config_tool import utils.path_tool import utils.file_tool import utils.tdata_tool EXP_KEY_MISSING = "key is missing {}" EXP_KEY_DOESNT_EXIST = "key doesnt exist in domain {}" class Catalog: __instance = None """ in this class there should be managed each defined key-value-pairs the pairs ara loaded from the path testdata/catalog: * initially the csv-file catalog.csv * on demand other csv-files in the path """ def __init__(self): self.catalog = {} Catalog.__instance = self pass @staticmethod def getInstance(): if Catalog.__instance == None: return Catalog() return Catalog.__instance def getValue(self, domain, key, job): """ this function gets the value of the domain an key :param domain: :param key: :return: """ if not (isinstance(domain, str) or len(domain) < 1): raise Exception(EXP_KEY_MISSING, (domain, key)) if not (isinstance(key, str) or len(key) < 1): job.m.setError(EXP_KEY_MISSING+" ("+domain+", "+key+")") return "" if domain not in self.catalog: self.readDomain(domain, job) if key not in self.catalog[domain]: job.m.setError(EXP_KEY_DOESNT_EXIST+" ("+domain+", "+key+")") return "" return self.catalog[domain][key] def getKeys(self, domain, job): """ this function gets the value of the domain an key :param domain: :param key: :return: """ if not (isinstance(domain, str) or len(domain) < 1): raise Exception(EXP_KEY_MISSING, (domain)) if domain not in self.catalog: self.readDomain(domain, job) if domain not in self.catalog: return [] out = [] for x in self.catalog[domain].keys(): out.append(x) return out def readDomain(self, domain, job): """ this function reads the domain-entries :param domain: :return: """ if not (isinstance(domain, str) or len(domain) < 1): raise Exception(EXP_KEY_MISSING, (domain)) if domain in self.catalog: return pathname = utils.config_tool.getConfigPath(job, P.KEY_CATALOG, domain) if pathname is None: raise Exception(EXP_KEY_MISSING, (domain)) if pathname[-4:] == ".csv": data = utils.tdata_tool.getCsvSpec(job.m, job, pathname, D.CSV_SPECTYPE_KEYS) else: data = utils.file_tool.readFileDict(job, pathname, job.m) self.catalog[domain] = data[B.DATA_NODE_TABLES][domain][B.DATA_NODE_KEYS] return data def exportXSD(self, domain): """ this function exports the domain into xsd-declaration of simple types :return: """ pass