diff options
| author | 2020-10-18 09:06:17 +0300 | |
|---|---|---|
| committer | 2020-10-18 09:06:17 +0300 | |
| commit | c9ffb11c440482de3cb9c46c746d213e974ea754 (patch) | |
| tree | 2ca2323a78c9cbd2850898b748b6a1fa5071ecb6 | |
| parent | Merge remote-tracking branch 'up/master' into pep-improvisations (diff) | |
Refactor PEP error embed sending
| -rw-r--r-- | bot/exts/utils/utils.py | 47 | 
1 files changed, 24 insertions, 23 deletions
| diff --git a/bot/exts/utils/utils.py b/bot/exts/utils/utils.py index 558d0cf72..e134a0994 100644 --- a/bot/exts/utils/utils.py +++ b/bot/exts/utils/utils.py @@ -220,16 +220,18 @@ class Utils(Cog):          # Handle PEP 0 directly because it's not in .rst or .txt so it can't be accessed like other PEPs.          if pep_number == 0:              pep_embed = self.get_pep_zero_embed() +            success = True          else: -            if not await self.validate_pep_number(ctx, pep_number): -                return +            success = False +            if not (pep_embed := await self.validate_pep_number(pep_number)): +                pep_embed, success = await self.get_pep_embed(pep_number) -            pep_embed = await self.get_pep_embed(ctx, pep_number) - -        if pep_embed: -            await ctx.send(embed=pep_embed) +        await ctx.send(embed=pep_embed) +        if success:              log.trace(f"PEP {pep_number} getting and sending finished successfully. Increasing stat.")              self.bot.stats.incr(f"pep_fetches.{pep_number}") +        else: +            log.trace(f"Getting PEP {pep_number} failed. Error embed sent.")      @staticmethod      def get_pep_zero_embed() -> Embed: @@ -245,8 +247,8 @@ class Utils(Cog):          return pep_embed -    async def validate_pep_number(self, ctx: Context, pep_nr: int) -> bool: -        """Validate is PEP number valid. When it isn't, send error and return False. Otherwise return True.""" +    async def validate_pep_number(self, pep_nr: int) -> Optional[Embed]: +        """Validate is PEP number valid. When it isn't, return error embed, otherwise None."""          if (              pep_nr not in self.peps              and (self.last_refreshed_peps + timedelta(minutes=30)) <= datetime.now() @@ -256,11 +258,13 @@ class Utils(Cog):          if pep_nr not in self.peps:              log.trace(f"PEP {pep_nr} was not found") -            not_found = f"PEP {pep_nr} does not exist." -            await self.send_pep_error_embed(ctx, "PEP not found", not_found) -            return False +            return Embed( +                title="PEP not found", +                description=f"PEP {pep_nr} does not exist.", +                colour=Colour.red() +            ) -        return True +        return None      def generate_pep_embed(self, pep_header: Dict, pep_nr: int) -> Embed:          """Generate PEP embed based on PEP headers data.""" @@ -283,8 +287,8 @@ class Utils(Cog):          return pep_embed      @pep_cache(arg_offset=2) -    async def get_pep_embed(self, ctx: Context, pep_nr: int) -> Optional[Embed]: -        """Fetch, generate and return PEP embed. When any error occur, use `self.send_pep_error_embed`.""" +    async def get_pep_embed(self, pep_nr: int) -> Tuple[Embed, bool]: +        """Fetch, generate and return PEP embed. Second item of return tuple show does getting success."""          response = await self.bot.http_session.get(self.peps[pep_nr])          if response.status == 200: @@ -293,19 +297,16 @@ class Utils(Cog):              # Taken from https://github.com/python/peps/blob/master/pep0/pep.py#L179              pep_header = HeaderParser().parse(StringIO(pep_content)) -            return self.generate_pep_embed(pep_header, pep_nr) +            return self.generate_pep_embed(pep_header, pep_nr), True          else:              log.trace(                  f"The user requested PEP {pep_nr}, but the response had an unexpected status code: {response.status}."              ) -            error_message = "Unexpected HTTP error during PEP search. Please let us know." -            return await self.send_pep_error_embed(ctx, "Unexpected error", error_message) - -    @staticmethod -    async def send_pep_error_embed(ctx: Context, title: str, description: str) -> None: -        """Send error PEP embed with `ctx.send`.""" -        embed = Embed(title=title, description=description, colour=Colour.red()) -        await ctx.send(embed=embed) +            return Embed( +                title="Unexpected error", +                description="Unexpected HTTP error during PEP search. Please let us know.", +                colour=Colour.red() +            ), False      # endregion | 
