Back to index

plone3  3.1.7
Public Member Functions | Public Attributes | Static Public Attributes
plone.app.portlets.portlets.feedparser._LooseFeedParser Class Reference
Inheritance diagram for plone.app.portlets.portlets.feedparser._LooseFeedParser:
Inheritance graph
[legend]
Collaboration diagram for plone.app.portlets.portlets.feedparser._LooseFeedParser:
Collaboration graph
[legend]

List of all members.

Public Member Functions

def __init__
def decodeEntities
def unknown_starttag
def unknown_endtag
def handle_charref
def handle_entityref
def handle_data
def handle_comment
def handle_pi
def handle_decl
def parse_declaration
def mapContentType
def trackNamespace
def resolveURI
def push
def pop
def pushContent
def popContent
def reset
def feed
def normalize_attrs
def unknown_starttag
def unknown_endtag
def handle_charref
def handle_entityref
def handle_data
def handle_comment
def handle_pi
def handle_decl
def output

Public Attributes

 feeddata
 encoding
 entries
 version
 namespacesInUse
 infeed
 inentry
 incontent
 intextinput
 inimage
 inauthor
 incontributor
 inpublisher
 insource
 sourcedata
 contentparams
 namespacemap
 elementstack
 basestack
 langstack
 baseuri
 lang
 guidislink
 encoding
 pieces

Static Public Attributes

dictionary namespaces
list can_be_relative_uri = ['link', 'id', 'wfw_comment', 'wfw_commentrss', 'docs', 'url', 'href', 'comments', 'license', 'icon', 'logo']
list can_contain_relative_uris = ['content', 'title', 'summary', 'info', 'tagline', 'subtitle', 'copyright', 'rights', 'description']
list can_contain_dangerous_markup = ['content', 'title', 'summary', 'info', 'tagline', 'subtitle', 'copyright', 'rights', 'description']
list html_types = ['text/html', 'application/xhtml+xml']
list elements_no_end_tag

Detailed Description

Definition at line 1528 of file feedparser.py.


Constructor & Destructor Documentation

def plone.app.portlets.portlets.feedparser._LooseFeedParser.__init__ (   self,
  baseuri,
  baselang,
  encoding 
)

Reimplemented from plone.app.portlets.portlets.feedparser._FeedParserMixin.

Definition at line 1529 of file feedparser.py.

01529 
01530     def __init__(self, baseuri, baselang, encoding):
01531         sgmllib.SGMLParser.__init__(self)
01532         _FeedParserMixin.__init__(self, baseuri, baselang, encoding)

Here is the caller graph for this function:


Member Function Documentation

Reimplemented from plone.app.portlets.portlets.feedparser._FeedParserMixin.

Definition at line 1533 of file feedparser.py.

01533 
01534     def decodeEntities(self, element, data):
01535         data = data.replace('<', '<')
01536         data = data.replace('<', '<')
01537         data = data.replace('>', '>')
01538         data = data.replace('>', '>')
01539         data = data.replace('&', '&')
01540         data = data.replace('&', '&')
01541         data = data.replace('"', '"')
01542         data = data.replace('"', '"')
01543         data = data.replace(''', ''')
01544         data = data.replace(''', ''')
01545         if self.contentparams.has_key('type') and not self.contentparams.get('type', 'xml').endswith('xml'):
01546             data = data.replace('&lt;', '<')
01547             data = data.replace('&gt;', '>')
01548             data = data.replace('&amp;', '&')
01549             data = data.replace('&quot;', '"')
01550             data = data.replace('&apos;', "'")
01551         return data
        

Definition at line 1433 of file feedparser.py.

