예제 #1
0
 def exportCsvData(self):
     """get CSV file for all folder objects"""
     fields = self.fields
     attrList = [fname for fname, fval in fields.items()]
     writerFile = os.tmpfile()
     writer = csv.writer(writerFile,
                         delimiter=';',
                         quoting=csv.QUOTE_NONNUMERIC)
     writer.writerow(attrList)
     itemList = self.context.items()
     for item_n, item_v in itemList:
         valueList = []
         for attr in attrList:
             value = getattr(item_v, attr)
             valueList.append(value)
         writer.writerow(valueList)
     writerFile.seek(0)
     tmpText = writerFile.read()
     #writerFile.close()
     self.request.response.setHeader('Content-Type',
                                     'application/vnd.ms-excel')
     self.request.response.setHeader(\
         'Content-Disposition',
         'attachment; filename=\"%s.csv\"' % self.attrInterface.__name__)
     setNoCacheHeaders(self.request.response)
     return tmpText
예제 #2
0
 def exportXmlData(self):
     """
     export data as XML to the web browser
     """
     from zope.xmlpickle import toxml
     import pickle
     obj = self.context
     pickleAdapter = IPickle(obj)
     if pickleAdapter:
         self.request.response.setHeader('Content-Type',
                                         'application/ict-xml')
         filename = datetime.now().strftime('ictxml_%Y%m%d%H%M%S.xml')
         self.request.response.setHeader(
             'Content-Disposition',
             'attachment; filename=\"%s\"' % filename)
         setNoCacheHeaders(self.request.response)
         pickleDump = pickle.dumps(pickleAdapter.exportAsDict())
         #return xmlEscapeWithCData(
         ##u'<?xml version="1.0" encoding="ISO-8859-1"?>'
         ##u'<datadump>%s</datadump>',
         #toxml(pickleDump))
         #return pprint.pformat(pickleAdapter.exportAsDict(), \
         #width=60, depth=6)
         return toxml(pickleDump)
     else:
         return _(u"no pickle adapter")
예제 #3
0
    def profiler_exportXlsData(self,
                               sheetName=u'ict',
                               wbook=None,
                               filename='ict.xls'):
        """get XLS file for all folder objects"""
        import cProfile, pstats

        #        (filename, dataMem) = self.context.exportXlsData(self.request,
        #                                                         sheetName=sheetName,
        #                                                         wbook=wbook)

        print - ---------------------------------1
        pr = cProfile.Profile()
        print - ---------------------------------2
        (filename, dataMem) = pr.runcall(self.context.exportXlsData,
                                         self.request,
                                         sheetName=sheetName,
                                         wbook=wbook)
        pr.print_stats()
        print - ---------------------------------3
        #        p = pstats.Stats('cprof.out')
        #        p.sort_stats('time').print_stats(10)

        self.request.response.setHeader('Content-Type',
                                        'application/vnd.ms-excel')
        self.request.response.setHeader(\
            'Content-Disposition',
            'attachment; filename=\"%s\"' % filename)
        setNoCacheHeaders(self.request.response)
        return dataMem
예제 #4
0
 def reportPdfByObjectList(self, objsList):
     filename = datetime.now().strftime('ictrpt_%Y%m%d%H%M%S.pdf')
     f_handle, f_name = tempfile.mkstemp(filename)
     authorStr = self.request.principal.title
     my_formatter = self.request.locale.dates.getFormatter(
         'dateTime', 'medium')
     userTZ = getUserTimezone()
     longTimeString = my_formatter.format(\
         userTZ.fromutc(datetime.utcnow()))
     versionStr = "%s [%s]" % (longTimeString, getIkVersion())
     thisReporter = PDFReporter(f_name, self.request)
     thisReporter.setAuthorName(authorStr)
     thisReporter.setVersionStr(versionStr)
     # first run
     for (queryName, queryResults) in objsList:
         thisReporter.extendAllContentObjects(queryResults)
     # second run
     for (queryName, queryResults) in objsList:
         thisReporter.appendTitle1(queryName)
         thisReporter.append(queryResults)
     # debug output
     #for i_obj in thisReporter.allContentObjects:
     #    print "%s (%s)" % (i_obj.ikName, i_obj.objectID)
     thisReporter.buildPdf()
     thisReporter.cleanup()
     self.request.response.setHeader('Content-Type', 'application/pdf')
     self.request.response.setHeader(\
         'Content-Disposition',
         'attachment; filename=\"%s\"' % filename)
     setNoCacheHeaders(self.request.response)
     datafile = open(f_name, "r")
     dataMem = datafile.read()
     datafile.close()
     os.remove(f_name)
     return dataMem
