Fix anime-ultime

This commit is contained in:
Michel Roux 2023-01-13 21:32:58 +01:00
parent 6fd4708b22
commit e4fcc45e7d
5 changed files with 197 additions and 40 deletions

49
poetry.lock generated
View File

@ -282,14 +282,14 @@ six = ">=1.13.0"
[[package]]
name = "dateparser"
version = "1.1.5"
version = "1.1.6"
description = "Date parsing library designed to parse dates from HTML pages"
category = "main"
optional = false
python-versions = ">=3.7"
files = [
{file = "dateparser-1.1.5-py2.py3-none-any.whl", hash = "sha256:ceb159f1b4a9df54ed6209e91298097deafde476037f8611b4cb2b1cb8b31c58"},
{file = "dateparser-1.1.5.tar.gz", hash = "sha256:107f3cc87a60770e10d111349adc1504224a6b60753a47a64b0ec842ab85b5a9"},
{file = "dateparser-1.1.6-py2.py3-none-any.whl", hash = "sha256:c47b6e4b8c4b2b2a21690111b6571b6991295ba327ec6503753abeebf5e80696"},
{file = "dateparser-1.1.6.tar.gz", hash = "sha256:e703db1815270c020552f4b3e3a981937b48b2cbcfcef5347071b74788dd9214"},
]
[package.dependencies]
@ -361,14 +361,14 @@ test = ["pytest (>=6)"]
[[package]]
name = "faker"
version = "15.3.4"
version = "16.4.0"
description = "Faker is a Python package that generates fake data for you."
category = "dev"
optional = false
python-versions = ">=3.7"
files = [
{file = "Faker-15.3.4-py3-none-any.whl", hash = "sha256:c2a2ff9dd8dfd991109b517ab98d5cb465e857acb45f6b643a0e284a9eb2cc76"},
{file = "Faker-15.3.4.tar.gz", hash = "sha256:2d5443724f640ce07658ca8ca8bbd40d26b58914e63eec6549727869aa67e2cc"},
{file = "Faker-16.4.0-py3-none-any.whl", hash = "sha256:5420467fad3fa582094057754e5e81326cb1f51ab822bf9df96c077cfb35ae49"},
{file = "Faker-16.4.0.tar.gz", hash = "sha256:dcffdca8ec9a715982bcd5f53ee688dc4784cd112f9910f8f7183773eb3ec276"},
]
[package.dependencies]
@ -637,14 +637,14 @@ testing = ["flake8 (<5)", "flufl.flake8", "importlib-resources (>=1.3)", "packag
[[package]]
name = "iniconfig"
version = "1.1.1"
description = "iniconfig: brain-dead simple config-ini parsing"
version = "2.0.0"
description = "brain-dead simple config-ini parsing"
category = "dev"
optional = false
python-versions = "*"
python-versions = ">=3.7"
files = [
{file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"},
{file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"},
{file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"},
{file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"},
]
[[package]]
@ -820,14 +820,14 @@ files = [
[[package]]
name = "packaging"
version = "22.0"
version = "23.0"
description = "Core utilities for Python packages"
category = "dev"
optional = false
python-versions = ">=3.7"
files = [
{file = "packaging-22.0-py3-none-any.whl", hash = "sha256:957e2148ba0e1a3b282772e791ef1d8083648bc131c8ab0c1feba110ce1146c3"},
{file = "packaging-22.0.tar.gz", hash = "sha256:2198ec20bd4c017b8f9717e00f0c8714076fc2fd93816750ab48e2c41de2cfd3"},
{file = "packaging-23.0-py3-none-any.whl", hash = "sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2"},
{file = "packaging-23.0.tar.gz", hash = "sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97"},
]
[[package]]
@ -1166,14 +1166,14 @@ files = [
[[package]]
name = "redis"
version = "4.4.0"
version = "4.4.2"
description = "Python client for Redis database and key-value store"
category = "main"
optional = false
python-versions = ">=3.7"
files = [
{file = "redis-4.4.0-py3-none-any.whl", hash = "sha256:cae3ee5d1f57d8caf534cd8764edf3163c77e073bdd74b6f54a87ffafdc5e7d9"},
{file = "redis-4.4.0.tar.gz", hash = "sha256:7b8c87d19c45d3f1271b124858d2a5c13160c4e74d4835e28273400fa34d5228"},
{file = "redis-4.4.2-py3-none-any.whl", hash = "sha256:e6206448e2f8a432871d07d432c13ed6c2abcf6b74edb436c99752b1371be387"},
{file = "redis-4.4.2.tar.gz", hash = "sha256:a010f6cb7378065040a02839c3f75c7e0fb37a87116fb4a95be82a95552776c7"},
]
[package.dependencies]
@ -1343,14 +1343,14 @@ importlib-metadata = {version = ">=1.0", markers = "python_version < \"3.8\""}
[[package]]
name = "sentry-sdk"
version = "1.12.1"
version = "1.13.0"
description = "Python client for Sentry (https://sentry.io)"
category = "main"
optional = false
python-versions = "*"
files = [
{file = "sentry-sdk-1.12.1.tar.gz", hash = "sha256:5bbe4b72de22f9ac1e67f2a4e6efe8fbd595bb59b7b223443f50fe5802a5551c"},
{file = "sentry_sdk-1.12.1-py2.py3-none-any.whl", hash = "sha256:9f0b960694e2d8bb04db4ba6ac2a645040caef4e762c65937998ff06064f10d6"},
{file = "sentry-sdk-1.13.0.tar.gz", hash = "sha256:72da0766c3069a3941eadbdfa0996f83f5a33e55902a19ba399557cfee1dddcc"},
{file = "sentry_sdk-1.13.0-py2.py3-none-any.whl", hash = "sha256:b7ff6318183e551145b5c4766eb65b59ad5b63ff234dffddc5fb50340cad6729"},
]
[package.dependencies]
@ -1379,6 +1379,7 @@ rq = ["rq (>=0.6)"]
sanic = ["sanic (>=0.8)"]
sqlalchemy = ["sqlalchemy (>=1.2)"]
starlette = ["starlette (>=0.19.1)"]
starlite = ["starlite (>=1.48)"]
tornado = ["tornado (>=5)"]
[[package]]
@ -1700,14 +1701,14 @@ test = ["pytest (>=4.3)", "pytest-mock (>=3.3)"]
[[package]]
name = "urllib3"
version = "1.26.13"
version = "1.26.14"
description = "HTTP library with thread-safe connection pooling, file post, and more."
category = "main"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
files = [
{file = "urllib3-1.26.13-py2.py3-none-any.whl", hash = "sha256:47cc05d99aaa09c9e72ed5809b60e7ba354e64b59c9c173ac3018642d8bb41fc"},
{file = "urllib3-1.26.13.tar.gz", hash = "sha256:c083dd0dce68dbfbe1129d5271cb90f9447dea7d52097c6e0126120c521ddea8"},
{file = "urllib3-1.26.14-py2.py3-none-any.whl", hash = "sha256:75edcdc2f7d85b137124a6c3c9fc3933cdeaa12ecb9a6a959f22797a0feca7e1"},
{file = "urllib3-1.26.14.tar.gz", hash = "sha256:076907bf8fd355cde77728471316625a4d2f7e713c125f51953bb5b3eecf4f72"},
]
[package.extras]
@ -1770,4 +1771,4 @@ testing = ["flake8 (<5)", "func-timeout", "jaraco.functools", "jaraco.itertools"
[metadata]
lock-version = "2.0"
python-versions = "^3.7"
content-hash = "55c532d6efbba349d32200a9c181141efd8242f0f9a20223cac14f433e4d059e"
content-hash = "986b9cfc1e566b769ed3eda035cc3b1c25eb7c8b1b278cbe054be801f68d75cf"

View File

@ -29,7 +29,7 @@ class AnimeUltime(Bridge):
(
f"{self.base_url}/"
f"{'search' if query else 'history'}-0-1/"
f"{page_date.strftime('%m%Y') if query else ''}"
f"{page_date.strftime('%m%Y') if not query else ''}"
),
)
@ -62,13 +62,14 @@ class AnimeUltime(Bridge):
tds = tr.find_all("td")
if tds:
torrents.append(
RemoteFile(
bridge=self.__class__.__name__,
id=tds[0].a["href"].split("/")[1].split("-")[0],
category=tds[1].get_text(),
name=tds[0].get_text(),
link=f"{self.base_url}{tds[0].a['href']}",
link=f"{self.base_url}/{tds[0].a['href']}",
)
)
elif history and "Historique" in history.get_text():
@ -87,7 +88,7 @@ class AnimeUltime(Bridge):
id=tds[0].a["href"].split("/")[-2],
category=tds[4].get_text(),
name=tds[0].get_text(),
link=f"{self.base_url}{tds[0].a['href']}",
link=f"{self.base_url}/{tds[0].a['href']}",
date=parse(h3s[i].get_text()[:-3], ["%A %d %B %Y"]),
)
)
@ -98,7 +99,7 @@ class AnimeUltime(Bridge):
id=player["data-serie"],
category=title.get_text(),
name=history.get_text(),
link=f"{self.base_url}file-0-1/{player['data-serie']}",
link=f"{self.base_url}/file-0-1/{player['data-serie']}",
date=tables[0].find_all("tr")[1].find_all("td")[1].get_text(),
)
)

View File

@ -16,7 +16,7 @@ pynyaata = 'pynyaata:run'
[tool.poetry.dependencies]
python = "^3.7"
beautifulsoup4 = "4.11.1"
dateparser = "1.1.5"
dateparser = "1.1.6"
flask = "2.2.2"
flask-httpauth = "4.7.0"
flask-sqlalchemy = "3.0.2"
@ -24,9 +24,9 @@ flask-wtf = "1.0.1"
pg8000 = "1.29.4"
pydantic = "1.10.4"
pymysql = "1.0.2"
redis = "4.4.0"
redis = "4.4.2"
requests = "2.28.1"
sentry-sdk = {extras = ["flask"], version = "1.12.1"}
sentry-sdk = {extras = ["flask"], version = "1.13.0"}
[tool.poetry.group.dev.dependencies]

View File

@ -0,0 +1,135 @@
# flake8: noqa: E501
from datetime import datetime, timedelta
from pynyaata.bridge.animeultime import AnimeUltime
from pynyaata.types import RemoteFile
from pytest import mark
def test_search_url():
previous_month = datetime.now() - timedelta(days=30)
assert (
AnimeUltime().search_url()
== f"http://www.anime-ultime.net/history-0-1/{datetime.now().strftime('%m%Y')}"
)
assert (
AnimeUltime().search_url("", 2)
== f"http://www.anime-ultime.net/history-0-1/{previous_month.strftime('%m%Y')}"
)
assert (
AnimeUltime().search_url("test", 1) == "http://www.anime-ultime.net/search-0-1/"
)
assert (
AnimeUltime().search_url("test", 2) == "http://www.anime-ultime.net/search-0-1/"
)
@mark.asyncio
async def test_search():
remotes = [
RemoteFile(
bridge="AnimeUltime",
id=4631,
category="OAV",
name="Akuma no Riddle: Shousha wa Dare? Nukiuchi Test",
link="http://www.anime-ultime.net/file-0-1/4631-Akuma-no-Riddle-Shousha-wa-Dare-Nukiuchi-Test",
),
RemoteFile(
bridge="AnimeUltime",
id=4250,
category="OAV",
name="Baka to Test to shoukanjuu (spécial Noël)",
link="http://www.anime-ultime.net/file-0-1/4250-Baka-to-Test-to-shoukanjuu-special-Noel",
),
RemoteFile(
bridge="AnimeUltime",
id=3057,
category="OAV",
name="Baka to Test to shoukanjuu (spéciaux)",
link="http://www.anime-ultime.net/file-0-1/3057-Baka-to-Test-to-shoukanjuu-speciaux",
),
RemoteFile(
bridge="AnimeUltime",
id=5453,
category="OAV",
name="Baka to Test to Shoukanjuu Mini Anime",
link="http://www.anime-ultime.net/file-0-1/5453-Baka-to-Test-to-Shoukanjuu-Mini-Anime",
),
RemoteFile(
bridge="AnimeUltime",
id=2458,
category="Episode",
name="Baka to Test to shoukanjuu ni! [Saison 2]",
link="http://www.anime-ultime.net/file-0-1/2458-Baka-to-Test-to-shoukanjuu-ni-Saison-2",
),
RemoteFile(
bridge="AnimeUltime",
id=1887,
category="Episode",
name="Baka to Test to shoukanjuu [Saison 1]",
link="http://www.anime-ultime.net/file-0-1/1887-Baka-to-Test-to-shoukanjuu-Saison-1",
),
RemoteFile(
bridge="AnimeUltime",
id=2320,
category="OAV",
name="Baka to Test to Shoukanjuu: Matsuri",
link="http://www.anime-ultime.net/file-0-1/2320-Baka-to-Test-to-Shoukanjuu-Matsuri",
),
RemoteFile(
bridge="AnimeUltime",
id=4463,
category="OAV",
name="Baka to Test to Shoukanjuu: Spinout! Sore ga Bokura no Nichijou",
link="http://www.anime-ultime.net/file-0-1/4463-Baka-to-Test-to-Shoukanjuu-Spinout-Sore-ga-Bokura-no-Nichijou",
),
RemoteFile(
bridge="AnimeUltime",
id=5069,
category="OAV",
name="Shinmai Maou no Testament Burst OAV [Interdit -16 ans]",
link="http://www.anime-ultime.net/file-0-1/5069-Shinmai-Maou-no-Testament-Burst-OAV-Interdit--16-ans",
),
RemoteFile(
bridge="AnimeUltime",
id=5487,
category="OAV",
name="Shinmai Maou no Testament Departures [Interdit -16 ans]",
link="http://www.anime-ultime.net/file-0-1/5487-Shinmai-Maou-no-Testament-Departures-Interdit--16-ans",
),
RemoteFile(
bridge="AnimeUltime",
id=4830,
category="OAV",
name="Shinmai Maou no Testament OAD [Interdit -16 ans]",
link="http://www.anime-ultime.net/file-0-1/4830-Shinmai-Maou-no-Testament-OAD-Interdit--16-ans",
),
RemoteFile(
bridge="AnimeUltime",
id=3449,
category="Film",
name="Robot Contest [J-Film]",
link="http://www.anime-ultime.net/file-0-1/3449-Robot-Contest-J-Film",
),
RemoteFile(
bridge="AnimeUltime",
id=2879,
category="OST",
name="Baka to Test to shoukanjuu ni! [Saison 2]",
link="http://www.anime-ultime.net/file-0-1/2879-Baka-to-Test-to-shoukanjuu-ni-Saison-2",
),
RemoteFile(
bridge="AnimeUltime",
id=1926,
category="OST",
name="Baka to Test to shoukanjuu [Saison 1]",
link="http://www.anime-ultime.net/file-0-1/1926-Baka-to-Test-to-shoukanjuu-Saison-1",
),
]
assert await AnimeUltime().search("test") == remotes

View File

@ -1,7 +1,7 @@
# flake8: noqa: E501
from typing import List
from pynyaata.bridge.nyaa import Nyaa
from pynyaata.bridge.nyaa import Nyaa, EraiRaws
from pynyaata.types import Color, RemoteFile
from pytest import mark
@ -39,6 +39,26 @@ def test_search_url():
== "https://nyaa.si?f=0&c=1_3&q=%28test+vf%29%7C%28test+vostfr%29%7C%28test+multi%29%7C%28test+fre%29&s=size&o=desc&p=2"
)
assert (
EraiRaws().search_url()
== "https://nyaa.si/user/Erai-raws?f=0&c=1_2&q=+fre&s=id&o=desc&p=1"
)
assert (
EraiRaws().search_url("", 2)
== "https://nyaa.si/user/Erai-raws?f=0&c=1_2&q=+fre&s=id&o=desc&p=2"
)
assert (
EraiRaws().search_url("test", 1)
== "https://nyaa.si/user/Erai-raws?f=0&c=1_2&q=test+fre&s=size&o=desc&p=1"
)
assert (
EraiRaws().search_url("test", 2)
== "https://nyaa.si/user/Erai-raws?f=0&c=1_2&q=test+fre&s=size&o=desc&p=2"
)
@mark.asyncio
async def test_search(requests_mock: Mocker):
@ -47,7 +67,7 @@ async def test_search(requests_mock: Mocker):
Nyaa().search_url(), text=requests.get("https://nyaa.si/user/Chaussette33").text
)
remotes: List[RemoteFile] = [
remotes = [
RemoteFile(
bridge="Nyaa",
id=1080919,