Source code for retaggr.engines.saucenao.handlers.e621
import asyncio
import functools
import time
import requests as fuck_aiohttp
from .base import SauceNaoHandler
from retaggr.aiohttp_requests import requests
[docs]class E621Handler(SauceNaoHandler):
engine_id = 29
""""""
tag_capable = True
""""""
source_capable = True
""""""
last_request = None
def __init__(self, username, app_name, version):
self.user_agent = {"User-Agent": f"{app_name}/{version} (by {username} on e621)"}
async def rate_limit_wait(self):
if self.last_request is not None: # pragma: no cover
current_time = time.time()
if current_time == self.last_request:
asyncio.sleep(1)
[docs] async def get_tag_data(self, data):
await self.rate_limit_wait()
r = await requests.get("https://e621.net/posts.json", headers=self.user_agent, params={"tags": "id:" + str(data["e621_id"])})
j = await r.json()
self.last_request = time.time()
tags = set()
for category in j["posts"][0]["tags"]:
for tag in j["posts"][0]["tags"][category]:
tags.add(tag)
return tags
[docs] async def get_source_data(self, data):
await self.rate_limit_wait()
r = await requests.get("https://e621.net/posts.json", headers=self.user_agent, params={"tags": "id:" + str(data["e621_id"])})
j = await r.json()
self.last_request = time.time()
sources = set()
for source in j["posts"][0]["sources"]:
sources.add(source)
return sources