#============================================================================
#Name : gscm.py
#Part of : Helium
#Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
#All rights reserved.
#This component and the accompanying materials are made available
#under the terms of the License "Eclipse Public License v1.0"
#which accompanies this distribution, and is available
#at the URL "http://www.eclipse.org/legal/epl-v10.html".
#
#Initial Contributors:
#Nokia Corporation - initial contribution.
#
#Contributors:
#
#Description:
#===============================================================================
""" Wrapper module that get CCM info using GSCM framework. """
import logging
import os
import subprocess
import pkg_resources
import tempfile
# Uncomment this line to enable logging in this module, or configure logging elsewhere
#logging.basicConfig(level=logging.DEBUG)
_logger = logging.getLogger("gscm")
def _execute(command):
""" Runs a command and returns the result data. """
process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
output = process.stdout.read()
process.wait()
status = process.returncode
return (output, status)
def __get_gscm_info(method, dbname):
""" Generic method that call function 'method' on GSCM wrapper script. """
(f_desc, filename) = tempfile.mkstemp()
f_file = os.fdopen(f_desc, 'w')
f_file.write(pkg_resources.resource_string(__name__, "get_gscm_info.pl"))# pylint: disable=E1101
f_file.close()
command = "perl " + filename
command += " %s %s" % (method, dbname)
_logger.debug("Running command: %s" % command)
(output, status) = _execute(command)
_logger.debug("Status: %s" % status)
_logger.debug("Output: %s" % output)
if status == 0 or status == None and not ("Can't locate" in output):
_logger.debug("Returning output")
return output.strip()
if not 'HLM_SUBCON' in os.environ:
_logger.debug("Raising exception")
raise IOError("Error retrieving get_db_path info for '%s' database.\nOUTPUT:%s" % (dbname, output.strip()))
return None
def get_db_path(dbname):
""" Returns the database path for dbname database. """
_logger.debug("get_db_path: %s" % dbname)
return __get_gscm_info('get_db_path', dbname)
def get_router_address(dbname):
""" Returns the database router address for dbname database. """
_logger.debug("get_router_address: %s" % dbname)
return __get_gscm_info('get_router_address', dbname)
def get_engine_host(dbname):
""" Returns the database engine host for dbname database. """
_logger.debug("get_engine_host: %s" % dbname)
return __get_gscm_info('get_engine_host', dbname)