def __new__(cls, *args, **kwds): """ Decides by type of given clustermetainfo which instance of clusterrepository (general, redhat or comoonics) has to be created. args = (element,doc,options) """ if len(args) >= 1 and isinstance(args[0], basestring): doc=comoonics.XmlTools.parseXMLFile(args[0]) if len(comoonics.XmlTools.evaluateXPath(ComoonicsClusterRepository.getDefaultComoonicsXPath(), doc.documentElement)) > 0: cls = ComoonicsClusterRepository elif len(comoonics.XmlTools.evaluateXPath(RedHatClusterRepository.getDefaultClusterNodeXPath(), doc.documentElement)) > 0: cls = RedHatClusterRepository if len(args) >= 2: if (args[0] != None): if comoonics.XmlTools.evaluateXPath(ComoonicsClusterRepository.getDefaultComoonicsXPath(""), args[0]) or len(args[2]) == 0: cls = ComoonicsClusterRepository elif comoonics.XmlTools.evaluateXPath(RedHatClusterRepository.getDefaultClusterNodeXPath(), args[0]): cls = RedHatClusterRepository elif type(args[2]) == dict: if searchDict(args[2],"osr"): cls = ComoonicsClusterRepository elif searchDict(args[2],RedHatClusterRepository.element_clusternode): cls = RedHatClusterRepository return object.__new__(cls) #, *args, **kwds)
def __new__(cls, *args, **kwds): """ Decides by type of given clustermetainfo which instance of clusterrepository (general, redhat or comoonics) has to be created. args = (element,doc,options) """ if len(args) >= 1 and isinstance(args[0], basestring): doc = comoonics.XmlTools.parseXMLFile(args[0]) if len( comoonics.XmlTools.evaluateXPath( ComoonicsClusterRepository.getDefaultComoonicsXPath(), doc.documentElement)) > 0: cls = ComoonicsClusterRepository elif len( comoonics.XmlTools.evaluateXPath( RedHatClusterRepository.getDefaultClusterNodeXPath(), doc.documentElement)) > 0: cls = RedHatClusterRepository if len(args) >= 2: if (args[0] != None): if comoonics.XmlTools.evaluateXPath( ComoonicsClusterRepository.getDefaultComoonicsXPath( ""), args[0]) or len(args[2]) == 0: cls = ComoonicsClusterRepository elif comoonics.XmlTools.evaluateXPath( RedHatClusterRepository.getDefaultClusterNodeXPath(), args[0]): cls = RedHatClusterRepository elif type(args[2]) == dict: if searchDict(args[2], "osr"): cls = ComoonicsClusterRepository elif searchDict(args[2], RedHatClusterRepository.element_clusternode): cls = RedHatClusterRepository return object.__new__(cls) #, *args, **kwds)
def getClusterRepository(*args, **kwds): """ Factory method to autocreate a fitting cluster repository. The following call semantics are supported: getClusterRepository() => SimpleComoonicsClusterRepository getClusterRepository(filename) => ComoonicsClusterRepository getClusterRepository(docelement, doc, options) => ComoonicsClusterRepository getClusterRepository(filename=filename) => ComoonicsClusterRepository getClusterRepository(clusterconf=filename) => ComoonicsClusterRepository getClusterRepository(maxnodeid=maxnodeid) => SimpleClusterRepository Parses the given filename as configuration to the given cluster or already accept a parsed configuration. Right now only xml.dom.Node representation of the cluster configuration is supported. @param filename: representation of the path to the cluster configuration. If it is a xml file it will be parsed. If not an exception is thrown. @type filename: L{String} @param docelement: the already parse configuration as dom document. @type docelement: L{xml.dom.Element} @param doc: the document itself. @type doc: L{xml.dom.Docuement} @param options: options see ClusterRepository constructor. @type options: L{dict} @return: The best fitting clusterconfiguration repository class instance @rtype: L{ComoonicsClusterRepository}, L{RedHatClusterRepository}, .. """ from comoonics.XmlTools import evaluateXPath from comoonics.DictTools import searchDict import ComClusterRepository # from comoonics.cluster.ComClusterRepository import SimpleComoonicsClusterRepository, ComoonicsClusterRepository, RedHatClusterRepository repositoryclass=ComClusterRepository.SimpleComoonicsClusterRepository clusterconf=None if (args and len(args) >= 1 and isinstance(args[0], basestring)) or (kwds and (kwds.has_key("clusterconf") or kwds.has_key("filename"))): if args and len(args) >= 1 and isinstance(args[0], basestring): clusterconf=args[0] elif kwds.has_key("clusterconf"): clusterconf=kwds.get("clusterconf") del kwds["clusterconf"] elif kwds.has_key("filename"): clusterconf=kwds.get("filename") del kwds["filename"] if clusterconf and os.path.isfile(clusterconf): doc=parseClusterConf(clusterconf) newargs=[doc.documentElement,doc] newargs.extend(args[1:]) args=newargs if len(evaluateXPath(ComClusterRepository.ComoonicsClusterRepository.getDefaultComoonicsXPath(), doc.documentElement)) > 0: repositoryclass = ComClusterRepository.ComoonicsClusterRepository elif len(evaluateXPath(ComClusterRepository.RedHatClusterRepository.getDefaultClusterNodeXPath(), doc.documentElement)) > 0: repositoryclass = ComClusterRepository.RedHatClusterRepository elif len(args) >= 2 or kwds.has_key("element"): if args and args[0]: element=args[0] else: element=kwds.get("element", None) if (element != None): if args and len(args)>=3: options=args[2] else: options=kwds.get("options", {}) if evaluateXPath(ComClusterRepository.ComoonicsClusterRepository.getDefaultComoonicsXPath(""), element) or not options: repositoryclass = ComClusterRepository.ComoonicsClusterRepository elif evaluateXPath(ComClusterRepository.RedHatClusterRepository.getDefaultClusterNodeXPath(), element): repositoryclass = ComClusterRepository.RedHatClusterRepository elif type(args[2]) == dict: if searchDict(args[2],"osr"): repositoryclass = ComClusterRepository.ComoonicsClusterRepository elif searchDict(args[2],ComClusterRepository.RedHatClusterRepository.element_clusternode): repositoryclass = ComClusterRepository.RedHatClusterRepository return repositoryclass(*args, **kwds) #, *args, **kwds)