From eb5e038624053c0c7d0331e5b3bc78d4a8d1502a Mon Sep 17 00:00:00 2001 From: Abigail Gold Date: Wed, 8 Jan 2020 16:20:52 -0500 Subject: [PATCH] add ae7q frn command ae7q applications is WIP, and is commented out. There is also an applications table on the FRN page, which could be used in the future Progress on #95 --- exts/ae7q.py | 125 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 123 insertions(+), 2 deletions(-) diff --git a/exts/ae7q.py b/exts/ae7q.py index 505cad8..e255618 100644 --- a/exts/ae7q.py +++ b/exts/ae7q.py @@ -173,7 +173,75 @@ class AE7QCog(commands.Cog): @_ae7q_lookup.command(name="applications", aliases=["a"], category=cmn.cat.lookup) async def _ae7q_applications(self, ctx: commands.Context, callsign: str): - '''Look up the applications for a callsign on [ae7q.com](http://ae7q.com/).''' + '''Look up the application history for a callsign on [ae7q.com](http://ae7q.com/).''' + """ + callsign = callsign.upper() + desc = '' + base_url = "http://ae7q.com/query/data/CallHistory.php?CALL=" + embed = cmn.embed_factory(ctx) + + async with self.session.get(base_url + callsign) as resp: + if resp.status != 200: + embed.title = "Error in AE7Q applications command" + embed.description = 'Could not load AE7Q' + embed.colour = cmn.colours.bad + await ctx.send(embed=embed) + return + page = await resp.text() + + soup = BeautifulSoup(page, features="html.parser") + tables = [[row for row in table.find_all("tr")] for table in soup.select("table.Database")] + + table = tables[0] + + # find the first table in the page, and use it to make a description + if len(table[0]) == 1: + for row in table: + desc += " ".join(row.getText().split()) + desc += '\n' + desc = desc.replace(callsign, f'`{callsign}`') + + # select the last table to get applications + table = tables[-1] + + table_headers = table[0].find_all("th") + first_header = ''.join(table_headers[0].strings) if len(table_headers) > 0 else None + + # catch if the wrong table was selected + if first_header is None or not first_header.startswith("Receipt"): + embed.title = f"AE7Q Application History for {callsign}" + embed.colour = cmn.colours.bad + embed.url = base_url + callsign + embed.description = desc + embed.description += f'\nNo records found for `{callsign}`' + await ctx.send(embed=embed) + return + + table = await process_table(table[1:]) + + embed = cmn.embed_factory(ctx) + embed.title = f"AE7Q Application History for {callsign}" + embed.colour = cmn.colours.good + embed.url = base_url + callsign + + # add the first three rows of the table to the embed + for row in table[0:3]: + header = f'**{row[1]}** ({row[3]})' # **Name** (Callsign) + body = (f'Received: *{row[0]}*\n' + f'Region: *{row[2]}*\n' + f'Purpose: *{row[5]}*\n' + f'Last Action: *{row[7]}*\n' + f'Application Status: *{row[8]}*\n') + embed.add_field(name=header, value=body, inline=False) + + if len(table) > 3: + desc += f'\nRecords 1 to 3 of {len(table)}. See ae7q.com for more...' + + embed.description = desc + + await ctx.send(embed=embed) + """ + pass @_ae7q_lookup.command(name="frn", aliases=["f"], category=cmn.cat.lookup) async def _ae7q_frn(self, ctx: commands.Context, frn: str): @@ -184,7 +252,60 @@ class AE7QCog(commands.Cog): - 2 tables: callsign history and application history - If not found: no tables """ - pass + desc = '' + base_url = "http://ae7q.com/query/data/FrnHistory.php?FRN=" + embed = cmn.embed_factory(ctx) + + async with self.session.get(base_url + frn) as resp: + if resp.status != 200: + embed.title = "Error in AE7Q frn command" + embed.description = 'Could not load AE7Q' + embed.colour = cmn.colours.bad + await ctx.send(embed=embed) + return + page = await resp.text() + + soup = BeautifulSoup(page, features="html.parser") + tables = [[row for row in table.find_all("tr")] for table in soup.select("table.Database")] + + table = tables[0] + + + table_headers = table[0].find_all("th") + first_header = ''.join(table_headers[0].strings) if len(table_headers) > 0 else None + + # catch if the wrong table was selected + if first_header is None or not first_header.startswith('With Licensee'): + embed.title = f"AE7Q History for FRN {frn}" + embed.colour = cmn.colours.bad + embed.url = base_url + frn + embed.description = f'No records found for FRN `{frn}`' + await ctx.send(embed=embed) + return + + table = await process_table(table[2:]) + + embed = cmn.embed_factory(ctx) + embed.title = f"AE7Q History for FRN {frn}" + embed.colour = cmn.colours.good + embed.url = base_url + frn + + # add the first three rows of the table to the embed + for row in table[0:3]: + header = f'**{row[0]}** ({row[3]})' # **Callsign** (Applicant Type) + body = (f'Class: *{row[4]}*\n' + f'Region: *{row[1]}*\n' + f'Status: *{row[5]}*\n' + f'Granted: *{row[6]}*\n' + f'Effective: *{row[7]}*\n' + f'Cancelled: *{row[8]}*\n' + f'Expires: *{row[9]}*') + embed.add_field(name=header, value=body, inline=False) + + if len(table) > 3: + embed.description = f'Records 1 to 3 of {len(table)}. See ae7q.com for more...' + + await ctx.send(embed=embed) @_ae7q_lookup.command(name="licensee", aliases=["l"], category=cmn.cat.lookup) async def _ae7q_licensee(self, ctx: commands.Context, frn: str):