feeds: clean up other stylesheets before putting ours
This commit is contained in:
		@@ -718,10 +718,28 @@ class Item(Uniq):
 | 
				
			|||||||
class FeedXML(Feed, ParserXML):
 | 
					class FeedXML(Feed, ParserXML):
 | 
				
			||||||
    itemsClass = 'ItemXML'
 | 
					    itemsClass = 'ItemXML'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def root_siblings(self):
 | 
				
			||||||
 | 
					        out = []
 | 
				
			||||||
 | 
					        current = self.root.getprevious()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        while current is not None:
 | 
				
			||||||
 | 
					            out.append(current)
 | 
				
			||||||
 | 
					            current = current.getprevious()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return out
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def tostring(self, encoding='unicode', **k):
 | 
					    def tostring(self, encoding='unicode', **k):
 | 
				
			||||||
        # override needed due to "getroottree" inclusion
 | 
					        # override needed due to "getroottree" inclusion
 | 
				
			||||||
 | 
					        # and to add stylesheet
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        stylesheets = [x for x in self.root_siblings() if isinstance(x, etree.PIBase) and x.target == 'xml-stylesheet']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if len(stylesheets):
 | 
				
			||||||
 | 
					            # remove all stylesheets present (be that ours or others')
 | 
				
			||||||
 | 
					            for stylesheet in stylesheets:
 | 
				
			||||||
 | 
					                self.root.append(stylesheet) # needed as we can't delete root siblings https://stackoverflow.com/a/60232366
 | 
				
			||||||
 | 
					                self.root.remove(stylesheet)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if self.root.getprevious() is None:
 | 
					 | 
				
			||||||
        self.root.addprevious(etree.PI('xml-stylesheet', 'type="text/xsl" href="/sheet.xsl"'))
 | 
					        self.root.addprevious(etree.PI('xml-stylesheet', 'type="text/xsl" href="/sheet.xsl"'))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return etree.tostring(self.root.getroottree(), encoding=encoding, method='xml', **k)
 | 
					        return etree.tostring(self.root.getroottree(), encoding=encoding, method='xml', **k)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user