01433 
01434     def feed(self, data):
01435         data = re.compile(r'<!((?!DOCTYPE|--|\[))', re.IGNORECASE).sub(r'&lt;!\1', data)
01436         #data = re.sub(r'<(\S+?)\s*?/>', self._shorttag_replace, data) # bug [ 1399464 ] Bad regexp for _shorttag_replace
01437         data = re.sub(r'<([^<\s]+?)\s*/>', self._shorttag_replace, data) 
01438         data = data.replace('&#39;', "'")
01439         data = data.replace('&#34;', '"')
01440         if self.encoding and type(data) == type(u''):
01441             data = data.encode(self.encoding)
01442         sgmllib.SGMLParser.feed(self, data)

Here is the call graph for this function:

Definition at line 498 of file feedparser.py.

00498 
00499     def handle_charref(self, ref):
00500         # called for each character reference, e.g. for '&#160;', ref will be '160'
00501         if not self.elementstack: return
00502         ref = ref.lower()
00503         if ref in ('34', '38', '39', '60', '62', 'x22', 'x26', 'x27', 'x3c', 'x3e'):
00504             text = '&#%s;' % ref
00505         else:
00506             if ref[0] == 'x':
00507                 c = int(ref[1:], 16)
00508             else:
00509                 c = int(ref)
00510             text = unichr(c).encode('utf-8')
00511         self.elementstack[-1][2].append(text)

Here is the call graph for this function:

Definition at line 1472 of file feedparser.py.

01472 
01473     def handle_charref(self, ref):
01474         # called for each character reference, e.g. for '&#160;', ref will be '160'
01475         # Reconstruct the original character reference.
01476         self.pieces.append('&#%(ref)s;' % locals())
        

Definition at line 541 of file feedparser.py.

00541 
00542     def handle_comment(self, text):
00543         # called for each comment, e.g. <!-- insert message here -->
00544         pass

Definition at line 1489 of file feedparser.py.

01489 
01490     def handle_comment(self, text):
01491         # called for each HTML comment, e.g. <!-- insert Javascript code here -->
01492         # Reconstruct the original comment.
01493         self.pieces.append('<!--%(text)s-->' % locals())
        
def plone.app.portlets.portlets.feedparser._FeedParserMixin.handle_data (   self,
  text,
  escape = 1 
) [inherited]

Definition at line 533 of file feedparser.py.

00533 
00534     def handle_data(self, text, escape=1):
00535         # called for each block of plain text, i.e. outside of any tag and
00536         # not containing any character or entity references
00537         if not self.elementstack: return
00538         if escape and self.contentparams.get('type') == 'application/xhtml+xml':
00539             text = _xmlescape(text)
00540         self.elementstack[-1][2].append(text)

Here is the call graph for this function:

Here is the caller graph for this function:

Reimplemented in plone.app.portlets.portlets.feedparser._HTMLSanitizer.

Definition at line 1482 of file feedparser.py.

01482 
01483     def handle_data(self, text):
01484         # called for each block of plain text, i.e. outside of any tag and
01485         # not containing any character or entity references
01486         # Store the original text verbatim.
01487         if _debug: sys.stderr.write('_BaseHTMLProcessor, handle_text, text=%s\n' % text)
01488         self.pieces.append(text)
        

Here is the caller graph for this function:

Definition at line 549 of file feedparser.py.

00549 
00550     def handle_decl(self, text):
00551         pass

Reimplemented in plone.app.portlets.portlets.feedparser._HTMLSanitizer.

Definition at line 1499 of file feedparser.py.

01499 
01500     def handle_decl(self, text):
01501         # called for the DOCTYPE, if present, e.g.
01502         # <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
01503         #     "http://www.w3.org/TR/html4/loose.dtd">
01504         # Reconstruct original DOCTYPE
01505         self.pieces.append('<!%(text)s>' % locals())
        

Definition at line 512 of file feedparser.py.

