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
Example #3
0
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/')
Example #4
0
    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)
        }
Example #5
0
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!"
Example #6
0
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/')
Example #7
0
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/')
Example #8
0
 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
Example #18
0
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