Ejemplo n.º 1
0
def kozoTransport(transport, transportName, nodeName):
    global _transports
    if transport in _transports:
        return _transports[transport]
    transportFile = None
    paths = [os.path.dirname(os.path.abspath(__file__))]
    if 'KOZOTRANSPORTPATH' in os.environ:
        paths.extend(os.environ['KOZOTRANSPORTPATH'].split(':'))
    if kozoConfig('transportPath'):
        paths.extend(kozoConfig('transportPath').split(':'))
    for path in paths:
        if os.path.isdir(path) and os.path.isfile(path + os.sep + transport +
                                                  '.py'):
            transportFile = path + os.sep + transport + '.py'
            break
    if transportFile is None:
        raise KozoError('Could not find transport:', transport, paths)
    importPaths = kozoConfig('importPath').split(':')
    if 'KOZOIMPORTPATH' in os.environ:
        importPaths.extend(os.environ['KOZOIMPORTPATH'].split(':'))
    try:
        transportData = _importFile(
            transportFile, extraPaths=filter(lambda p: p, importPaths))
    except BaseException as e:
        raise KozoError('Error while trying to import transport',
                        transportFile, e)
    if 'transportInfo' not in transportData.__dict__:
        raise KozoError('transportInfo not found in', transportFile)
    if type(transportData.transportInfo) is not type({}):
        raise KozoError('transportInfo is not a dictionary in', transportFile)
    for key in ('format', 'class', 'config'):
        if key not in transportData.transportInfo:
            raise KozoError(transportFile, '- Key not found in transportInfo:',
                            key)
    if transportData.transportInfo['format'] != '1.0':
        raise KozoError(transport, 'has unsupported transport format',
                        transportData.transportInfo['format'])
    transportClass = transportData.transportInfo['class']
    transportDefaultConfig = {'type': transport}
    transportConfigRequired = []
    for key in transportData.transportInfo['config']:
        if 'default' in transportData.transportInfo['config'][key]:
            transportDefaultConfig[key] = transportData.transportInfo[
                'config'][key]['default']
        else:
            transportConfigRequired.append(key)
    transportClass._transportConfig = transportDefaultConfig
    transportClass._transportConfigRequired = transportConfigRequired
    _transports[transport] = transportClass
    return transportClass
Ejemplo n.º 2
0
def kozoRole(role, roleName, nodeName):
	global _roles
	if role in _roles:
		return _roles[role]
	roleFile = None
	paths = [os.path.dirname(os.path.abspath(__file__))]
	if 'KOZOROLEPATH' in os.environ:
		paths.extend(os.environ['KOZOROLEPATH'].split(':'))
	if kozoConfig('rolePath'):
		paths.extend(kozoConfig('rolePath').split(':'))
	for path in paths:
		if os.path.isdir(path) and os.path.isfile(path + os.sep + role + '.py'):
			roleFile = path + os.sep + role + '.py'
			break
	if roleFile is None:
		raise KozoError('Could not find role:', role, paths)
	importPaths = kozoConfig('importPath').split(':')
	if 'KOZOIMPORTPATH' in os.environ:
		importPaths.extend(os.environ['KOZOIMPORTPATH'].split(':'))
	try:
		roleData = _importFile(roleFile, extraPaths=filter(lambda p: p, importPaths))
	except BaseException as e:
		raise KozoError('Error while trying to import role', roleFile, e)
	if 'roleInfo' not in roleData.__dict__:
		raise KozoError('roleInfo not found in', roleFile)
	if type(roleData.roleInfo) is not type({}):
		raise KozoError('roleInfo is not a dictionary in', roleFile)
	for key in ('format', 'class', 'config'):
		if key not in roleData.roleInfo:
			raise KozoError(roleFile, '- Key not found in roleInfo:', key)
	if roleData.roleInfo['format'] != '1.0':
		raise KozoError(role, 'has unsupported role format', roleData.roleInfo['format'])
	roleClass = roleData.roleInfo['class']
	roleDefaultConfig = {'type': role}
	roleConfigRequired = []
	for key in roleData.roleInfo['config']:
		if 'default' in roleData.roleInfo['config'][key]:
			roleDefaultConfig[key] = roleData.roleInfo['config'][key]['default']
		else:
			roleConfigRequired.append(key)
	roleClass._roleConfig = roleDefaultConfig
	roleClass._roleConfigRequired = roleConfigRequired
	_roles[role] = roleClass
	return roleClass