00512 
00513     def handle_entityref(self, ref):
00514         # called for each entity reference, e.g. for '&copy;', ref will be 'copy'
00515         if not self.elementstack: return
00516         if _debug: sys.stderr.write('entering handle_entityref with %s\n' % ref)
00517         if ref in ('lt', 'gt', 'quot', 'amp', 'apos'):
00518             text = '&%s;' % ref
00519         else:
00520             # entity resolution graciously donated by Aaron Swartz
00521             def name2cp(k):
00522                 import htmlentitydefs
00523                 if hasattr(htmlentitydefs, 'name2codepoint'): # requires Python 2.3
00524                     return htmlentitydefs.name2codepoint[k]
00525                 k = htmlentitydefs.entitydefs[k]
00526                 if k.startswith('&#') and k.endswith(';'):
00527                     return int(k[2:-1]) # not in latin-1
00528                 return ord(k)
00529             try: name2cp(ref)
00530             except KeyError: text = '&%s;' % ref
00531             else: text = unichr(name2cp(ref)).encode('utf-8')
00532         self.elementstack[-1][2].append(text)

Here is the call graph for this function:

Definition at line 1477 of file feedparser.py.

01477 
01478     def handle_entityref(self, ref):
01479         # called for each entity reference, e.g. for '&copy;', ref will be 'copy'
01480         # Reconstruct the original entity reference.
01481         self.pieces.append('&%(ref)s;' % locals())

Definition at line 545 of file feedparser.py.

00545 
00546     def handle_pi(self, text):
00547         # called for each processing instruction, e.g. <?instruction>
00548         pass

Reimplemented in plone.app.portlets.portlets.feedparser._HTMLSanitizer.

Definition at line 1494 of file feedparser.py.

01494 
01495     def handle_pi(self, text):
01496         # called for each processing instruction, e.g. <?instruction>
01497         # Reconstruct original processing instruction.
01498         self.pieces.append('<?%(text)s>' % locals())

def plone.app.portlets.portlets.feedparser._FeedParserMixin.mapContentType (   self,
  contentType 
) [inherited]

Definition at line 564 of file feedparser.py.

00564 
00565     def mapContentType(self, contentType):
00566         contentType = contentType.lower()
00567         if contentType == 'text':
00568             contentType = 'text/plain'
00569         elif contentType == 'html':
00570             contentType = 'text/html'
00571         elif contentType == 'xhtml':
00572             contentType = 'application/xhtml+xml'
00573         return contentType
    

Here is the caller graph for this function:

Definition at line 1443 of file feedparser.py.

01443 
01444     def normalize_attrs(self, attrs):
01445         # utility method to be called by descendants
01446         attrs = [(k.lower(), v) for k, v in attrs]
01447         attrs = [(k, k in ('rel', 'type') and v.lower() or v) for k, v in attrs]
01448         return attrs

Here is the caller graph for this function:

Return processed HTML as a single string

Definition at line 1524 of file feedparser.py.

01524 
01525     def output(self):
01526         '''Return processed HTML as a single string'''
01527         return ''.join([str(p) for p in self.pieces])

Here is the caller graph for this function:

Definition at line 552 of file feedparser.py.

00552 
00553     def parse_declaration(self, i):
00554         # override internal declaration handler to handle CDATA blocks
00555         if _debug: sys.stderr.write('entering parse_declaration\n')
00556         if self.rawdata[i:i+9] == '<![CDATA[':
00557             k = self.rawdata.find(']]>', i)
00558             if k == -1: k = len(self.rawdata)
00559             self.handle_data(_xmlescape(self.rawdata[i+9:k]), 0)
00560             return k+3
00561         else:
00562             k = self.rawdata.find('>', i)
00563             return k+1

Here is the call graph for this function:

def plone.app.portlets.portlets.feedparser._FeedParserMixin.pop (   self,
  element,
  stripWhitespace = 1 
) [inherited]

Definition at line 601 of file feedparser.py.

