diff options
| -rw-r--r-- | bot/cogs/doc/cog.py | 69 | 
1 files changed, 7 insertions, 62 deletions
| diff --git a/bot/cogs/doc/cog.py b/bot/cogs/doc/cog.py index a7dcd9020..6cd066f1b 100644 --- a/bot/cogs/doc/cog.py +++ b/bot/cogs/doc/cog.py @@ -3,17 +3,13 @@ import functools  import logging  import re  import sys -import textwrap  from collections import OrderedDict  from contextlib import suppress  from types import SimpleNamespace -from typing import Dict, NamedTuple, Optional, Tuple -from urllib.parse import urljoin +from typing import Dict, NamedTuple, Optional  import discord -from bs4.element import PageElement  from discord.ext import commands -from markdownify import MarkdownConverter  from requests import ConnectTimeout, ConnectionError, HTTPError  from sphinx.ext import intersphinx  from urllib3.exceptions import ProtocolError @@ -25,7 +21,7 @@ from bot.decorators import with_role  from bot.pagination import LinePaginator  from bot.utils.messages import wait_for_deletion  from .cache import async_cache -from .parsing import get_soup_from_url, parse_module_symbol, parse_symbol, truncate_markdown +from .parsing import get_symbol_markdown  log = logging.getLogger(__name__)  logging.getLogger('urllib3').setLevel(logging.WARNING) @@ -187,40 +183,6 @@ class DocCog(commands.Cog):          ]          await asyncio.gather(*coros) -    async def get_symbol_html(self, symbol: str) -> Optional[Tuple[list, str]]: -        """ -        Given a Python symbol, return its signature and description. - -        The first tuple element is the signature of the given symbol as a markup-free string, and -        the second tuple element is the description of the given symbol with HTML markup included. - -        If the given symbol is a module, returns a tuple `(None, str)` -        else if the symbol could not be found, returns `None`. -        """ -        symbol_info = self.doc_symbols.get(symbol) -        if symbol_info is None: -            return None -        request_url, symbol_id = symbol_info.url.rsplit('#') - -        soup = await get_soup_from_url(self.bot.http_session, request_url) -        symbol_heading = soup.find(id=symbol_id) -        search_html = str(soup) - -        if symbol_heading is None: -            return None - -        if symbol_info.group == "module": -            parsed_module = parse_module_symbol(symbol_heading) -            if parsed_module is None: -                return [], "" -            else: -                signatures, description = parsed_module - -        else: -            signatures, description = parse_symbol(symbol_heading, search_html) - -        return signatures, description.replace('ΒΆ', '') -      @async_cache(arg_offset=1)      async def get_symbol_embed(self, symbol: str) -> Optional[discord.Embed]:          """ @@ -228,32 +190,15 @@ class DocCog(commands.Cog):          If the symbol is known, an Embed with documentation about it is returned.          """ -        scraped_html = await self.get_symbol_html(symbol) -        if scraped_html is None: +        symbol_info = self.doc_symbols.get(symbol) +        if symbol_info is None:              return None - -        symbol_obj = self.doc_symbols[symbol] -        self.bot.stats.incr(f"doc_fetches.{symbol_obj.package.lower()}") -        signatures = scraped_html[0] -        permalink = symbol_obj.url -        description = truncate_markdown(markdownify(scraped_html[1], url=permalink), 1000) -        description = WHITESPACE_AFTER_NEWLINES_RE.sub('', description) -        if signatures is None: -            # If symbol is a module, don't show signature. -            embed_description = description - -        elif not signatures: -            # It's some "meta-page", for example: -            # https://docs.djangoproject.com/en/dev/ref/views/#module-django.views -            embed_description = "This appears to be a generic page not tied to a specific symbol." - -        else: -            embed_description = "".join(f"```py\n{textwrap.shorten(signature, 500)}```" for signature in signatures) -            embed_description += f"\n{description}" +        self.bot.stats.incr(f"doc_fetches.{symbol_info.package.lower()}") +        embed_description = await get_symbol_markdown(self.bot.http_session, symbol_info)          embed = discord.Embed(              title=discord.utils.escape_markdown(symbol), -            url=permalink, +            url=symbol_info.url,              description=embed_description          )          # Show all symbols with the same name that were renamed in the footer. | 