예제 #5
0
 def exportReqXmlData(self):
     """get xml file for all objects"""
     self.request.response.setHeader('Content-Type', 'application/x-ict-ok-data')
     self.request.response.setHeader(\
         'Content-Disposition',
         'attachment; filename=\"%s.xml\"' % self.context.objectID)
     setNoCacheHeaders(self.request.response)
     return self.context.exportReqXmlData()
예제 #6
0
 def children(self):
     """ """
     container = self.context
     self.request.response.setHeader('content-type',
                                     'text/xml;charset=utf-8')
     setNoCacheHeaders(self.request.response)
     res = (u'<?xml version="1.0" ?><children> %s </children>'
             % self.children_utility(container))
     return res
예제 #7
0
 def download(self):
     upfile = removeAllProxies(self.context.file)
     if self.request is not None:
         self.request.response.setHeader('Content-Type',
                                         self.context.contentType)
         self.request.response.setHeader('Content-Length', upfile.getSize())
         self.request.response.setHeader(\
             'Content-Disposition',
             u'attachment; filename=\"%s\"' % self.context.filename)
     setNoCacheHeaders(self.request.response)
     return upfile.openDetached()
예제 #8
0
 def exportAllXlsData(self):
     """get XLS file for all folder objects"""
     supervisor = getUtility(IAdmUtilSupervisor, name='AdmUtilSupervisor')
     (filename, dataMem) = supervisor.exportAllXlsData(self.request)
     self.request.response.setHeader('Content-Type',
                                     'application/vnd.ms-excel')
     self.request.response.setHeader(\
         'Content-Disposition',
         'attachment; filename=\"%s\"' % filename)
     setNoCacheHeaders(self.request.response)
     return dataMem
예제 #9
0
 def getCmapxText(self):
     """get dot file and convert to client side image map
     """
     utilGraphviz = queryUtility(IAdmUtilGraphviz, name='AdmUtilGraphviz')
     my_formatter = self.request.locale.dates.getFormatter(
         'dateTime', 'medium')
     userTZ = getUserTimezone()
     longTimeString = my_formatter.format(\
         userTZ.fromutc(datetime.utcnow()))
     versionStr = "%s [%s]" % (longTimeString, getIkVersion())
     setNoCacheHeaders(self.request.response)
     return utilGraphviz.getCmapxText(self.context, self.request)
예제 #10
0
 def exportXlsData(self, sheetName=u'ict', wbook=None, filename='ict.xls'):
     """get XLS file for all folder objects"""
     (filename, dataMem) = self.context.exportXlsData(self.request,
                                                      sheetName=sheetName,
                                                      wbook=wbook)
     self.request.response.setHeader('Content-Type',
                                     'application/vnd.ms-excel')
     self.request.response.setHeader(\
         'Content-Disposition',
         'attachment; filename=\"%s\"' % filename)
     setNoCacheHeaders(self.request.response)
     return dataMem
예제 #11
0
 def children(self):
     """ """
     print "children"
     container = self.context
     self.request.response.setHeader('content-type',
                                     'text/xml;charset=utf-8')
     setNoCacheHeaders(self.request.response)
     if self.request.get('view', None):
         res = (u'<?xml version="1.0" ?><children> %s </children>' %
                self.getViewList(container))
     else:
         res = (u'<?xml version="1.0" ?><children> %s </children>' %
                self.children_utility(container))
     return res
예제 #12
0
 def getPngFile(self):
     """get dot file and convert to png
     """
     utilGraphviz = queryUtility(IAdmUtilGraphviz, name='AdmUtilGraphviz')
     my_formatter = self.request.locale.dates.getFormatter(
         'dateTime', 'medium')
     userTZ = getUserTimezone()
     longTimeString = my_formatter.format(\
         userTZ.fromutc(datetime.utcnow()))
     versionStr = "%s [%s]" % (longTimeString, getIkVersion())
     self.request.response.setHeader('Content-Type', 'image/png')
     filename = "graphviz_%s.png" % self.context.ikName
     self.request.response.setHeader(\
         'Content-Disposition',
         'attachment; filename=\"%s\"' % filename)
     setNoCacheHeaders(self.request.response)
     return utilGraphviz.getPngFile(self.context, self.request)
