Package ZenRelations :: Module utils
[hide private]
[frames] | no frames]

Source Code for Module ZenRelations.utils

 1  ########################################################################### 
 2  # 
 3  # This program is part of Zenoss Core, an open source monitoring platform. 
 4  # Copyright (C) 2007, Zenoss Inc. 
 5  # 
 6  # This program is free software; you can redistribute it and/or modify it 
 7  # under the terms of the GNU General Public License version 2 as published by 
 8  # the Free Software Foundation. 
 9  # 
10  # For complete information please visit: http://www.zenoss.com/oss/ 
11  # 
12  ########################################################################### 
13  from Exceptions import ZenImportError 
14   
15 -def importClass(classpath, baseModule=None):
16 """lookup a class by its path use baseModule path if passed""" 17 import sys 18 if baseModule: classpath = ".".join((baseModule, classpath)) 19 parts = classpath.split('.') 20 try: 21 mod = __import__(classpath) 22 mod = sys.modules[classpath] 23 except (ImportError, KeyError): 24 try: 25 base = ".".join(parts[:-1]) 26 mod = __import__(base) 27 mod = sys.modules[base] 28 except: 29 raise ZenImportError("failed importing class %s" % classpath) 30 return getattr(mod, parts[-1], mod)
31 32
33 -def importClasses(basemodule=None, skipnames=()):
34 """ 35 import all classes listed in baseModule in the variable productNames 36 and return them in a list. Assume that classes are defined in a file 37 with the same name as the class. 38 """ 39 classList = [] 40 mod = __import__(basemodule) 41 for comp in basemodule.split(".")[1:]: 42 mod = getattr(mod, comp) 43 for prodname in mod.productNames: 44 if prodname in skipnames: continue 45 classdef = importClass(prodname, basemodule) 46 classList.append(classdef) 47 return classList
48 49
50 -class ZenRelationshipNameChooser(object):
51 """ 52 Adapts a ZenRelation to find a unique id. 53 """
54 - def __init__(self, context):
55 self.context = context
56
57 - def chooseName(self, name):
58 """ 59 Create an id. 60 """ 61 dot = name.rfind('.') 62 if dot >= 0: 63 suffix = name[dot:] 64 name = name[:dot] 65 else: 66 suffix = '' 67 n = name + suffix 68 i = 1 69 inuse = self.context.objectIdsAll() 70 while n in inuse: 71 i += 1 72 n = name + str(i) + suffix 73 return str(n)
74