def anchor(value, item, formatter): """ anchor method will return a html formated anchor""" if value is None: return u'' if type(item) is dict: item = item['obj'] if ISuperclass.providedBy(value): item = value value = item.ikName try: myAdapter = zapi.queryMultiAdapter((item, formatter.request), name=view) if myAdapter is not None and canAccess(myAdapter,'render'): url = absoluteURL(item, formatter.request) + '/' + view return u'<a href="%s">%s</a>' % (url, value) else: # view = "details.html" myAdapter = zapi.queryMultiAdapter((item, formatter.request), name="details.html") if myAdapter is not None and canAccess(myAdapter,'render'): url = absoluteURL(item, formatter.request) + '/' + "details.html" return u'<a href="%s">%s</a>' % (url, value) else: return u'%s' % (value) except Exception: return u'%s' % (value)
def makeAttributeTable(self): data = [] fields = self.getReportFields() for f_name, f_obj in fields.items(): f_val = getattr(self.context, f_name) namePara = self._convertNamePara(f_obj) if f_val is not None: if f_name in ['user', 'productionState']: token = self._getVocabValue(f_obj.field.vocabularyName, f_val) valPara = self._convertValPara(token) data.append([namePara, valPara]) elif type(f_val) is str or \ type(f_val) is unicode: valPara = self._convertValPara(f_val) data.append([namePara, valPara]) elif ISuperclass.providedBy(f_val): valPara = self._convertValPara(f_val) data.append([namePara, valPara]) else: if type(f_val) is list: valParas = [] for i in f_val: valParas.append(self._convertValPara(i)) if len(valParas) >= 1: data.append([namePara, valParas]) else: valPara = self._convertValPara(f_val) data.append([namePara, valPara]) return data
def handleDelete(self, action): """delete was pressed""" if ISuperclass.providedBy(self.context): parent = self.getContent().__parent__ del parent[self.context.objectID] self.deleted = True self.context = parent url = absoluteURL(parent, self.request) self.request.response.redirect(url)
def traverse4Rpt(self, level, comments): """object pdf report level: indent-level (int 0..) comments: should there comments are in the output? """ if ISuperclass.providedBy(self.context): self.traverse4RptPre(level, comments) self.traverse4RptBody(level, comments) self.traverse4RptPost(level, comments)
def objs(self): """List of Content objects""" retList = [] try: for obj in self.context.values(): if ISuperclass.providedBy(obj): retList.append(obj) except: pass return retList
def handleDelete(self, action): """delete was pressed""" if ISuperclass.providedBy(self.context): parent = self.context.__parent__ del parent[self.context.objectID] self.deleted = True self.context = parent url = absoluteURL(parent, self.request) self.request.response.redirect(url) # workaround for gocept.objectquery import transaction transaction.savepoint()
def handleDelete(self, action): """delete was pressed""" if ISuperclass.providedBy(self.context): parent = self.context.__parent__ parentList = list(parent.items()) oname = [oname for oname, oobj in parentList \ if oobj == self.context][0] del parent[oname] self.deleted = True self.context = parent url = absoluteURL(parent, self.request) self.request.response.redirect(url)
def traverse4Rpt(self, level, comments): """object pdf report level: indent-level (int 0..) comments: should there comments are in the output? """ if ISuperclass.providedBy(self.context): self.traverse4RptPre(level, comments) self.traverse4RptBody(level, comments) self.traverse4RptPost(level, comments) if self.document is not None and \ self.document._reporter is not None: self.document._reporter.alreadyReported[self.context.objectID] = self
def objs(self): """List of Content objects""" objWithPermisson = [] # allObj = getAllUtilitiesRegisteredFor(ISuperclass) # allObj = getAllUtilitiesRegisteredFor(Interface, context=self.context) smFolder = self.context.getParent() allObj = smFolder.values() for obj in allObj: if ISuperclass.providedBy(obj): myAdapter = zapi.queryMultiAdapter((obj, self.request), name='details.html') if myAdapter is not None and canAccess(myAdapter, 'render'): objWithPermisson.append(obj) return objWithPermisson
def getSortKey(self, item, formatter): if ISuperclass.providedBy(self.getter(item, formatter)): key = self.getter(item, formatter).ikName if key is not None: key = key.lower() else: key = u'\xffff' * 80 return key else: key = self.getter(item, formatter) if key is not None: key = key.lower() else: key = u'\xffff' * 80 return key
def traverse4honeydGeneratorBody(self, cfgFile, level=0, comments=True): """graphviz configuration data of/in object """ if comments: print >> cfgFile, "%s## Body (%s,%d) - SupernodeGenHoneyd" % \ ("\t" * level, self.context.__name__, level) its = self.context.items() for (dummy_name, oobj) in its: if ISuperclass.providedBy(oobj): try: adapterGenHoneyd = IIKGenHoneyd(oobj) if adapterGenHoneyd: adapterGenHoneyd.traverse4honeydGenerator( cfgFile, level + 1, comments) except TypeError: logger.error(u"Problem in adaption of honeyd config")
def handleDelete(self, action): """delete was pressed""" self.deleted = False objList = self.getContent().components nameList = [obj.ikName for obj in objList] if len(objList) > 0: self.deleted = False self.status = u"already used in: '%s'" % "' ,'".join(nameList) else: if ISuperclass.providedBy(self.context): parent = self.getContent().__parent__ del parent[self.context.objectID] self.deleted = True self.context = parent url = absoluteURL(parent, self.request) self.request.response.redirect(url)
def traverse4nagiosGeneratorBody(self, fileDict, level=0, comments=True): """graphviz configuration data of/in object """ if comments: print >> fileDict['HostCfg'], \ "%s## Body (%s,%d) - SupernodeGenNagios" % \ ("\t" * level, self.context.ikName, level) its = self.context.items() for (dummy_name, oobj) in its: if ISuperclass.providedBy(oobj): try: adapterGenNagios = IGenNagios(oobj) if adapterGenNagios: adapterGenNagios.traverse4nagiosGenerator( fileDict, level + 1, comments) except TypeError: logger.error(u"Problem in adaption of nagios config")
def traverse4DotGenerator(self, cfgFile, level=0, comments=True, request=None, alreadySeenList=None): """ cfgFile: handle to open file level: indent-level """ if ISuperclass.providedBy(self.context): self.traverse4DotGeneratorPre(cfgFile, level, comments, request, alreadySeenList) self.traverse4DotGeneratorBody(cfgFile, level, comments, request, alreadySeenList) self.traverse4DotGeneratorPost(cfgFile, level, comments, request, alreadySeenList)
def handleDelete(self, action): """delete was pressed""" self.deleted = False if self.getContent().wasUsed: self.deleted = False self.status = u"already used" else: if ISuperclass.providedBy(self.context): sitem = getSiteManager(self) parent = self.getContent().__parent__ sitem.unregisterUtility(component=self.getContent(), provided=IIdChooser, name=self.getContent().ikName) del parent[self.context.objectID] self.deleted = True self.context = parent url = absoluteURL(parent, self.request) self.request.response.redirect(url)
def render(self): """Return the template with the option 'menus'""" objWithPermisson = [] utilManager = getUtility(IUtilManager) smFolder = utilManager.getParent() allObj = smFolder.values() for obj in allObj: if ISuperclass.providedBy(obj): if canAccess(obj, 'ikName'): myAdapter = zapi.queryMultiAdapter((obj, self.request), name='details.html') if myAdapter is not None and canAccess( myAdapter, 'render'): objWithPermisson.append(obj) if len(objWithPermisson) > 0: return self.template() else: return u''
def traverse4nagiosGeneratorBody(self, level=0, comments=True): """graphviz configuration data of/in object """ if comments: self.write("%s## Body (%s,%d) - SupernodeGenNagios" % \ ("\t" * level, self.context.ikName, level)) its = self.context.items() for (dummy_name, oobj) in its: if ISuperclass.providedBy(oobj): try: adapterGenNagios = IGenNagios(oobj) if adapterGenNagios: adapterGenNagios.parentAdapter = self adapterGenNagios.traverse4nagiosGenerator( level + 1, comments) except TypeError, errText: logger.error(u"Problem in nagios adaption: '%s'" % \ errText)
def _convertValPara(self, f_val): if ISuperclass.providedBy(f_val): rptAdapter = IRptPdf(f_val) rptAdapter.request = self.request rptAdapter.document = self.document iText = rptAdapter.getRefTitle() else: # if isOidInCatalog(f_val): # iText = translate(oid2dcTitle(f_val), # domain='org.ict_ok', # context=self.request) # else: iText = translate(unicode(f_val), domain='org.ict_ok', context=self.request) rptPara = RptPara(iText, style=self.document.styles['Normal'], doc=self.document) return rptPara
def getEvaluationsTodo(context): """List of Content objects""" retSet = set([]) my_catalog = zapi.getUtility(ICatalog) if hasattr(context, "requirements"): if context.requirements is not None: for requirement in context.requirements: if ISuperclass.providedBy(requirement): res = my_catalog.searchResults(oid_index=requirement.objectID) else: res = my_catalog.searchResults(oid_index=requirement) if len(res) > 0: startReq = iter(res).next() allObjReqs = getRequirementList(startReq) allObjEvaluations = getEvaluationsDone(context) alreadyCheckedReqs = [ev[0] for ev in allObjEvaluations.items()] #retList.extend(set(allObjReqs).difference(alreadyCheckedReqs)) retSet = retSet.union(set(allObjReqs).difference(alreadyCheckedReqs)) # return retList return list(retSet)
def exportXmlData(self): """get data file for all objects""" #dataStructure = { #'objects': ['a', 'b', 'c'], #'conns': [1, 2, 3], #} dataStructure = { 'objects': [], } its = self.items() for (dummy_name, oobj) in its: if ISuperclass.providedBy(oobj): dataStructure['objects'].append(oobj.ikName) # sitemanger = zapi.getParent(self) # locSitemanager = zapi.getParent(sitemanger) # root_folder = zapi.getParent(locSitemanager) # for folder in root_folder.values(): # for obj in folder.values(): # obj.getAllExportData(dataStructure) python_pickle = pickle.dumps(dataStructure) return toxml(python_pickle)
def generateAllPdf(self, absFilename, authorStr, versionStr): """ will generate a complete pdf report """ files2delete = [] document = RptDocument(absFilename) document.setAuthorName(authorStr) document.setVersionStr(versionStr) its = self.items() for (dummy_name, oobj) in its: if ISuperclass.providedBy(oobj): try: adapterRptPdf = IRptPdf(oobj) if adapterRptPdf: adapterRptPdf.document = document adapterRptPdf.traverse4Rpt(1, False) files2delete.extend(adapterRptPdf.files2delete) del adapterRptPdf except TypeError, errText: logger.error(u"Problem in adaption of pdf report: %s" %\ (errText))
def traverse4RptBody(self, level, comments): """pdf report data of/in object level: indent-level (int 0..) comments: should there comments are in the output? """ if comments: self.writeComment(u"%s## Body (%s,%d) - Product" % \ ("\t" * level, self.context.ikName, level)) its = self.context.subProducts for oobj in its: if ISuperclass.providedBy(oobj): try: adapterRptPdf = IRptPdf(oobj) if adapterRptPdf: adapterRptPdf.document = self.document adapterRptPdf.traverse4Rpt(level + 1, comments) self.files2delete.extend(adapterRptPdf.files2delete) del adapterRptPdf except TypeError, errText: logger.error(u"Problem in adaption: %s (%s)" %\ (errText, oobj.ikName))
def traverse4RptBody(self, level, comments): """xml report data of/in object level: indent-level (int 0..) comments: should there comments are in the output? """ if comments: self.writeComment(u"%s## Body (%s,%d) - SupernodeRptXMLBody" % \ ("\t" * level, self.context.ikName, level)) its = self.context.items() for (dummy_name, oobj) in its: if ISuperclass.providedBy(oobj): try: adapterRptXML = IRptXML(oobj) if adapterRptXML: adapterRptXML.document = self.document adapterRptXML.traverse4Rpt(level + 1, comments) #self.files2delete.extend(adapterRptPdf.files2delete) del adapterRptXML except TypeError, errText: logger.error(u"Problem in adaption: %s (%s)" %\ (errText, oobj.ikName))
def objs(self): """List of Content objects""" return [obj for obj in self.context.values() if ISuperclass.providedBy(obj)]
def update(self): """update all widgets""" if ISuperclass.providedBy(self.context): self.label = self.context.ikName form.Form.update(self)
def appendReqXmlData(self, objects, rootElement): for (dummy_name, oobj) in objects: if ISuperclass.providedBy(oobj): rootElement.append(oobj.asETree())
def allNotifySubscriber(event): if not ISuperclass.providedBy(event.object): return notifierUtil = queryUtility(INotifierUtil) notifierUtil.sendNotify(event, event.object)
def traverse4DotGeneratorBody(self, \ cfgFile, \ level=0, \ comments=True, signalsOutput=False, recursive=True): """Pre-Text in graphviz dot-file""" if comments: print >> cfgFile, "%s// Body (%s,%d) - SupernodeGenGraphvizDot" \ % ("\t" * level, self.context.__name__, level) print >> cfgFile, '%s"%s" [' % ("\t" * level, self.context.objectID) print >> cfgFile, '%sshape="plaintext",' % ("\t" * (level + 1)) print >> cfgFile, '%sstyle="filled,setlinewidth(0)",' \ % ("\t" * (level + 1)) print >> cfgFile, '%sfillcolor = chartreuse2,' % ("\t" * (level + 1)) print >> cfgFile, '%smargin = 0,' % ("\t" * (level + 1)) print >> cfgFile, '%shref = "%s/@@details.html",' \ % ("\t" * (level + 1), zapi.getPath(self.context)) #print >> cfgFile, '%slabel = <<TABLE BORDER = "0" CELLBORDER = "0" ' \ #'CELLPADDING = "0" CELLSPACING = "0"><TR><TD>' \ #'<IMG SRC = "/home/markus/Projekte/IKOMtrol-hp/apple-red.png"/>' \ #'</TD></TR><TR><TD><FONT FACE = "Arial" POINT-SIZE = "10">%s' \ #'</FONT></TD></TR></TABLE>>' \ #% ("\t" * (level + 1), self.context.ikName) print >> cfgFile, '%slabel = <' % ("\t" * (level + 1)) print >> cfgFile, '%s<TABLE BORDER="0" CELLBORDER="1" CELLPADDING = "2" CELLSPACING = "0">' % ( "\t" * (level + 1)) print >> cfgFile, '%s<TR><TD WIDTH="120px">%s</TD></TR>' % ( "\t" * (level + 1), self.context.ikName) if signalsOutput: allInpNamesDict = self.context.getAllInpEventNames() for inpName in allInpNamesDict.keys(): print >> cfgFile, '%s<TR><TD ALIGN="LEFT" PORT="%s" '\ 'BGCOLOR="yellow">%s</TD></TR>' % \ ("\t" * (level + 1), inpName, inpName) allOutNamesDict = self.context.getAllOutEventNames() for outName in allOutNamesDict.keys(): print >> cfgFile, '%s<TR><TD ALIGN="RIGHT" PORT="%s" '\ 'BGCOLOR="orange">%s</TD></TR>' % \ ("\t" * (level + 1), outName, outName) #print >> cfgFile, '%s<TR><TD ALIGN="LEFT" PORT="sig_inp1" BGCOLOR="yellow">sig_inp1</TD></TR>' % ("\t" * (level + 1)) #print >> cfgFile, '%s<TR><TD ALIGN="LEFT" PORT="sig_inp2" BGCOLOR="yellow">sig_inp2</TD></TR>' % ("\t" * (level + 1)) #print >> cfgFile, '%s<TR><TD ALIGN="RIGHT" PORT="sig_out1" BGCOLOR="orange">sig_out1</TD></TR>' % ("\t" * (level + 1)) print >> cfgFile, '%s</TABLE>>' % ("\t" * (level + 1)) print >> cfgFile, '%s]; // %s' % ("\t" * level, self.context.__name__) if recursive: its = self.context.items() else: its = [] for (dummy_name, oobj) in its: if ISuperclass.providedBy(oobj): try: adapterGenGraphvizDot = IGenGraphvizDot(oobj) if adapterGenGraphvizDot: adapterGenGraphvizDot.setParent(self.context) adapterGenGraphvizDot.traverse4DotGenerator(\ cfgFile, level + 1, comments, signalsOutput) except TypeError, err: logging.error("Error in AdmUtilGraphviz::getRootDot()"\ % err)
def sendNotify(self, notifyEvent=None, notifyObj=None): """ sending the real notification to the user """ print "NotifierEmail::sendNotify(%s, %s)" % (notifyEvent, notifyObj) pau_utility = getUtility(IAuthentication) en_utility = getUtility(IMailDelivery, 'ikEmailNotifierQueue') toList = [] toShortList = [] if pau_utility and pau_utility.has_key('principals'): principals = pau_utility['principals'] for (name, obj) in principals.items(): #print "v" * 60 #print "principal_name: %s" % name principal_id = principals.prefix + name #print "principal_id: %s" % principal_id notifDict = getNotifierDict4User(principal_id) #returns: #{'timezone': None, #'email': None, #'notifierChannels': None, #'notifierLevel': None, #'shortEmail': None, #'shortNotifierChannels': None, #'shortNotifierLevel': None, #'shortEmail': None, #} #print "notifDict: %s" % notifDict #print "notifyEvent.channels", notifyEvent.channels #print "notifyEvent.level", notifyEvent.level # long email #print "email: %s" % notifDict['email'] if notifDict['email'] is not None \ and len(notifDict['email']) > 0 \ and notifyEvent is not None \ and notifyEvent.channels is not None \ and notifyEvent.level is not None \ and notifDict['notifierChannels'] is not None \ and (notifyEvent.level >= notifDict['notifierLevel']) \ and (len(set(notifDict['notifierChannels'])\ .intersection(notifyEvent.channels)) > 0): toList.append(notifDict['email']) # short email #print "shortEmail: %s" % notifDict['shortEmail'] if notifDict['shortEmail'] is not None \ and len(notifDict['shortEmail']) > 0: toShortList.append(notifDict['shortEmail']) if notifDict['shortEmail'] is not None \ and len(notifDict['shortEmail']) > 0 \ and notifyEvent is not None \ and notifyEvent.channels is not None \ and notifyEvent.level is not None \ and notifDict['shortNotifierChannels'] is not None \ and (notifyEvent.level >= notifDict['shortNotifierLevel']) \ and (len(set(notifDict['shortNotifierChannels'])\ .intersection(notifyEvent.channels)) > 0): toShortList.append(notifDict['shortEmail']) #print "^" * 60 #if en_utility: #en_utility.send("aaa", [email], "ccc_msg") #email = pr_anno_utility.getAnnotationsById(principal_id).data['org.ict_ok.admin_utils.usermanagement']['email'] #print "email: %s" % email #dddd2 = AdmUtilUserManagement(obj) #print "dddd2: %s" % dddd2 #print "dddd2.email: %s" % dddd2.email print "toList: ", toList print "toShortList: ", toShortList if en_utility: if len(toList) > 0: filename = datetime.now().strftime('ictrpt_%Y%m%d%H%M%S.pdf') f_handle, f_name = tempfile.mkstemp(filename) #authorStr = self.request.principal.title authorStr = notifyLabel #from zope.i18n.locales import LocaleDates #dates = LocaleDates() #my_formatter = dates.getFormatter('dateTime', 'full') #my_formatter = self.request.locale.dates.getFormatter( #'dateTime', 'medium') #userTZ = getUserTimezone() #userTZ = getUserTimezone() #longTimeString = my_formatter.format(\ #userTZ.fromutc(datetime.utcnow())) #longTimeString = my_formatter.format(\ #datetime.utcnow()) #versionStr = "%s [%s]" % (longTimeString, getIkVersion()) versionStr = "[%s]" % (getIkVersion()) if ISuperclass.providedBy(notifyEvent.object): notifyEvent.object.generatePdf(\ f_name, authorStr, versionStr) else: self.generatePdf(f_name, authorStr, versionStr) for rcpt in set(toList): msg = MIMEMultipart() msg['To'] = rcpt msg['From'] = self.from_addr msg['Subject'] = '[%s] %s' % (str(notifyLabel), notifyEvent.subject) msg['Date'] = Utils.formatdate(localtime=1) msg['Message-ID'] = Utils.make_msgid() if type(notifyEvent.object) == type("") or \ type(notifyEvent.object) == type(""): outText = notifyEvent.object else: if ISuperclass.providedBy(notifyEvent.object): outText = u"System: '%s': state changed" % \ (notifyEvent.object.ikName) else: outText = u"unknown object type in ict-ok.org instance" body = MIMEText(outText, _subtype='plain', _charset='latin-1') msg.attach(body) datafile = open(f_name, "r") msg.attach(self.attachment(filename, datafile)) datafile.close() en_utility.send(self.from_addr, [rcpt], msg.as_string()) #print "self.from_addr: ", self.from_addr #print "toList: ", toList #print "msg.as_string(): ", msg.as_string() os.remove(f_name) for rcpt in set(toShortList): msg = MIMEMultipart() msg['To'] = rcpt msg['From'] = self.from_addr msg['Subject'] = '[%s] %s' % (str(notifyLabel), notifyEvent.subject) msg['Date'] = Utils.formatdate(localtime=1) msg['Message-ID'] = Utils.make_msgid() if type(notifyEvent.object) == type("") or \ type(notifyEvent.object) == type(""): outText = notifyEvent.object else: if ISuperclass.providedBy(notifyEvent.object): outText = u"System: '%s': state changed" % \ (notifyEvent.object.ikName) else: outText = u"unknown object type in ict-ok.org instance" body = MIMEText(outText, _subtype='plain', _charset='latin-1') msg.attach(body) en_utility.send(self.from_addr, [rcpt], msg.as_string())