00601 
00602     def pop(self, element, stripWhitespace=1):
00603         if not self.elementstack: return
00604         if self.elementstack[-1][0] != element: return
00605         
00606         element, expectingText, pieces = self.elementstack.pop()
00607         output = ''.join(pieces)
00608         if stripWhitespace:
00609             output = output.strip()
00610         if not expectingText: return output
00611 
00612         # decode base64 content
00613         if base64 and self.contentparams.get('base64', 0):
00614             try:
00615                 output = base64.decodestring(output)
00616             except binascii.Error:
00617                 pass
00618             except binascii.Incomplete:
00619                 pass
00620                 
00621         # resolve relative URIs
00622         if (element in self.can_be_relative_uri) and output:
00623             output = self.resolveURI(output)
00624         
00625         # decode entities within embedded markup
00626         if not self.contentparams.get('base64', 0):
00627             output = self.decodeEntities(element, output)
00628 
00629         # remove temporary cruft from contentparams
00630         try:
00631             del self.contentparams['mode']
00632         except KeyError:
00633             pass
00634         try:
00635             del self.contentparams['base64']
00636         except KeyError:
00637             pass
00638 
00639         # resolve relative URIs within embedded markup
00640         if self.mapContentType(self.contentparams.get('type', 'text/html')) in self.html_types:
00641             if element in self.can_contain_relative_uris:
00642                 output = _resolveRelativeURIs(output, self.baseuri, self.encoding)
00643         
00644         # sanitize embedded markup
00645         if self.mapContentType(self.contentparams.get('type', 'text/html')) in self.html_types:
00646             if element in self.can_contain_dangerous_markup:
00647                 output = _sanitizeHTML(output, self.encoding)
00648 
00649         if self.encoding and type(output) != type(u''):
00650             try:
00651                 output = unicode(output, self.encoding)
00652             except:
00653                 pass
00654 
00655         # categories/tags/keywords/whatever are handled in _end_category
00656         if element == 'category':
00657             return output
00658         
00659         # store output in appropriate place(s)
00660         if self.inentry and not self.insource:
00661             if element == 'content':
00662                 self.entries[-1].setdefault(element, [])
00663                 contentparams = copy.deepcopy(self.contentparams)
00664                 contentparams['value'] = output
00665                 self.entries[-1][element].append(contentparams)
00666             elif element == 'link':
00667                 self.entries[-1][element] = output
00668                 if output:
00669                     self.entries[-1]['links'][-1]['href'] = output
00670             else:
00671                 if element == 'description':
00672                     element = 'summary'
00673                 self.entries[-1][element] = output
00674                 if self.incontent:
00675                     contentparams = copy.deepcopy(self.contentparams)
00676                     contentparams['value'] = output
00677                     self.entries[-1][element + '_detail'] = contentparams
00678         elif (self.infeed or self.insource) and (not self.intextinput) and (not self.inimage):
00679             context = self._getContext()
00680             if element == 'description':
00681                 element = 'subtitle'
00682             context[element] = output
00683             if element == 'link':
00684                 context['links'][-1]['href'] = output
00685             elif self.incontent:
00686                 contentparams = copy.deepcopy(self.contentparams)
00687                 contentparams['value'] = output
00688                 context[element + '_detail'] = contentparams
00689         return output

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 699 of file feedparser.py.

00699 
00700     def popContent(self, tag):
00701         value = self.pop(tag)
00702         self.incontent -= 1
00703         self.contentparams.clear()
00704         return value
        

Here is the call graph for this function:

Here is the caller graph for this function:

def plone.app.portlets.portlets.feedparser._FeedParserMixin.push (   self,
  element,
  expectingText 
) [inherited]

Definition at line 598 of file feedparser.py.

00598 
00599     def push(self, element, expectingText):
00600         self.elementstack.append([element, expectingText, []])

Here is the caller graph for this function:

def plone.app.portlets.portlets.feedparser._FeedParserMixin.pushContent (   self,
  tag,
  attrsD,
  defaultContentType,
  expectingText 
) [inherited]

Definition at line 690 of file feedparser.py.