예제 #13
0
 def graphvizAll(self):
     """
     will send the complete dot report to the browser
     """
     utilGraphviz = queryUtility(IAdmUtilGraphviz, name='AdmUtilGraphviz')
     my_formatter = self.request.locale.dates.getFormatter(
         'dateTime', 'medium')
     userTZ = getUserTimezone()
     longTimeString = my_formatter.format(\
         userTZ.fromutc(datetime.utcnow()))
     versionStr = "%s [%s]" % (longTimeString, getIkVersion())
     #self.request.response.setHeader('Content-Type', 'image/png')
     #filename = "*.png"
     #self.request.response.setHeader(\
     #'Content-Disposition',
     #'attachment; filename=\"%s\"' % filename)
     setNoCacheHeaders(self.request.response)
     return utilGraphviz.getCmapxText(self.context, self.request)
예제 #14
0
 def generateTestPdf(self):
     """
     will generate a test pdf file
     """
     filename = datetime.now().strftime('ictrpt_%Y%m%d%H%M%S.pdf')
     f_handle, f_name = tempfile.mkstemp(".pdf", filename)
     from org.ict_ok.admin_utils.reports import rpt_test01
     rpt_t01 = rpt_test01.RptTest01(f_name)
     rpt_t01.outPdf()
     self.request.response.setHeader('Content-Type', 'application/pdf')
     self.request.response.setHeader(\
         'Content-Disposition',
         'attachment; filename=\"%s\"' % filename)
     setNoCacheHeaders(self.request.response)
     datafile = open(f_name, "r")
     dataMem = datafile.read()
     datafile.close()
     os.remove(f_name)
     return dataMem
예제 #15
0
 def reportPdfByQueryList(self, queryList):
     filename = datetime.now().strftime('ictrpt_%Y%m%d%H%M%S.pdf')
     f_handle, f_name = tempfile.mkstemp(filename)
     authorStr = self.request.principal.title
     my_formatter = self.request.locale.dates.getFormatter(
         'dateTime', 'medium')
     userTZ = getUserTimezone()
     longTimeString = my_formatter.format(\
         userTZ.fromutc(datetime.utcnow()))
     versionStr = "%s [%s]" % (longTimeString, getIkVersion())
     connection = IConnection(removeSecurityProxy(self.context))
     parser = RPEQueryParser()
     oc = connection.root()['_oq_collection']
     thisReporter = PDFReporter(f_name, self.request)
     thisReporter.setAuthorName(authorStr)
     thisReporter.setVersionStr(versionStr)
     queryproc = QueryProcessor(parser, oc)
     import pdb
     pdb.set_trace()
     queryResultsList = [(queryn, queryproc(queryv))
                         for (queryn, queryv) in queryList]
     # first run
     for (queryName, queryResults) in queryResultsList:
         thisReporter.extendAllContentObjects(queryResults)
     # second run
     for (queryName, queryResults) in queryResultsList:
         thisReporter.appendTitle1(queryName)
         thisReporter.append(queryResults)
     # debug output
     #for i_obj in thisReporter.allContentObjects:
     #    print "%s (%s)" % (i_obj.ikName, i_obj.objectID)
     thisReporter.buildPdf()
     thisReporter.cleanup()
     self.request.response.setHeader('Content-Type', 'application/pdf')
     self.request.response.setHeader(\
         'Content-Disposition',
         'attachment; filename=\"%s\"' % filename)
     setNoCacheHeaders(self.request.response)
     datafile = open(f_name, "r")
     dataMem = datafile.read()
     datafile.close()
     os.remove(f_name)
     return dataMem
