Skip to content

Commit

Permalink
Build 1.9.2; Moved tests from src; changed imports of errors and tool…
Browse files Browse the repository at this point in the history
…s; minor fixes
  • Loading branch information
YaNesyTortiK committed Nov 19, 2024
1 parent 3995ef3 commit e1dc1cd
Show file tree
Hide file tree
Showing 16 changed files with 260 additions and 174 deletions.
12 changes: 11 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -106,4 +106,14 @@ Overall fixes and adjustments to KodikParser and KodikParserAsync
- Added `strict` flag to `search` function to KodikParser (kodik will search by title more strictly, less random unrelated results)

## To 1.9.2
- Fixed `search` function in KodikParser
- Fixed `search` function in KodikParser

## To 1.9.3
- Fixed timeout bug in AniboomParser (Added `referer` header to request in `fast_search` function)
- Added additional checks to `get_link`, `get_info`, `search_by_id` functions in KodikParser (now all passed integer parameters will be autoconverted into strings)
- Change imports of `errors` module to local (from: from anime_parser_ru.errors to from . import errors)
- Fixed mismatch with `TooManyRequests` and `ServiceIsOverloaded` exceptions and their http codes

Thx to @nichind for pointing these out

- Moved `tests.py` from src to project root directory
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -847,10 +847,10 @@ pip install lxml
Обозначает возрастную блокировку (требуется авторизация для доступа к этим данным)

- TooManyRequests
Обозначает http статус 520. То есть сервер заблокировал запрос из-за слишком частого обращения
Обозначает http статус 429. То есть сервер заблокировал запрос из-за слишком частого обращения

- ContentBlocked
Обозначает что запрашиваемый контент или плеер заблокирован/недоступен

- ServiceIsOverloaded
Обозначает http статус 429. То есть сервер перегружен и не может ответить на запрос
Обозначает http статус 520. То есть сервер перегружен и не может ответить на запрос
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "anime_parsers_ru"
version = "1.9.2"
version = "1.9.3"
authors = [
{ name="YaNesyTortiK", email="ya.nesy.tortik.email@gmail.com"},
]
Expand Down
6 changes: 3 additions & 3 deletions src/anime_parsers_ru.egg-info/PKG-INFO
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: anime_parsers_ru
Version: 1.9.2
Version: 1.9.3
Summary: Python package for parsing russian anime players
Author-email: YaNesyTortiK <ya.nesy.tortik.email@gmail.com>
Maintainer-email: YaNesyTortiK <ya.nesy.tortik.email@gmail.com>
Expand Down Expand Up @@ -877,10 +877,10 @@ pip install lxml
Обозначает возрастную блокировку (требуется авторизация для доступа к этим данным)

- TooManyRequests
Обозначает http статус 520. То есть сервер заблокировал запрос из-за слишком частого обращения
Обозначает http статус 429. То есть сервер заблокировал запрос из-за слишком частого обращения

- ContentBlocked
Обозначает что запрашиваемый контент или плеер заблокирован/недоступен

- ServiceIsOverloaded
Обозначает http статус 429. То есть сервер перегружен и не может ответить на запрос
Обозначает http статус 520. То есть сервер перегружен и не может ответить на запрос
1 change: 0 additions & 1 deletion src/anime_parsers_ru.egg-info/SOURCES.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
LICENSE
README.md
pyproject.toml
src/tests.py
src/anime_parsers_ru/__init__.py
src/anime_parsers_ru/errors.py
src/anime_parsers_ru/internal_tools.py
Expand Down
1 change: 0 additions & 1 deletion src/anime_parsers_ru.egg-info/top_level.txt
Original file line number Diff line number Diff line change
@@ -1,2 +1 @@
anime_parsers_ru
tests
6 changes: 3 additions & 3 deletions src/anime_parsers_ru/errors.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@ class AgeRestricted(Exception):