00690 
00691     def pushContent(self, tag, attrsD, defaultContentType, expectingText):
00692         self.incontent += 1
00693         self.contentparams = FeedParserDict({
00694             'type': self.mapContentType(attrsD.get('type', defaultContentType)),
00695             'language': self.lang,
00696             'base': self.baseuri})
00697         self.contentparams['base64'] = self._isBase64(attrsD, self.contentparams)
00698         self.push(tag, expectingText)

Here is the call graph for this function:

Here is the caller graph for this function:

Reimplemented in plone.app.portlets.portlets.feedparser._HTMLSanitizer.

Definition at line 1422 of file feedparser.py.

01422 
01423     def reset(self):
01424         self.pieces = []
01425         sgmllib.SGMLParser.reset(self)

Here is the caller graph for this function:

Definition at line 592 of file feedparser.py.

00592 
00593     def resolveURI(self, uri):
00594         return _urljoin(self.baseuri or '', uri)
    

Here is the call graph for this function:

Here is the caller graph for this function:

def plone.app.portlets.portlets.feedparser._FeedParserMixin.trackNamespace (   self,
  prefix,
  uri 
) [inherited]

Definition at line 574 of file feedparser.py.

00574 
00575     def trackNamespace(self, prefix, uri):
00576         loweruri = uri.lower()
00577         if (prefix, loweruri) == (None, 'http://my.netscape.com/rdf/simple/0.9/') and not self.version:
00578             self.version = 'rss090'
00579         if loweruri == 'http://purl.org/rss/1.0/' and not self.version:
00580             self.version = 'rss10'
00581         if loweruri == 'http://www.w3.org/2005/atom' and not self.version:
00582             self.version = 'atom10'
00583         if loweruri.find('backend.userland.com/rss') <> -1:
00584             # match any backend.userland.com namespace
00585             uri = 'http://backend.userland.com/rss'
00586             loweruri = uri
00587         if self._matchnamespaces.has_key(loweruri):
00588             self.namespacemap[prefix] = self._matchnamespaces[loweruri]
00589             self.namespacesInUse[self._matchnamespaces[loweruri]] = uri
00590         else:
00591             self.namespacesInUse[prefix or ''] = uri

Here is the caller graph for this function:

Definition at line 461 of file feedparser.py.

00461 
00462     def unknown_endtag(self, tag):
00463         if _debug: sys.stderr.write('end %s\n' % tag)
00464         # match namespaces
00465         if tag.find(':') <> -1:
00466             prefix, suffix = tag.split(':', 1)
00467         else:
00468             prefix, suffix = '', tag
00469         prefix = self.namespacemap.get(prefix, prefix)
00470         if prefix:
00471             prefix = prefix + '_'
00472 
00473         # call special handler (if defined) or default handler
00474         methodname = '_end_' + prefix + suffix
00475         try:
00476             method = getattr(self, methodname)
00477             method()
00478         except AttributeError:
00479             self.pop(prefix + suffix)
00480 
00481         # track inline content
00482         if self.incontent and self.contentparams.has_key('type') and not self.contentparams.get('type', 'xml').endswith('xml'):
00483             # element declared itself as escaped markup, but it isn't really
00484             self.contentparams['type'] = 'application/xhtml+xml'
00485         if self.incontent and self.contentparams.get('type') == 'application/xhtml+xml':
00486             tag = tag.split(':')[-1]
00487             self.handle_data('</%s>' % tag, escape=0)
00488 
00489         # track xml:base and xml:lang going out of scope
00490         if self.basestack:
00491             self.basestack.pop()
00492             if self.basestack and self.basestack[-1]:
00493                 self.baseuri = self.basestack[-1]
00494         if self.langstack:
00495             self.langstack.pop()
00496             if self.langstack: # and (self.langstack[-1] is not None):
00497                 self.lang = self.langstack[-1]

Here is the call graph for this function:

Here is the caller graph for this function:

Reimplemented in plone.app.portlets.portlets.feedparser._HTMLSanitizer.

Definition at line 1466 of file feedparser.py.