예제 #16
0
 def reportXML(self):
     filename = datetime.now().strftime('ict_%Y%m%d%H%M%S.xml')
     f_handle, f_name = tempfile.mkstemp(filename)
     authorStr = self.request.principal.title
     my_formatter = self.request.locale.dates.getFormatter(
         'dateTime', 'medium')
     userTZ = getUserTimezone()
     longTimeString = my_formatter.format(\
         userTZ.fromutc(datetime.utcnow()))
     versionStr = "%s [%s]" % (longTimeString, getIkVersion())
     self.context.generateXML(f_name, authorStr, versionStr)
     self.request.response.setHeader('Content-Type', 'application/xml')
     self.request.response.setHeader(\
         'Content-Disposition',
         'attachment; filename=\"%s\"' % filename)
     setNoCacheHeaders(self.request.response)
     datafile = open(f_name, "r")
     dataMem = datafile.read()
     datafile.close()
     os.remove(f_name)
     return dataMem
예제 #17
0
    def singleBranchTree(self, root=''):
        """Return an XML document with the siblings and parents of an object.

        There is only one branch expanded, in other words, the tree is
        filled with the object, its siblings and its parents with
        their respective siblings.

        """
        result = ''
        oldItem = self.context
        try:
            oldItemOid = self.context.getObjectId()
        except:
            oldItemOid = "+++"

        vh = self.request.getVirtualHostRoot()
        if vh:
            print "vh: ", vh
            vhrootView = zapi.getMultiAdapter(
                    (vh, self.request), name='absolute_url')
            baseURL = vhrootView() + '/'
            try:
                rootName = '[' + vh.__name__ + ']'
            except:
                # we got the containment root itself as the virtual host
                # and there is no name.
                rootName = _('[top]')
            parents = getParentsFromContextToObject(self.context, vh)
        else:
            rootName = _('[top]')
            baseURL = self.request.getApplicationURL() + '/'
            parents = getParents(self.context)
        rootName = translate(rootName, context=self.request,
                             default=rootName)
        for item in parents:
            # skip skin if present
            if item == oldItem:
                continue
            if item is None:
                continue
            subItems = []
            if IReadContainer.providedBy(item):
                keys = list(item.keys())
            else:
                keys = []
            # include the site manager
            keys.append(u'++etc++site')
            for name in keys:
                # Only include items we can traverse to
                subItem = traverse(item, name, None)
                if subItem is None:
                    continue
                if name == u'++etc++site' and \
                   not checkPermission(\
                       'org.ict_ok.ikadmin_utils.usermanagement.Edit',
                       subItem):
                    continue
                iconUrl = self.getIconUrl(subItem)
                subitem_len = self.getLengthOf(subItem)
                dcAdapter = IGeneralDublinCore(subItem)
                xml_title = name
                if dcAdapter:
                    if dcAdapter.title:
                        xml_title = dcAdapter.title
                stateIconUrl = self.getStateIconUrl(subItem)
                if zapi.getParent(subItem):
                    item_ppath = zapi.canonicalPath(zapi.getParent(subItem)) \
                               + u'/'
                    item_ppath = item_ppath.replace('//', '/')
                else:
                    item_ppath = "/"
                try:
                    subItemOid = subItem.getObjectId()
                except:
                    subItemOid = "---"
                stateOverview = self.getStateOverview(item)
                if subitem_len > 0:
                    # the test below seems to be broken
                    # with the ++etc++site case
                    if subItem == oldItem:
                        if oldItemOid == subItemOid: # focussed
                            subItems.append(xmlEscapeWithCData(
                                u'<collection isfocus="" title=%s name=%s '
                                u'iklen=%s '
                                u'icon_url=%s expable="" state_url=%s '
                                u'path=%s state_val=%s>%s</collection>', 
                                xml_title, name, subitem_len, iconUrl,
                                stateIconUrl, item_ppath, stateOverview,
                                result))
                        else:
                            subItems.append(xmlEscapeWithCData(
                                u'<collection title=%s name=%s iklen=%s '
                                u'icon_url=%s state_url=%s path=%s '
                                u'state_val=%s>%s</collection>', 
                                xml_title, name, subitem_len, iconUrl,
                                stateIconUrl, item_ppath, stateOverview,
                                result))
                    else:
                        subItems.append(xmlEscape(
                            u'<collection title=%s name=%s iklen=%s '
                            u'icon_url=%s expable="" state_url=%s path=%s/>',
                            xml_title, name, subitem_len, iconUrl,
                            stateIconUrl, item_ppath))
                else:
                    if subItem == oldItem:
                        if oldItemOid == subItemOid: # focussed
                            subItems.append(xmlEscapeWithCData(
                                u'<collection isfocus="" title=%s '
                                u'name=%s iklen=%s '
                                u'icon_url=%s state_url=%s path=%s '
                                u'state_val=%s>%s</collection>', 
                                xml_title, name, subitem_len, iconUrl,
                                stateIconUrl, item_ppath, stateOverview,
                                result))
                        else:
                            subItems.append(xmlEscapeWithCData(
                                u'<collection title=%s name=%s iklen=%s '
                                u'icon_url=%s state_url=%s path=%s '
                                u'state_val=%s>%s</collection>', 
                                xml_title, name, subitem_len, iconUrl,
                                stateIconUrl, item_ppath, stateOverview,
                                result))
                    else:
                        subItems.append(xmlEscape(
                            u'<collection title=%s name=%s iklen=%s '
                            u'icon_url=%s state_url=%s path=%s/>',
                            xml_title, name, subitem_len, iconUrl,
                            stateIconUrl, item_ppath))

            result = u' '.join(subItems)
            oldItem = item

        # do not forget root folder
        iconUrl = self.getIconUrl(oldItem)
        xml_title = "ICT_Ok"
        rootName =  "."
        
        if len(result) > 0: # collection has content
            result = xmlEscapeWithCData(
                      u'<collection title=%s name=%s baseURL=%s iklen=%s '
                      u'icon_url=%s path=%s isroot="">%s</collection>',
                      xml_title, rootName, baseURL, len(oldItem), iconUrl,
                      "/", result)
        else:
            result = xmlEscapeWithCData(
                      u'<collection title=%s name=%s baseURL=%s iklen=%s '
                      u'icon_url=%s path=%s expable="" '
                      u'isroot="">%s</collection>',
                      xml_title, rootName, baseURL, len(oldItem), iconUrl,
                      "/", result)

        self.request.response.setHeader('Content-Type', 'text/xml')
        setNoCacheHeaders(self.request.response)
        title = translate(titleTemplate,
                          context=self.request, default=titleTemplate)
        loading = translate(loadingMsg,
                          context=self.request, default=loadingMsg)
        return xmlEscapeWithCData(
                u'<?xml version="1.0" encoding="ISO-8859-1"?>'
                u'<children title_tpl=%s title=%s '
                u'loading_msg=%s>%s</children>',
                title, title, loading, result)
