blob: e17add1d7caf654cf8e50a34a954115021236d8f [file] [log] [blame]
#!/usr/bin/env python
#
# Copyright 2015-2016 IBM Corporation
#
# 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.
#
##
# Helper methods for whisk properties
##
import os
import pkg_resources
WHISK_VERSION_DATE='WHISK_VERSION_DATE'
CLI_API_HOST = 'CLI_API_HOST'
def propfile(base):
if base != '':
filename = '%s/whisk.properties' % base
if os.path.isfile(filename) and os.path.exists(filename):
return filename
else:
parent = os.path.dirname(base)
return propfile(parent) if parent != base else ''
else:
return ''
def importPropsIfAvailable(filename):
thefile = open(filename, 'r') if os.path.isfile(filename) and os.path.exists(filename) else []
return importProps(thefile)
def importDefaultProps():
packagename = 'whisk'
filename = 'default.props'
filepath = os.path.join(os.path.dirname(os.path.realpath(__file__)), filename)
theFile = open(filepath, 'r') if os.path.isfile(filepath) and os.path.exists(filepath) else None
if theFile is None:
try:
theFile = pkg_resources.resource_stream(packagename, filename)
except ImportError:
theFile = None
return importProps(theFile) if theFile is not None else None
def importProps(stream):
props = {}
for line in stream:
parts = line.split('=')
if len(parts) >= 1:
key = parts[0].strip()
if len(parts) >= 2:
val = parts[1].strip()
if key != '' and val != '':
props[key.upper().replace('.','_')] = val
elif key != '':
props[key.upper().replace('.','_')] = ''
return props
def updateProps(key, value, filename):
userProps = importPropsIfAvailable(filename)
userProps[key] = value
writeProps(userProps, filename)
def writeProps(props, filename):
fileHandle = open(filename, 'w')
for key in props:
line = key.upper() + '=' + props[key]
fileHandle.write(line + '\n')
fileHandle.close()
#
# Returns a triple of (length(requiredProperties), requiredProperties, deferredInfo)
# prints a message if a required property is not found
#
def checkRequiredProperties(requiredPropertiesByName, properties):
requiredPropertiesByValue = [ getPropertyValue(key, properties) for key in requiredPropertiesByName ]
requiredProperties = dict(zip(requiredPropertiesByName, requiredPropertiesByValue))
invalidProperties = [ key for key in requiredPropertiesByName if requiredProperties[key] == None ]
deferredInfo = ''
for key, value in requiredProperties.items():
if value == None or value == '':
print 'property "%s" not found in environment or property file' % key
else:
deferredInfo += 'using %(key)s = %(value)s\n' % {'key': key, 'value': value}
return (len(invalidProperties) == 0, requiredProperties, deferredInfo)
def getPropertyValue(key, properties):
evalue = os.environ.get(key)
value = evalue if evalue != None and evalue != '' else properties[key] if key in properties else None
return value
def merge(props1, props2):
props = props1.copy()
props.update(props2)
return props