stupid async

This commit is contained in:
Roy Olav Purser 2021-05-27 21:34:48 +02:00
parent f96a58c141
commit 2cbf94f1ce
Signed by: roypur
GPG Key ID: E14D26A036F21656

View File

@ -199,46 +199,61 @@ class UpstreamHandler():
try:
embed_url = f'https://noembed.com/embed?url={self.upstream_safe}'
async with self.proxy.session() as session:
resp_embed_future = session.get(embed_url)
resp_upstream_future = session.get(self.upstream)
try:
resp_embed_future = session.get(embed_url)
resp_upstream_future = session.get(self.upstream)
resp_embed = await resp_embed_future
except Exception:
resp_embed = None
try:
resp_upstream = await resp_upstream_future
text_embed_future = resp_embed.text()
text_upstream_future = resp_upstream.text()
except Exception:
resp_upstream = None
text_embed_future = resp_embed.text()
text_upstream_future = resp_upstream.text()
try:
text_embed = await text_embed_future
except Exception:
text_embed = None
try:
text_upstream = await text_upstream_future
parser = MetaParser()
parser.feed(text_upstream)
data_raw = json.loads(text_embed)
if isinstance(data_raw, dict):
data_new = {}
data_valid = True
data_new["og:title"] = data_raw.get("title")
data_new["og:description"] = data_raw.get("author_name")
data_new["og:image"] = data_raw.get("thumbnail_url")
data_filtered = {}
for key in data_new:
value = data_new.get(key)
if isinstance(value, str):
data_filtered[key] = value
data_filtered.update(parser.meta_data)
data = data_filtered
image = data.get("og:image")
if isinstance(image, str):
if self.provider == "youtube":
full_image = re.sub(r'\/[a-zA-Z0-9]+\.([a-zA-Z0-9]+)$', r'/maxresdefault.\1', image)
standard_image = re.sub(r'\/[a-zA-Z0-9]+\.([a-zA-Z0-9]+)$', r'/sddefault.\1', image)
image_status_full_future = session.head(full_image)
image_status_standard_future = session.head(standard_image)
except Exception:
text_upstream = None
parser = MetaParser()
parser.feed(text_upstream)
data_raw = json.loads(text_embed)
if isinstance(data_raw, dict):
data_new = {}
data_valid = True
data_new["og:title"] = data_raw.get("title")
data_new["og:description"] = data_raw.get("author_name")
data_new["og:image"] = data_raw.get("thumbnail_url")
data_filtered = {}
for key in data_new:
value = data_new.get(key)
if isinstance(value, str):
data_filtered[key] = value
data_filtered.update(parser.meta_data)
data = data_filtered
image = data.get("og:image")
if isinstance(image, str):
if self.provider == "youtube":
full_image = re.sub(r'\/[a-zA-Z0-9]+\.([a-zA-Z0-9]+)$', r'/maxresdefault.\1', image)
standard_image = re.sub(r'\/[a-zA-Z0-9]+\.([a-zA-Z0-9]+)$', r'/sddefault.\1', image)
image_status_full_future = session.head(full_image)
image_status_standard_future = session.head(standard_image)
try:
image_status_full = await image_status_full_future
except Exception:
image_status_full = None
try:
image_status_standard = await image_status_standard_future
if hasattr(image_status_full, "status") and (image_status_full.status < 400):
data["og:image"] = full_image
elif hasattr(image_status_standard, "status") and (image_status_standard.status < 400):
data["og:image"] = standard_image
except Exception as e:
logger.info(e)
except Exception:
image_status_standard = None
if hasattr(image_status_full, "status") and (image_status_full.status < 400):
data["og:image"] = full_image
elif hasattr(image_status_standard, "status") and (image_status_standard.status < 400):
data["og:image"] = standard_image
except Exception as e:
logger.info(e)
return data