예제 #18
0
         additionalAttributes) = \
            self.getCollectionAttributes(oldItem)
        if len(result) > 0:  # collection has content
            result = xmlEscapeWithCData(
                u'<collection isfocused2="" title=%s name=%s iklen=%s rem="3.1" '
                u'icon_url=%s state_url=%s navparam="children5.xml" path=%s isopen="" isroot="">%s</collection>',
                xml_title, name, iklen, stateIconUrl, stateIconUrl, item_ppath,
                result)
        else:
            result = xmlEscapeWithCData(
                u'<collection isfocused2="" title=%s name=%s iklen=%s rem="3.2" '
                u'icon_url=%s state_url=%s navparam="children6.xml" path=%s expable="" '
                u'isroot="">%s</collection>', xml_title, name, iklen,
                stateIconUrl, stateIconUrl, item_ppath, result)
        self.request.response.setHeader('Content-Type', 'text/xml')
        setNoCacheHeaders(self.request.response)
        title = translate(titleTemplate,
                          context=self.request,
                          default=titleTemplate)
        loading = translate(loadingMsg,
                            context=self.request,
                            default=loadingMsg)
        return xmlEscapeWithCData(
            u'<?xml version="1.0" encoding="ISO-8859-1"?>'
            u'<children title_tpl=%s title=%s '
            u'loading_msg=%s>%s</children>', title, title, loading, result)

    def singleBranchTree3(self, root=''):
        result = ''
        oldItem = self.context
        xml_title = '11111'