01466 
01467     def unknown_endtag(self, tag):
01468         # called for each end tag, e.g. for </pre>, tag will be 'pre'
01469         # Reconstruct the original end tag.
01470         if tag not in self.elements_no_end_tag:
01471             self.pieces.append("</%(tag)s>" % locals())

def plone.app.portlets.portlets.feedparser._FeedParserMixin.unknown_starttag (   self,
  tag,
  attrs 
) [inherited]

Definition at line 391 of file feedparser.py.

00391 
00392     def unknown_starttag(self, tag, attrs):
00393         if _debug: sys.stderr.write('start %s with %s\n' % (tag, attrs))
00394         # normalize attrs
00395         attrs = [(k.lower(), v) for k, v in attrs]
00396         attrs = [(k, k in ('rel', 'type') and v.lower() or v) for k, v in attrs]
00397         
00398         # track xml:base and xml:lang
00399         attrsD = dict(attrs)
00400         baseuri = attrsD.get('xml:base', attrsD.get('base')) or self.baseuri
00401         self.baseuri = _urljoin(self.baseuri, baseuri)
00402         lang = attrsD.get('xml:lang', attrsD.get('lang'))
00403         if lang == '':
00404             # xml:lang could be explicitly set to '', we need to capture that
00405             lang = None
00406         elif lang is None:
00407             # if no xml:lang is specified, use parent lang
00408             lang = self.lang
00409         if lang:
00410             if tag in ('feed', 'rss', 'rdf:RDF'):
00411                 self.feeddata['language'] = lang
00412         self.lang = lang
00413         self.basestack.append(self.baseuri)
00414         self.langstack.append(lang)
00415         
00416         # track namespaces
00417         for prefix, uri in attrs:
00418             if prefix.startswith('xmlns:'):
00419                 self.trackNamespace(prefix[6:], uri)
00420             elif prefix == 'xmlns':
00421                 self.trackNamespace(None, uri)
00422 
00423         # track inline content
00424         if self.incontent and self.contentparams.has_key('type') and not self.contentparams.get('type', 'xml').endswith('xml'):
00425             # element declared itself as escaped markup, but it isn't really
00426             self.contentparams['type'] = 'application/xhtml+xml'
00427         if self.incontent and self.contentparams.get('type') == 'application/xhtml+xml':
00428             # Note: probably shouldn't simply recreate localname here, but
00429             # our namespace handling isn't actually 100% correct in cases where
00430             # the feed redefines the default namespace (which is actually
00431             # the usual case for inline content, thanks Sam), so here we
00432             # cheat and just reconstruct the element based on localname
00433             # because that compensates for the bugs in our namespace handling.
00434             # This will horribly munge inline content with non-empty qnames,
00435             # but nobody actually does that, so I'm not fixing it.
00436             tag = tag.split(':')[-1]
00437             return self.handle_data('<%s%s>' % (tag, ''.join([' %s="%s"' % t for t in attrs])), escape=0)
00438 
00439         # match namespaces
00440         if tag.find(':') <> -1:
00441             prefix, suffix = tag.split(':', 1)
00442         else:
00443             prefix, suffix = '', tag
00444         prefix = self.namespacemap.get(prefix, prefix)
00445         if prefix:
00446             prefix = prefix + '_'
00447 
00448         # special hack for better tracking of empty textinput/image elements in illformed feeds
00449         if (not prefix) and tag not in ('title', 'link', 'description', 'name'):
00450             self.intextinput = 0
00451         if (not prefix) and tag not in ('title', 'link', 'description', 'url', 'href', 'width', 'height'):
00452             self.inimage = 0
00453         
00454         # call special handler (if defined) or default handler
00455         methodname = '_start_' + prefix + suffix
00456         try:
00457             method = getattr(self, methodname)
00458             return method(attrsD)
00459         except AttributeError:
00460             return self.push(prefix + suffix, 1)

Here is the call graph for this function:

Here is the caller graph for this function:

def plone.app.portlets.portlets.feedparser._BaseHTMLProcessor.unknown_starttag (   self,
  tag,
  attrs 
) [inherited]

Reimplemented in plone.app.portlets.portlets.feedparser._HTMLSanitizer, and plone.app.portlets.portlets.feedparser._RelativeURIResolver.

Definition at line 1449 of file feedparser.py.

01449 
01450     def unknown_starttag(self, tag, attrs):
01451         # called for each start tag
01452         # attrs is a list of (attr, value) tuples
01453         # e.g. for <pre class='screen'>, tag='pre', attrs=[('class', 'screen')]
01454         if _debug: sys.stderr.write('_BaseHTMLProcessor, unknown_starttag, tag=%s\n' % tag)
01455         uattrs = []
01456         # thanks to Kevin Marks for this breathtaking hack to deal with (valid) high-bit attribute values in UTF-8 feeds
01457         for key, value in attrs:
01458             if type(value) != type(u''):
01459                 value = unicode(value, self.encoding)
01460             uattrs.append((unicode(key, self.encoding), value))
01461         strattrs = u''.join([u' %s="%s"' % (key, value) for key, value in uattrs]).encode(self.encoding)
01462         if tag in self.elements_no_end_tag:
01463             self.pieces.append('<%(tag)s%(strattrs)s />' % locals())
01464         else:
01465             self.pieces.append('<%(tag)s%(strattrs)s>' % locals())

Here is the call graph for this function:


Member Data Documentation

Definition at line 384 of file feedparser.py.

Definition at line 386 of file feedparser.py.

list plone.app.portlets.portlets.feedparser._FeedParserMixin.can_be_relative_uri = ['link', 'id', 'wfw_comment', 'wfw_commentrss', 'docs', 'url', 'href', 'comments', 'license', 'icon', 'logo'] [static, inherited]

Definition at line 352 of file feedparser.py.

list plone.app.portlets.portlets.feedparser._FeedParserMixin.can_contain_dangerous_markup = ['content', 'title', 'summary', 'info', 'tagline', 'subtitle', 'copyright', 'rights', 'description'] [static, inherited]

Definition at line 354 of file feedparser.py.

list plone.app.portlets.portlets.feedparser._FeedParserMixin.can_contain_relative_uris = ['content', 'title', 'summary', 'info', 'tagline', 'subtitle', 'copyright', 'rights', 'description'] [static, inherited]

Definition at line 353 of file feedparser.py.

Definition at line 380 of file feedparser.py.

Initial value:
['area', 'base', 'basefont', 'br', 'col', 'frame', 'hr',
      'img', 'input', 'isindex', 'link', 'meta', 'param']

Definition at line 1414 of file feedparser.py.

Definition at line 383 of file feedparser.py.

Definition at line 363 of file feedparser.py.

Definition at line 1418 of file feedparser.py.

Definition at line 364 of file feedparser.py.

Definition at line 362 of file feedparser.py.

Definition at line 1018 of file feedparser.py.

list plone.app.portlets.portlets.feedparser._FeedParserMixin.html_types = ['text/html', 'application/xhtml+xml'] [static, inherited]

Definition at line 355 of file feedparser.py.

Definition at line 375 of file feedparser.py.

Definition at line 372 of file feedparser.py.

Definition at line 376 of file feedparser.py.

Definition at line 371 of file feedparser.py.

Definition at line 370 of file feedparser.py.

Definition at line 374 of file feedparser.py.

Definition at line 377 of file feedparser.py.

Definition at line 378 of file feedparser.py.

Definition at line 373 of file feedparser.py.

Definition at line 387 of file feedparser.py.

Definition at line 385 of file feedparser.py.

Definition at line 382 of file feedparser.py.

Definition at line 289 of file feedparser.py.

Definition at line 366 of file feedparser.py.

Definition at line 1423 of file feedparser.py.

Definition at line 379 of file feedparser.py.

Definition at line 365 of file feedparser.py.


The documentation for this class was generated from the following file: