123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- # Part of Odoo. See LICENSE file for full copyright and licensing details.
- from html.parser import HTMLParser
- from odoo.http import FilesystemSessionStore
- from odoo.tools._vendor.sessions import SessionStore
- class MemoryGeoipResolver:
- def resolve(self, ip):
- return {}
- class MemorySessionStore(SessionStore):
- def __init__(self, *args, **kwargs):
- super().__init__(*args, **kwargs)
- self.store = {}
- def get(self, sid):
- session = self.store.get(sid)
- if not session:
- session = self.new()
- return session
- def save(self, session):
- self.store[session.sid] = session
- def delete(self, session):
- self.store.pop(session.sid, None)
- def rotate(self, session, env):
- FilesystemSessionStore.rotate(self, session, env)
- def vacuum(self):
- return
- # pylint: disable=W0223(abstract-method)
- class HtmlTokenizer(HTMLParser):
- def __init__(self, *args, **kwargs):
- super().__init__(*args, **kwargs)
- self.tokens = []
- @classmethod
- def _attrs_to_str(cls, attrs):
- out = []
- for key, value in attrs:
- out.append(f"{key}={value!r}" if value else key)
- return " ".join(out)
- def handle_starttag(self, tag, attrs):
- self.tokens.append(f"<{tag} {self._attrs_to_str(attrs)}>")
- def handle_endtag(self, tag):
- self.tokens.append(f"</{tag}>")
- def handle_startendtag(self, tag, attrs):
- # HTML5 <img> instead of XHTML <img/>
- self.handle_starttag(tag, attrs)
- def handle_data(self, data):
- data = data.strip()
- if data:
- self.tokens.append(data)
- @classmethod
- def tokenize(cls, source_str):
- """
- Parse the source html into a list of tokens. Only tags and
- tags data are conserved, other elements such as comments are
- discarded.
- """
- tokenizer = cls()
- tokenizer.feed(source_str)
- return tokenizer.tokens
|