class TooManyRequests(Exception):
"""
Ошибка для обозначения ошибки сервера из-за слишком частых запросов.
В основном для шикимориы
Ошибка для обозначения ошибки 429 из-за слишком частых запросов.
В основном для шикимори
"""

class ContentBlocked(Exception):
Expand All @@ -46,6 +46,6 @@ class ContentBlocked(Exception):

class ServiceIsOverloaded(Exception):
"""
Ошибка для обозначения http кода 429
Ошибка для обозначения http кода 520
Используется в парсере shikimori
"""
21 changes: 12 additions & 9 deletions src/anime_parsers_ru/internal_tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@
CAN_WORK = True

import json
import anime_parsers_ru.errors as errors

class Response:
"""
Expand All @@ -34,16 +33,20 @@ def __init__(self) -> None:

async def get(self, url: str, **kwargs) -> Response:
async with aiohttp.request(method='get', url=url, **kwargs) as response:
return Response(
text = await response.text()
res = Response(
status=response.status,
text=await response.text(),
url= response.url.human_repr()
)
text=text,
url=response.url.human_repr()
)
return res

async def post(self, url: str, **kwargs) -> Response:
async with aiohttp.request(method='post', url=url, **kwargs) as response:
return Response(
text = await response.text()
res = Response(
status=response.status,
text=await response.text(),
url= response.url.human_repr()
)
text=text,
url=response.url.human_repr()
)
return res
6 changes: 5 additions & 1 deletion src/anime_parsers_ru/parser_aniboom.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,10 @@
import re
import json

import anime_parsers_ru.errors as errors
try:
from . import errors # Импорт если библиотека установлена
except ImportError:
import errors # Импорт если ббилиотека не установлена и файл лежит локально

class AniboomParser:
"""
Expand Down Expand Up @@ -45,6 +48,7 @@ def fast_search(self, title: str) -> list[dict]:
headers = {
'Accept': 'application/json, text/javascript, */*; q=0.01',
'X-Requested-With': 'XMLHttpRequest',
'Referer': 'https://animego.org/'
}
params = {
'type': 'small',
Expand Down
9 changes: 7 additions & 2 deletions src/anime_parsers_ru/parser_aniboom_async.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,12 @@
import re
import json

import anime_parsers_ru.errors as errors
from anime_parsers_ru.internal_tools import AsyncSession
try:
from . import errors # Импорт если библиотека установлена
from .internal_tools import AsyncSession
except ImportError:
import errors # Импорт если ббилиотека не установлена и файл лежит локально
from internal_tools import AsyncSession

class AniboomParserAsync:
"""
Expand Down Expand Up @@ -46,6 +50,7 @@ async def fast_search(self, title: str) -> list[dict]:
headers = {
'Accept': 'application/json, text/javascript, */*; q=0.01',
'X-Requested-With': 'XMLHttpRequest',
'Referer': 'https://animego.org/'
}
params = {
'type': 'small',
Expand Down
5 changes: 4 additions & 1 deletion src/anime_parsers_ru/parser_jutsu.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,10 @@
LXML_WORKS = True
from bs4 import BeautifulSoup as Soup

import anime_parsers_ru.errors as errors
try:
from . import errors # Импорт если библиотека установлена
except ImportError:
import errors # Импорт если ббилиотека не установлена и файл лежит локально

class JutsuParser:
"""
Expand Down
30 changes: 29 additions & 1 deletion src/anime_parsers_ru/parser_kodik.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,10 @@
from bs4 import BeautifulSoup as Soup
from base64 import b64decode

import anime_parsers_ru.errors as errors
try:
from . import errors # Импорт если библиотека установлена
except ImportError:
import errors # Импорт если ббилиотека не установлена и файл лежит локально

class KodikParser:
"""
Expand Down Expand Up @@ -323,6 +326,11 @@ def search_by_id(self, id: str, id_type: str, limit: int|None = None) -> list:
...
]
"""
if type(id) == int:
id = str(id)
elif type(id) != str:
raise ValueError(f'Для id ожидался тип str, получен "{type(id)}"')

if limit is None:
search_data = self.base_search_by_id(id, id_type, include_material_data=True)
else:
Expand Down Expand Up @@ -447,6 +455,11 @@ def get_info(self, id: str, id_type: str) -> dict:
]
}
"""
if type(id) == int:
id = str(id)
elif type(id) != str:
raise ValueError(f'Для id ожидался тип str, получен "{type(id)}"')

link = self._link_to_info(id, id_type)
data = requests.get(link).text
soup = Soup(data, 'lxml') if self.USE_LXML else Soup(data, 'html.parser')
Expand Down Expand Up @@ -513,6 +526,21 @@ def get_link(self, id: str, id_type: str, seria_num: int, translation_id: str) -
И максимально возможное качество.
"""
# Проверка переданных параметров на правильность типа
if type(id) == int:
id = str(id)
elif type(id) != str:
raise ValueError(f'Для id ожидался тип str, получен "{type(id)}"')
if type(seria_num) == str and seria_num.isdigit():
seria_num = int(seria_num)
elif type(seria_num) != int:
raise ValueError(f'Для seria_num ожидался тип int, получен "{type(seria_num)}"')
if type(translation_id) == int:
translation_id = str(translation_id)
elif type(translation_id) != str:
raise ValueError(f'Для translation_id ожидался тип str, получен "{type(translation_id)}"')


