def test_response_repr(mocked_responses): mocked_responses.add(responses.POST, SAUCENAO_URL, json=e.HGame_CG) results = SauceNao().from_url('https://example.com/') assert repr( results ) == '<SauceResponse(count=5, long_remaining=66, short_remaining=1)>' assert repr( results[0]) == "<BasicSauce(title='Haramiko', similarity=17.47)>" mocked_responses.remove(responses.POST, SAUCENAO_URL) mocked_responses.add(responses.POST, SAUCENAO_URL, json=e.HMagazines) result = SauceNao().from_url('https://example.com/')[0] assert repr( result ) == "<BookSauce(title='Hime Dorobou', part='[2001-01]', similarity=0.37)>" mocked_responses.remove(responses.POST, SAUCENAO_URL) mocked_responses.add(responses.POST, SAUCENAO_URL, json=e.Anime) result = SauceNao().from_url('https://example.com/')[0] assert repr( result ) == "<VideoSauce(title='One Piece', part='299', similarity=19.50)>"
def test_response_bool(mocked_responses): mocked_responses.add(responses.POST, SAUCENAO_URL, json=e.HMagazines) results = SauceNao().from_url('https://example.com/') assert bool(results) is True mocked_responses.remove(responses.POST, SAUCENAO_URL) mocked_responses.add(responses.POST, SAUCENAO_URL, json=e.DoujinshiDB) results = SauceNao().from_url('https://example.com/') assert bool(results) is False
def test_from_url(mocked_responses): def request_callback(request): assert request.params['url'] == 'https://example.com/' return 500, {}, '' mocked_responses.add_callback(responses.POST, SAUCENAO_URL, callback=request_callback) saucenao = SauceNao() with pytest.raises(UnknownApiError): saucenao.from_url('https://example.com/')
def __init__(self, *args, **kwargs) -> None: super().__init__(*args, **kwargs) self.sn = SauceNao(Bot.sauce_nao_key, dbmask=1666715746400, numres=3) self.IMG_LINK_PATTERN = re.compile( r"(https?:\/\/[^\s]*(\?format=\w*&name=\d*x\d*|(\.png|\.jpg|\.jpeg)))" ) self.result_list = {} self.reaction_emos = { r: i for i, r in enumerate(Reactions.numbers + Reactions.letters) }
def get_source(link): """Gets an image source from the Saucenao API.""" sauce = SauceNao(api_key=saucenao_key) results = sauce.from_url(link) url = results[0].url if url: if "pixiv" in url: match = re.search(r"\d+", url) if match: url = f"https://www.pixiv.net/en/artworks/{match.group()}" return f"Title: {results[0].title} Artist: {results[0].author} Similarity: {results[0].similarity}\n\nSource: {url}" else: return "Sorry, could not find the source of this drawing!"
def test_optional_params(mocked_responses): def request_callback(request): assert request.params['api_key'] == 'SauceNAO' assert request.params['dbmask'] == '12' assert request.params['dbmaski'] == '918' return 500, {}, '' mocked_responses.add_callback(responses.POST, SAUCENAO_URL, callback=request_callback) saucenao = SauceNao('SauceNAO', dbmask=12, dbmaski=918) with pytest.raises(UnknownApiError): saucenao.from_url('https://example.com/')
def test_429_long_limit_unregister(mocked_responses): mocked_responses.add(responses.POST, SAUCENAO_URL, status=429, json=e.LongLimitUnregister) with pytest.raises(LongLimitReachedError): SauceNao().from_url('https://example.com/')
async def sauce(self, ctx, url=None): sauce = SauceNao() if url is None: logger.info('Attachment search query.') if ctx.message.attachments: raise commands.MissingRequiredArgument(param='image attachment') elif len(ctx.message.attachments) == 1: attachment_url = ctx.message.attachments[0].url response = sauce.from_url(attachment_url) await ctx.send(embed=await self.create_sauce_info_embed(response)) else: raise MultipleImagesQueryError else: logger.info('Url search query.') response = sauce.from_url(url) await ctx.send(embed=await self.create_sauce_info_embed(response))
def test_hmiscehentai(mocked_responses): mocked_responses.add(responses.POST, SAUCENAO_URL, json=e.HMisc_EHentai) result = SauceNao().from_url('https://example.com/')[0] assert result.title == 'Persona 4: Golden Characters' assert result.urls == [] assert result.author == 'Unknown'
def test_basic_attrs(mocked_responses): mocked_responses.add(responses.POST, SAUCENAO_URL, json=e.HMagazines) result = SauceNao().from_url('https://example.com/')[0] assert result.raw == { 'header': { 'similarity': '0.37', 'thumbnail': 'https://img1.saucenao.com/res/0_magazines/Hime%20Dorobou/%5B2001-01%5D/051.JPG?auth=oH21gSB37fnx04zMNaMVvg&exp=1596483537', 'index_id': 0, 'index_name': 'Index #0: H-Magazines - 051.JPG' }, 'data': { 'title': 'Hime Dorobou', 'part': '[2001-01]', 'date': '2001-01' } }, { 'header': { 'similarity': '0.0638999999999', 'thumbnail': 'https://img1.saucenao.com/res/0_magazines/Slave%20Heroines/10%20%5B2009-01%5D/001.jpg?auth=IWwXAQXqZk4ZgkjiZ7C1Xg&exp=1596483537', 'index_id': 0, 'index_name': 'Index #0: H-Magazines - 001.jpg' }, 'data': { 'title': 'Slave Heroines', 'part': 'vol. 10', 'date': '2009-01' } } assert result.similarity == 0.37 assert result.thumbnail == 'https://img1.saucenao.com/res/0_magazines/Hime%20Dorobou/%5B2001-01%5D/051.JPG?auth=oH21gSB37fnx04zMNaMVvg&exp=1596483537' assert result.index_id == 0 assert result.index_name == 'Index #0: H-Magazines - 051.JPG'
def test_niconicoseiga(mocked_responses): mocked_responses.add(responses.POST, SAUCENAO_URL, json=e.Nico_Nico_Seiga) result = SauceNao().from_url('https://example.com/')[0] assert result.title == 'ボイスロイドたちの学園クトゥルフ' assert result.urls == ['https://seiga.nicovideo.jp/seiga/im3917445'] assert result.author == 'ナギネコ' assert type(result) is BasicSauce
def test_pawoonet(mocked_responses): mocked_responses.add(responses.POST, SAUCENAO_URL, json=e.Pawoonet) result = SauceNao().from_url('https://example.com/')[0] assert result.title == '2017-10-11T12:29:20.000Z' assert result.urls == ['https://pawoo.net/@nez_ebi'] assert result.author == 'nez_ebi' assert type(result) is BasicSauce
def test_deviantart(mocked_responses): mocked_responses.add(responses.POST, SAUCENAO_URL, json=e.DeviantArt) result = SauceNao().from_url('https://example.com/')[0] assert result.title == 'Koshitantan + video link+stagedl' assert result.urls == ['https://deviantart.com/view/515715132'] assert result.author == 'SliverRose0916' assert type(result) is BasicSauce
def test_bcynetcosplay(mocked_responses): mocked_responses.add(responses.POST, SAUCENAO_URL, json=e.Bcynet_Cosplay) result = SauceNao().from_url('https://example.com/')[0] assert result.title == '2015總結 星名皇' assert result.urls == ['https://bcy.net/coser/detail/54748'] assert result.author == '星名皇' assert type(result) is BasicSauce
def test_drawrimages(mocked_responses): mocked_responses.add(responses.POST, SAUCENAO_URL, json=e.Drawr_Images) result = SauceNao().from_url('https://example.com/')[0] assert result.title == '2012-05-07 03:41:38' assert result.urls == ['https://drawr.net/show.php?id=3728320'] assert result.author == 'CAMfc' assert type(result) is BasicSauce
def test_furry_network(mocked_responses): mocked_responses.add(responses.POST, SAUCENAO_URL, json=e.FurAffinity) result = SauceNao().from_url('http://example.com')[0] assert result.title == 'playtime' assert result.urls == ['https://www.furaffinity.net/view/14385432'] assert result.author == 'writersmask' assert type(result) is BasicSauce
def test_sankakuchannel(mocked_responses): mocked_responses.add(responses.POST, SAUCENAO_URL, json=e.SankakuChannel) result = SauceNao().from_url('https://example.com/')[0] assert result.title == 'harry potter' assert result.urls == ['https://chan.sankakucomplex.com/post/show/4922724'] assert result.author == '' assert type(result) is BasicSauce
def files(): #Needs own API key, can register at https://saucenao.com/user.php?page=search-api sauce = SauceNao(saucenao_API_key) onlyfiles = [f for f in listdir('Images') if isfile(join('Images', f))] count = 4 for filename in onlyfiles: count = count - 1 fileSource = open('Images/' + filename, "rb") results = sauce.from_file(fileSource) # or from_file() if (bool(results)): webbrowser.open(''.join( results[0].urls)) # Opens must relevant source else: print("Image Not Found") if (count == 0): count = 4 time.sleep(40)
def test_twodmarket(mocked_responses): mocked_responses.add(responses.POST, SAUCENAO_URL, json=e.TwoDMarket) result = SauceNao().from_url('https://example.com/')[0] assert result.title == 'Rain Shelter Tale' assert result.urls == ['https://2d-market.com/Comic/133'] assert result.author == 'Kabayakiya' assert type(result) is BasicSauce
def test_hmisc(mocked_responses): mocked_responses.add(responses.POST, SAUCENAO_URL, json=e.HMisc) result = SauceNao().from_url('https://example.com/')[0] assert result.title == '[Erect Sawaru] Shinkyoku no Grimoire III -PANDRA saga 2nd story-' assert result.urls == [] assert result.author == 'erect sawaru | moroboshi guy' assert type(result) is BasicSauce
def test_fakku(mocked_responses): mocked_responses.add(responses.POST, SAUCENAO_URL, json=e.FAKKU) result = SauceNao().from_url('https://example.com/')[0] assert result.title == 'Ima Real' assert result.urls == ['https://www.fakku.net/hentai/ima-real-english'] assert result.author == 'Takeda Hiromitsu' assert type(result) is BasicSauce
def test_yandere(mocked_responses): mocked_responses.add(responses.POST, SAUCENAO_URL, json=e.Yandere) result = SauceNao().from_url('https://example.com/')[0] assert result.title == 'metal gear' assert result.urls == ['https://yande.re/post/show/33539'] assert result.author == '' assert type(result) is BasicSauce
def test_nijieimages(mocked_responses): mocked_responses.add(responses.POST, SAUCENAO_URL, json=e.Nijie_Images) result = SauceNao().from_url('https://example.com/')[0] assert result.title == 'Broadcasting accident - All Five !!' assert result.urls == ['https://nijie.info/view.php?id=334086'] assert result.author == '青虫' assert type(result) is BasicSauce
def test_e621net(mocked_responses): mocked_responses.add(responses.POST, SAUCENAO_URL, json=e.E621net) result = SauceNao().from_url('https://example.com/')[0] assert result.title == '' assert result.urls == ['https://e621.net/post/show/1410034'] assert result.author == 'unknown artist' assert type(result) is BasicSauce
def test_artstation(mocked_responses): mocked_responses.add(responses.POST, SAUCENAO_URL, json=e.Artstation) result = SauceNao().from_url('http://example.com/')[0] assert result.title == 'Adnachiel Arknights Fanart' assert result.urls == ['https://www.artstation.com/artwork/OoyP0e'] assert result.author == 'Rclouds 96' assert type(result) is BasicSauce
def test_idolcomplex(mocked_responses): mocked_responses.add(responses.POST, SAUCENAO_URL, json=e.IdolComplex) result = SauceNao().from_url('https://example.com/')[0] assert result.title == '' assert result.urls == ['https://idol.sankakucomplex.com/post/show/441604'] assert result.author == '' assert type(result) is BasicSauce
def test_hgamecg(mocked_responses): mocked_responses.add(responses.POST, SAUCENAO_URL, json=e.HGame_CG) result = SauceNao().from_url('https://example.com/')[0] assert result.title == 'Haramiko' assert result.urls == ['http://www.getchu.com/soft.phtml?id=587705'] assert result.author == 'Selen' assert type(result) is BasicSauce
def test_bcynetillust(mocked_responses): mocked_responses.add(responses.POST, SAUCENAO_URL, json=e.Bcynet_Illust) result = SauceNao().from_url('https://example.com/')[0] assert result.title == '|*美食方言*|' assert result.urls == ['https://bcy.net/illust/detail/55206'] assert result.author == '第四存档点' assert type(result) is BasicSauce
def test_konachan(mocked_responses): mocked_responses.add(responses.POST, SAUCENAO_URL, json=e.Konachan) result = SauceNao().from_url('https://example.com/')[0] assert result.title == 'tengen toppa gurren lagann' assert result.urls == ['https://konachan.com/post/show/82192'] assert result.author == 'gainax, nanao' assert type(result) is BasicSauce
def test_danbooru(mocked_responses): mocked_responses.add(responses.POST, SAUCENAO_URL, json=e.Danbooru) result = SauceNao().from_url('https://example.com/')[0] assert result.title == 'highly responsive to prayers, touhou, touhou (pc-98)' assert result.urls == ['https://danbooru.donmai.us/post/show/736634'] assert result.author == 'nichimatsu seri' assert type(result) is BasicSauce