
# Copyright 2017-present Open Networking Foundation
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.


import sys

class readProperties(object):
    def __init__(self, strPropertiesFile):
        self.strPropertiesFile = strPropertiesFile

    @staticmethod
    def parse_line(input):
        key, value = input.split('=',1)
        key = key.strip()
        value = value.strip()
        return key, value

    @staticmethod
    def getProperties(self):
        data = {}

        with open(self.strPropertiesFile) as fp:
            for line in fp:
                line = line.strip()
                if not line or line.startswith('#') or line.startswith('import'):
                   continue

                key, value = readProperties.parse_line(line)
                data[key] = value

        return data

    def getValueProperties(self, key):
        datas = readProperties.getProperties(self)
        value = datas[key]
        return value

#test
#test = readProperties("testProperties.py")
#test.getValueProperties("CORE_INSTANCES")
