def setByUnifName(self, unifName):
        # Check for renamable parts
        m, r = self._splitOnMatchSeq(unifName, (u"wikipage/", u"savedsearch/", u"savedpagesearch/"))

        if m is not None:
            self.renamable = True
            self.unifNamePrefix = m
            self.itemName = r
            return

        m, r = self._splitOnMatch(unifName, u"funcpage/")
        if m is not None:
            self.unifNamePrefix = m
            self.itemName = "<%s>" % DocPages.getHrNameForFuncTag(r)
Esempio n. 2
0
    def setByUnifName(self, unifName):
        # Check for renamable parts
        m, r = self._splitOnMatchSeq(
            unifName, (u"wikipage/", u"savedsearch/", u"savedpagesearch/"))

        if m is not None:
            self.renamable = True
            self.unifNamePrefix = m
            self.itemName = r
            return

        m, r = self._splitOnMatch(unifName, u"funcpage/")
        if m is not None:
            self.unifNamePrefix = m
            self.itemName = "<%s>" % DocPages.getHrNameForFuncTag(r)
Esempio n. 3
0
    def export(self, wikiDocument, wordList, exportType, exportDest,
            compatFilenames, addOpt, progressHandler):
        """
        Run export operation.
        
        wikiDocument -- WikiDocument object
        wordList -- Sequence of wiki words to export
        exportType -- string tag to identify how to export
        exportDest -- Path to destination directory or file to export to
        compatFilenames -- Should the filenames be encoded to be lowest
                           level compatible
        addOpt -- additional options returned by getAddOpt()
        """
        self.wikiDocument = wikiDocument
        self.wordList = wordList
        self.exportDest = exportDest
        self.addOpt = addOpt
        self.exportFile = None
        self.rawExportFile = None
        self.firstSeparatorCallDone = False
        
        self.formatVer = min(addOpt[0], 1)
        self.writeWikiFuncPages = addOpt[1] and (self.formatVer > 0)
        self.writeSavedSearches = addOpt[2] and (self.formatVer > 0)
        self.writeVersionData = addOpt[3] and (self.formatVer > 0)

        try:
            for tryNumber in range(35):
                self.separator = u"-----%s-----" % createRandomString(25)
                try:
                    self.rawExportFile = open(pathEnc(self.exportDest), "w")

                    # Only UTF-8 mode currently
                    self.rawExportFile.write(BOM_UTF8)
                    self.exportFile = _SeparatorWatchUtf8Writer(
                            self.rawExportFile, self.separator, "replace")

                    self.wikiPageWriter = MultiPageTextWikiPageWriter(
                            self.wikiDocument, self.exportFile,
                            self.writeVersionData, self.formatVer)

                    # Identifier line with file format
                    self.exportFile.write(u"Multipage text format %i\n" %
                            self.formatVer)
                    # Separator line
                    self.exportFile.write(u"Separator: %s\n" % self.separator)
    
    
                    # Write wiki-bound functional pages
                    if self.writeWikiFuncPages:
                        # Only wiki related functional pages
                        wikiFuncTags = [ft for ft in DocPages.getFuncTags()
                                if ft.startswith("wiki/")]
                        
                        for ft in wikiFuncTags:
                            self.exportFile.writeSeparator()
                            self.exportFile.write(u"funcpage/%s\n" % ft)
                            page = self.wikiDocument.getFuncPage(ft)
                            self.exportFile.write(page.getLiveText())
    
    
                    # Write saved searches
                    if self.writeSavedSearches:
                        # Wiki-wide searches
                        wikiData = self.wikiDocument.getWikiData()
                        unifNames = wikiData.getDataBlockUnifNamesStartingWith(
                                u"savedsearch/")
    
                        for un in unifNames:
                            self.exportFile.writeSeparator()
                            self.exportFile.write(un + u"\n")
                            datablock = wikiData.retrieveDataBlock(un)
    
                            self.exportFile.write(base64BlockEncode(datablock))
                        
                        # Page searches
                        unifNames = wikiData.getDataBlockUnifNamesStartingWith(
                                u"savedpagesearch/")
    
                        for un in unifNames:
                            self.exportFile.writeSeparator()
                            self._writeHintedDatablock(un, False)

                    locale.setlocale(locale.LC_ALL, '')
    
                    # Write actual wiki words
                    for word in self.wordList:
                        self.wikiPageWriter.exportWikiWord(word)
                        self.exportFile.checkAndClearBuffer()
                    break

                except _SeparatorFoundException:
                    if self.exportFile is not None:
                        self.exportFile.flush()
                        self.exportFile = None
        
                    if self.rawExportFile is not None:
                        self.rawExportFile.close()
                        self.rawExportFile = None

                    continue
                except Exception, e:
                    traceback.print_exc()
                    raise ExportException(unicode(e))
            else: