def getPayloadContent(self): mimeType = self.__mimeType print " * single.py: payload content mimeType=%s" % mimeType contentStr = "" if mimeType.startswith("text/"): if mimeType == "text/html": contentStr = '<iframe class="iframe-preview" src="%s/%s/download/%s"></iframe>' % ( contextPath, portalId, self.__oid, ) else: pid = self.__oid[self.__oid.rfind("/") + 1 :] payload = self.__storage.getPayload(self.__oid, pid) print " * single.py: pid=%s payload=%s" % (pid, payload) if payload is not None: sw = StringWriter() sw.write("<pre>") IOUtils.copy(payload.getInputStream(), sw) sw.write("</pre>") sw.flush() contentStr = sw.toString() elif ( mimeType == "application/pdf" or mimeType.find("vnd.ms") > -1 or mimeType.find("vnd.oasis.opendocument.") > -1 ): # get the html version if exist... pid = os.path.splitext(self.__pid)[0] + ".htm" print " * single.py: pid=%s" % pid # contentStr = '<iframe class="iframe-preview" src="%s/%s/download/%s/%s"></iframe>' % \ # (contextPath, portalId, self.__oid, pid) payload = self.__storage.getPayload(self.__oid, pid) saxReader = SAXReader(Boolean.parseBoolean("false")) try: document = saxReader.read(payload.getInputStream()) slideNode = document.selectSingleNode("//*[local-name()='body']") # linkNodes = slideNode.selectNodes("//img") # contentStr = slideNode.asXML(); # encode character entities correctly slideNode.setName("div") out = ByteArrayOutputStream() format = OutputFormat.createPrettyPrint() format.setSuppressDeclaration(True) format.setExpandEmptyElements(True) writer = XMLWriter(out, format) writer.write(slideNode) writer.close() contentStr = out.toString("UTF-8") except: traceback.print_exc() contentStr = '<p class="error">No preview available</p>' elif mimeType.startswith("image/"): src = "%s/%s" % (self.__oid, self.__pid) contentStr = ( '<a class="image" href="%(src)s" style="max-width:98%%">' '<img src="%(src)s" style="max-width:100%%" /></a>' % {"src": self.__pid} ) return contentStr
def getPayloadContent(self): mimeType = self.__mimeType print " * detail.py: payload content mimeType=%s" % mimeType contentStr = "" if mimeType == "application/octet-stream": dcFormat = self.__json.get("response/docs/dc_format") if dcFormat is not None: dcFormat = dcFormat[1:-1] print dcFormat, mimeType if dcFormat != mimeType: return "<div><em>(File not found)</em></div>" else: return "<div><em>(Binary file)</em></div>" elif mimeType.startswith("text/"): if mimeType == "text/html": contentStr = '<iframe class="iframe-preview" src="%s/%s/download/%s"></iframe>' % \ (contextPath, portalId, self.__oid) else: pid = self.__oid[self.__oid.rfind("/")+1:] payload = self.__storage.getPayload(self.__oid, pid) #print " * detail.py: pid=%s payload=%s" % (pid, payload) if payload is not None: sw = StringWriter() sw.write("<pre>") IOUtils.copy(payload.getInputStream(), sw) sw.write("</pre>") sw.flush() contentStr = sw.toString() elif mimeType == "application/pdf" or mimeType.find("vnd.ms")>-1 or mimeType.find("vnd.oasis.opendocument.")>-1: # get the html version if exist... pid = os.path.splitext(self.__pid)[0] + ".htm" print " * detail.py: pid=%s" % pid #contentStr = '<iframe class="iframe-preview" src="%s/%s/download/%s/%s"></iframe>' % \ # (contextPath, portalId, self.__oid, pid) payload = self.__storage.getPayload(self.__oid, pid) saxReader = SAXReader(Boolean.parseBoolean("false")) try: document = saxReader.read(payload.getInputStream()) slideNode = document.selectSingleNode("//*[local-name()='body']") #linkNodes = slideNode.selectNodes("//img") #contentStr = slideNode.asXML(); # encode character entities correctly slideNode.setName("div") out = ByteArrayOutputStream() format = OutputFormat.createPrettyPrint() format.setSuppressDeclaration(True) format.setExpandEmptyElements(True) writer = XMLWriter(out, format) writer.write(slideNode) writer.close() contentStr = out.toString("UTF-8") except: traceback.print_exc() contentStr = "<p class=\"error\">No preview available</p>" return contentStr
def getPayloadContent(self): mimeType = self.__mimeType print " * single.py: payload content mimeType=%s" % mimeType contentStr = "" if mimeType.startswith("text/"): if mimeType == "text/html": contentStr = '<iframe class="iframe-preview" src="%s/download/%s"></iframe>' % \ (portalPath, self.__oid) else: pid = self.__oid[self.__oid.rfind("/") + 1:] payload = self.__storage.getPayload(self.__oid, pid) print " * single.py: pid=%s payload=%s" % (pid, payload) if payload is not None: sw = StringWriter() sw.write("<pre>") IOUtils.copy(payload.getInputStream(), sw) sw.write("</pre>") sw.flush() contentStr = sw.toString() elif mimeType == "application/pdf" or mimeType.find( "vnd.ms") > -1 or mimeType.find( "vnd.oasis.opendocument.") > -1: # get the html version if exist... pid = os.path.splitext(self.__pid)[0] + ".htm" print " * single.py: pid=%s" % pid #contentStr = '<iframe class="iframe-preview" src="%s/download/%s/%s"></iframe>' % \ # (portalPath, self.__oid, pid) payload = self.__storage.getPayload(self.__oid, pid) saxReader = SAXReader(Boolean.parseBoolean("false")) try: document = saxReader.read(payload.getInputStream()) slideNode = document.selectSingleNode( "//*[local-name()='body']") #linkNodes = slideNode.selectNodes("//img") #contentStr = slideNode.asXML(); # encode character entities correctly slideNode.setName("div") out = ByteArrayOutputStream() format = OutputFormat.createPrettyPrint() format.setSuppressDeclaration(True) format.setExpandEmptyElements(True) writer = XMLWriter(out, format) writer.write(slideNode) writer.close() contentStr = out.toString("UTF-8") except: traceback.print_exc() contentStr = "<p class=\"error\">No preview available</p>" elif mimeType.startswith("image/"): src = "%s/%s" % (self.__oid, self.__pid) contentStr = '<a class="image" href="%(src)s" style="max-width:98%%">' \ '<img src="%(src)s" style="max-width:100%%" /></a>' % { "src": self.__pid } return contentStr
def __getPayloadContent(self, oid, pid): print " * combined.py: oid='%s' pid='%s'" % (oid, pid) payload = self.__storage.getPayload(oid, pid) if payload is None: return "<div>Error: No content for '%s'</div>" % oid mimeType = payload.contentType contentStr = "" if mimeType.startswith("text/"): if mimeType == "text/html": contentStr = '<iframe class="iframe-preview" src="%s/download/%s"></iframe>' % \ (portalPath, oid) else: sw = StringWriter() sw.write("<pre>") IOUtils.copy(payload.getInputStream(), sw) sw.write("</pre>") sw.flush() contentStr = sw.toString() elif mimeType == "application/pdf" or mimeType.find("vnd.ms")>-1 or mimeType.find("vnd.oasis.opendocument.")>-1: # get the html version if exist... pid = os.path.splitext(pid)[0] + ".htm" print " * combined.py: pid=%s" % pid payload = self.__storage.getPayload(oid, pid) saxReader = SAXReader(False) try: document = saxReader.read(payload.getInputStream()) slideNode = document.selectSingleNode("//*[local-name()='body']") slideNode.setName("div") out = ByteArrayOutputStream() format = OutputFormat.createPrettyPrint() format.setSuppressDeclaration(True) format.setExpandEmptyElements(True) writer = XMLWriter(out, format) writer.write(slideNode) writer.close() contentStr = out.toString("UTF-8") except: traceback.print_exc() contentStr = "<p class=\"error\">No preview available</p>" elif mimeType.startswith("image/"): src = "%s/%s" % (oid, pid) contentStr = '<a class="image" href="%(src)s" style="max-width:98%%">' \ '<img src="%(src)s" style="max-width:100%%" /></a>' % { "src": pid } return contentStr
def getPayloadContent(self): mimeType = self.__mimeType print " * detail.py: payload content mimeType=%s" % mimeType contentStr = "" if mimeType.startswith("text/"): if mimeType == "text/html": contentStr = '<iframe class="iframe-preview" src="%s/%s/download/%s"></iframe>' % \ (contextPath, portalId, self.__oid) else: pid = self.__oid[self.__oid.rfind("/")+1:] payload = self.__storage.getPayload(self.__oid, pid) print " * detail.py: pid=%s payload=%s" % (pid, payload) if payload is not None: sw = StringWriter() sw.write("<pre>") IOUtils.copy(payload.getInputStream(), sw) sw.write("</pre>") sw.flush() contentStr = sw.toString() elif mimeType == "application/pdf" or mimeType.find("vnd")>-1 or mimeType.find("vnd.oasis.opendocument.")>-1: # get the html version if exist... pid = os.path.splitext(self.__pid)[0] + ".htm" print " * detail.py: pid=%s" % pid #contentStr = '<iframe class="iframe-preview" src="%s/%s/download/%s/%s"></iframe>' % \ # (contextPath, portalId, self.__oid, pid) payload = self.__storage.getPayload(self.__oid, pid) saxReader = SAXReader(Boolean.parseBoolean("false")) try: document = saxReader.read(payload.getInputStream()) except: traceback.print_exc() #slideNode = document.selectSingleNode("//div[@class='body']") slideNode = document.selectSingleNode("//*[local-name()='body']") #linkNodes = slideNode.selectNodes("//img") #contentStr = slideNode.asXML(); # encode character entities correctly out = ByteArrayOutputStream() format = OutputFormat.createPrettyPrint() format.setSuppressDeclaration(True) writer = XMLWriter(out, format) writer.write(slideNode) writer.close() contentStr = out.toString("UTF-8") return contentStr
class UploadXMLHandler(DefaultHandler2): """Класс SAX-парсера, производящий разбор xml и вставку данных в таблицу""" parentTag = None currentCell = None flag = 0 currentString = u'' currentEncoding = u"utf8" def __init__(self, tableInstance, action): self.tableInstance = tableInstance # возможность настраивать, нужно ли обновлять записи и вставлять новые def actionUI(ins): if not ins.tryInsert(): ins.update() def actionU(ins): ins.tryUpdate() def actionI(ins): ins.tryInsert() # определяем, какую функцию нам нужно использовать self.funcAction = locals()['action%s' % action.upper()] def startElement(self, namespaceURI, lname, qname, attrs): if self.parentTag == 'field': if self.flag == 0: self.stringWriter = StringWriter() self.xmlWriter = XMLOutputFactory.newInstance( ).createXMLStreamWriter(self.stringWriter, "UTF-8") self.flag += 1 self.xmlWriter.writeStartElement(qname) for i in range(0, attrs.getLength()): self.xmlWriter.writeAttribute(attrs.getQName(i), attrs.getValue(i)) elif qname == 'table' and self.flag == 0: if self.parentTag is not None: raise CelestaException(u"Неверный формат файла") self.parentTag = qname if not attrs.getValue('name'): raise CelestaException( u"Атрибут 'name' отсутствует в теге 'table'") elif attrs.getValue('name') != self.tableInstance.meta().getName(): raise CelestaException( u"Имя таблицы %s не соответствует значению атрибута 'name'" % self.tableInstance.meta().getName()) elif qname == 'row' and self.flag == 0: if self.parentTag != 'table': raise CelestaException(u"Неверный формат файла") self.parentTag = qname elif qname == 'field' and self.flag == 0: if self.parentTag != 'row': raise CelestaException(u"Неверный формат файла") self.currentEncoding = attrs.getValue('encoding') or u"utf8" self.currentCell = attrs.getValue('name') self.parentTag = qname self.currentString = u'' else: raise CelestaException(u"Неверный формат файла") def endElement(self, uri, lname, qname): if qname == 'table' and self.flag == 0: self.parentTag = None elif qname == 'row' and self.flag == 0: # обновляем или вставляем записи self.funcAction(self.tableInstance) self.tableInstance.clear() self.parentTag = 'table' elif qname == 'field' and self.flag == 0: # Вставка данных в поле таблицы, отдельно рассмотрен случай если данные в формате XML if hasattr(self, 'stringWriter') and self.stringWriter: self.xmlWriter.close() # Вставка данных в поле типа blob if self.tableInstance.meta().columns[ self.currentCell].getCelestaType() == 'BLOB': getattr(self.tableInstance, "calc%s" % self.currentCell)() blobField = self.tableInstance.__dict__[ self.currentCell].getOutStream() blobField.write(self.stringWriter.strip()) else: self.tableInstance.__setattr__( self.currentCell, self.stringWriter.toString()) self.stringWriter.flush() self.stringWriter = None self.xmlWriter = None else: # проверка на None if self.currentString.strip() != 'None': self.currentString = self.currentString.strip() # Вставка данных в поле типа blob if self.tableInstance.meta().columns[ self.currentCell].getCelestaType() == 'BLOB': getattr(self.tableInstance, "calc%s" % self.currentCell)() blobField = self.tableInstance.__dict__[ self.currentCell].getOutStream() if self.currentEncoding == u"utf8": blobField.write(self.currentString) elif self.currentEncoding == u"base64": blobField.write( base64.b64decode(self.currentString)) else: raise CelestaException(u"Неверная кодировка") elif self.tableInstance.meta().columns[ self.currentCell].getCelestaType() == 'DATETIME': sdf = SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS") self.tableInstance.__setattr__( self.currentCell, sdf.parse(self.currentString)) elif self.tableInstance.meta().columns[ self.currentCell].getCelestaType() == 'BIT': self.tableInstance.__setattr__( self.currentCell, self.currentString.lower() == "true") else: if self.currentCell == 'prefix': pass self.tableInstance.__setattr__(self.currentCell, self.currentString) self.parentTag = 'row' self.currentCell = None self.currentString = None elif self.parentTag == 'field': self.xmlWriter.writeEndElement() self.flag -= 1 def characters(self, ch, start, length): if self.parentTag == 'field' and self.flag > 0: self.xmlWriter.writeCharacters(ch, start, length) elif self.currentCell: self.currentString += unicode(String(ch[start:start + length])) def comment(self, ch, start, length): if self.parentTag == 'field' and self.flag > 0: self.xmlWriter.writeComment(ch.tostring()[start:start + length]) def startPrefixMapping(self, prefix, uri): if self.parentTag == 'field' and self.flag > 0: if prefix == "": self.xmlWriter.setDefaultNamespace(uri) else: self.xmlWriter.setPrefix(prefix, uri) def processingInstruction(self, target, data): if self.parentTag == 'field' and self.flag > 0: self.xmlWriter.writeProcessingInstruction(target, data) def skippedEntity(self, name): if self.parentTag == 'field' and self.flag > 0: self.xmlWriter.writeEntityRef(name)
def __getPayloadAsString(self, payload): sw = StringWriter() IOUtils.copy(payload.getInputStream(), sw) sw.flush() return sw.toString()