예제 #19
0
    def singleBranchTree3(self, root=''):
        result = ''
        oldItem = self.context
        xml_title = '11111'
        name = '22222'
        subitem_len = 0
        #oldItem = []
        iconUrl = ''
        stateIconUrl = ''
        item_ppath = ''
        stateOverview = ''
        rootName = '8888'
        baseURL = ''
        subItems = []
        #        subItems.append(xmlEscapeWithCData(
        #            u'<collection isfocused="" title=%s '
        #            u'name=%s iklen=%s rem="2.2.1.1" '
        #            u'icon_url=%s state_url=%s path=%s '
        #            u'state_val=%s>%s</collection>',
        #            xml_title, name, subitem_len, iconUrl,
        #            stateIconUrl, item_ppath, stateOverview,
        #            result))
        result = u' '.join(subItems)

        #        dcAdapter = IGeneralDublinCore(oldItem)
        xml_title = oldItem.getDcTitle()
        #        if dcAdapter:
        #            if dcAdapter.title:
        #                xml_title = dcAdapter.title
        iconUrl = self.getIconUrl(oldItem)
        url2 = urlparse(zapi.absoluteURL(oldItem, self.request))
        name = url2[2].split('/')[-1]
        parentItem = zapi.getParent(oldItem)
        #parentItem.keys()[parentItem.values().index(oldItem)]
        stateIconUrl = self.getStateIconUrl(oldItem)
        #stateValue = self.getStateValue(oldItem)
        stateOverview = self.getStateOverview(oldItem)
        try:
            item_len = len(IContentList(oldItem).getContentList())
        except TypeError:
            item_len = self.getLengthOf(oldItem)
#            item_ppath = zapi.canonicalPath(zapi.getParent(item)) + u'/'
        url = urlparse(zapi.absoluteURL(zapi.getParent(oldItem), self.request))
        item_ppath = url.path + u'/'
        item_ppath = item_ppath.replace('//', '/')

        if len(result) > 0:  # collection has content
            result = xmlEscapeWithCData(
                u'<collection title=%s name=%s iklen=%s rem="3.1" '
                u'icon_url=%s path=%s isopen="" isroot="">%s</collection>',
                xml_title, name, len(oldItem), iconUrl, item_ppath, result)
        else:
            result = xmlEscapeWithCData(
                u'<collection title=%s name=%s iklen=%s rem="3.2" '
                u'icon_url=%s path=%s expable="" '
                u'isroot="">%s</collection>', xml_title, name, len(oldItem),
                iconUrl, item_ppath, result)
        self.request.response.setHeader('Content-Type', 'text/xml')
        setNoCacheHeaders(self.request.response)
        title = translate(titleTemplate,
                          context=self.request,
                          default=titleTemplate)
        loading = translate(loadingMsg,
                            context=self.request,
                            default=loadingMsg)
        return xmlEscapeWithCData(
            u'<?xml version="1.0" encoding="ISO-8859-1"?>'
            u'<children title_tpl=%s title=%s '
            u'loading_msg=%s>%s</children>', title, title, loading, result)
예제 #20
0
    def exportXlsData(self):
        """get XLS file for all folder objects"""
        filename = datetime.now().strftime('ict_%Y%m%d%H%M%S.xls')
        f_handle, f_name = tempfile.mkstemp(filename)
        wbook = Workbook()
        wb_hosts = wbook.add_sheet('ddd')
        style0 = XFStyle()
        font0 = Font()
        font0.height = 6 * 20
        style0.num_format_str = '@'
        style0.font = font0
        style1 = XFStyle()
        font1 = Font()
        font1.height = 6 * 20
        style1.num_format_str = '@'
        style1.font = font1
        heading_pattern = xl.Pattern()
        heading_pattern.pattern = xl.Pattern.SOLID_PATTERN
        heading_pattern.pattern_back_colour = 0x5
        heading_pattern.pattern_fore_colour = 0x5
        fields = self.fields
        attrList = [fname for fname, fval in fields.items()]
        itemList = self.context.items()
        pos_y = 0
        pos_x = 0
        for attr in attrList:
            wb_data = Formula(u'"%s"' % attr)
            style0.pattern = heading_pattern
            wb_hosts.write(pos_y, pos_x, wb_data, style0)
            pos_x += 1
        # IntID
        wb_data = Formula(u'"IntID"')
        wb_hosts.write(pos_y, pos_x, wb_data, style0)
        pos_x += 1
        # objectID
        wb_data = Formula(u'"objectID"')
        wb_hosts.write(pos_y, pos_x, wb_data, style0)
        wb_hosts.col(pos_x).width *= 3
        pos_x += 1
        pos_y = 1
        #
        allAttributes = {}
        for interface in implementedBy(self.factory):
            for i_attrName in interface:
                i_attr = interface[i_attrName]
                if IField.providedBy(i_attr):
                    allAttributes[i_attrName] = i_attr
        #
        for item_n, item_v in itemList:
            pos_x = 0
            for attr in attrList:
                #                from zope.interface import implementedBy
                #                ff=self.factory
                #                tt=[i for i in implementedBy(ff)]
                #                it=tt[-1]
                #attrField = self.attrInterface[attr]
                attrField = allAttributes[attr]
                #                tmpFieldProperty = getattr(self.factory, attr)
                #                if hasattr(tmpFieldProperty, '_FieldProperty__field'):
                #                    attrField = getattr(self.factory, attr)._FieldProperty__field
                attrDm = datamanager.AttributeField(item_v, attrField)
                v_style = XFStyle()
                v_font = Font()
                v_font.height = 6 * 20
                v_style.font = v_font
                value = None
                if IChoice.providedBy(attrField):
                    v_style.num_format_str = '@'
                    dateValue = attrDm.get()
                    v_widget = getMultiAdapter(\
                                    (attrField,self.request),
                                    interfaces.IFieldWidget)
                    v_widget.context = item_v
                    #                    dm = zope.component.getMultiAdapter(
                    #                        (self.content, field.field), interfaces.IDataManager)
                    #                    zope.component.getMultiAdapter(
                    #                        (self.context,
                    #                         self.request,
                    #                         self.form,
                    #                         getattr(widget, 'field', None),
                    #                         widget),
                    #                        interfaces.IValidator).validate(fvalue)
                    #                    dm = zope.component.getMultiAdapter(
                    #                        (self.__context__, field), interfaces.IDataManager)
                    v_dataconverter = queryMultiAdapter(\
                                    (attrDm.field, v_widget),
                                    interfaces.IDataConverter)
                    #print u"ddd55: %s: %s" % (attr, dateValue)
                    if dateValue is not None:
                        value = v_dataconverter.toWidgetValue(dateValue)[0]
                        #print "value3->   %s: %s " % (attr, value)


#                elif ICollection.providedBy(attrField):
#                    v_style.num_format_str = '@'
#                    value = getattr(item_v, attr)
#                    print "ddd66: %s: %s" % (attr, value)
#                elif IBool.providedBy(attrField):
#                    v_style.num_format_str = '@'
#                    value = getattr(item_v, attr)
#                    print "value2->   %s: %s " % (attr, value)
                else:
                    v_style.num_format_str = '@'
                    dateValue = attrDm.get()
                    v_widget = getMultiAdapter(\
                                    (attrField,self.request),
                                    interfaces.IFieldWidget)
                    v_widget.context = item_v
                    v_dataconverter = queryMultiAdapter(\
                                    (attrDm.field, v_widget),
                                    interfaces.IDataConverter)
                    #d2 = queryMultiAdapter((attrDm.field, v_widget),interfaces.IDataConverter)
                    if dateValue is not None:
                        value = v_dataconverter.toWidgetValue(dateValue)
                    if type(value) is list:
                        value = u";".join(value)
                    #print u"value1->   %s: %s " % (attr, value)
                if value is not None:
                    #print u"wb_hosts.write(%s, %s, %s, %s)" % (pos_y, pos_x, value, v_style)
                    wb_hosts.write(pos_y, pos_x, value, v_style)
                pos_x += 1
            # IntID
            uidutil = queryUtility(IIntIds)
            wb_data = Formula(u'"%s"' % uidutil.getId(item_v))
            wb_hosts.write(pos_y, pos_x, wb_data, style0)
            pos_x += 1
            # objectID
            wb_data = Formula(u'"%s"' % item_v.objectID)
            wb_hosts.write(pos_y, pos_x, wb_data, style0)
            pos_x += 1
            pos_y += 1
        wbook.save(f_name)
        self.request.response.setHeader('Content-Type',
                                        'application/vnd.ms-excel')
        self.request.response.setHeader(\
            'Content-Disposition',
            'attachment; filename=\"%s\"' % filename)
        setNoCacheHeaders(self.request.response)
        datafile = open(f_name, "r")
        dataMem = datafile.read()
        datafile.close()
        os.remove(f_name)
        return dataMem