link = self._link_to_info(id, id_type)
data = requests.get(link).text
soup = Soup(data, 'lxml') if self.USE_LXML else Soup(data, 'html.parser')
Expand Down
32 changes: 30 additions & 2 deletions src/anime_parsers_ru/parser_kodik_async.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,12 @@
from bs4 import BeautifulSoup as Soup
from base64 import b64decode

import anime_parsers_ru.errors as errors
from anime_parsers_ru.internal_tools import AsyncSession
try:
from . import errors # Импорт если библиотека установлена
from .internal_tools import AsyncSession
except ImportError:
import errors # Импорт если ббилиотека не установлена и файл лежит локально
from internal_tools import AsyncSession

class KodikParserAsync:
"""
Expand Down Expand Up @@ -329,6 +333,11 @@ async def search_by_id(self, id: str, id_type: str, limit: int|None = None) -> l
...
]
"""
if type(id) == int:
id = str(id)
elif type(id) != str:
raise ValueError(f'Для id ожидался тип str, получен "{type(id)}"')

if limit is None:
search_data = await self.base_search_by_id(id, id_type, include_material_data=True)
else:
Expand Down Expand Up @@ -456,6 +465,11 @@ async def get_info(self, id: str, id_type: str) -> dict:
]
}
"""
if type(id) == int:
id = str(id)
elif type(id) != str:
raise ValueError(f'Для id ожидался тип str, получен "{type(id)}"')

link = await self._link_to_info(id, id_type)
data = await self.requests.get(link)
data = data.text
Expand Down Expand Up @@ -523,6 +537,20 @@ async def get_link(self, id: str, id_type: str, seria_num: int, translation_id:
И максимально возможное качество.
"""
# Проверка переданных параметров на правильность типа
if type(id) == int:
id = str(id)
elif type(id) != str:
raise ValueError(f'Для id ожидался тип str, получен "{type(id)}"')
if type(seria_num) == str and seria_num.isdigit():
seria_num = int(seria_num)
elif type(seria_num) != int:
raise ValueError(f'Для seria_num ожидался тип int, получен "{type(seria_num)}"')
if type(translation_id) == int:
translation_id = str(translation_id)
elif type(translation_id) != str:
raise ValueError(f'Для translation_id ожидался тип str, получен "{type(translation_id)}"')

link = await self._link_to_info(id, id_type)
data = await self.requests.get(link)
data = data.text
Expand Down
Loading

0 comments on commit e1dc1cd

Please sign in to comment.