Upgraded knowit to latest version to fix some long-lasting issue.

subdl
morpheus65535 3 months ago
parent 8beebce2e4
commit 22ac838e9b

@ -305,9 +305,7 @@ def parse_video_metadata(file, file_size, episode_file_id=None, movie_file_id=No
# or if we have mediainfo available # or if we have mediainfo available
elif mediainfo_path: elif mediainfo_path:
try: try:
# disabling mediainfo path temporarily until issue with knowit is fixed. data["mediainfo"] = know(video_path=file, context={"provider": "mediainfo", "mediainfo": mediainfo_path})
# data["mediainfo"] = know(video_path=file, context={"provider": "mediainfo", "mediainfo": mediainfo_path})
data["mediainfo"] = know(video_path=file, context={"provider": "mediainfo"})
except KnowitException as e: except KnowitException as e:
logging.error(f"BAZARR mediainfo cannot analyze this video file {file}. Could it be corrupted? {e}") logging.error(f"BAZARR mediainfo cannot analyze this video file {file}. Could it be corrupted? {e}")
return None return None

@ -1,12 +1,12 @@
Metadata-Version: 2.1 Metadata-Version: 2.1
Name: knowit Name: knowit
Version: 0.5.2 Version: 0.5.3
Summary: Know better your media files Summary: Know better your media files
Home-page: https://github.com/ratoaq2/knowit Home-page: https://github.com/ratoaq2/knowit
License: MIT License: MIT
Keywords: video,mkv,mp4,mediainfo,metadata,movie,episode,tv,shows,series Keywords: video,mkv,mp4,mediainfo,metadata,movie,episode,tv,shows,series
Author: Rato Author: Rato
Requires-Python: >=3.8.1,<4.0.0 Requires-Python: >=3.9.0,<4.0.0
Classifier: Development Status :: 5 - Production/Stable Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: MIT License Classifier: License :: OSI Approved :: MIT License
@ -18,12 +18,11 @@ Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11 Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12 Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3 :: Only Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.8
Classifier: Topic :: Multimedia :: Video Classifier: Topic :: Multimedia :: Video
Classifier: Topic :: Software Development :: Libraries :: Python Modules Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Dist: babelfish (>=0.6.0,<0.7.0) Requires-Dist: babelfish (>=0.6.0,<0.7.0)
Requires-Dist: enzyme (>=0.4.1,<0.5.0) Requires-Dist: enzyme (>=0.4.1,<0.5.0)
Requires-Dist: pint (>=0.20.1,<0.21.0) Requires-Dist: pint (>=0.20.1,<0.22.0)
Requires-Dist: pymediainfo (>=6.0.1,<7.0.0) Requires-Dist: pymediainfo (>=6.0.1,<7.0.0)
Requires-Dist: pyyaml (>=6.0,<7.0) Requires-Dist: pyyaml (>=6.0,<7.0)
Requires-Dist: trakit (>=0.2.1,<0.3.0) Requires-Dist: trakit (>=0.2.1,<0.3.0)

@ -1,20 +1,20 @@
../../bin/knowit,sha256=YW-jqGyoTDCtZ5CMgl9CaHRH1Z9BH2Uq38nD29WGYaA,237 ../../bin/knowit,sha256=VqcR7w0JoAIAiHTJ_VmoiEcl-TWfAD3N3AvwOmhVJ6w,240
knowit-0.5.2.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4 knowit-0.5.3.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
knowit-0.5.2.dist-info/LICENSE,sha256=R8zPEs6FTm1j_QfmnmUjM63LiqD44a7-C6hWnoCh-8M,1061 knowit-0.5.3.dist-info/LICENSE,sha256=R8zPEs6FTm1j_QfmnmUjM63LiqD44a7-C6hWnoCh-8M,1061
knowit-0.5.2.dist-info/METADATA,sha256=NQekkp65oE2PFb16Ndf8vZjy-f_eglkyxlmLa4ufABk,9182 knowit-0.5.3.dist-info/METADATA,sha256=_fzw9UzG4zpVnYXbrwicSgdNcYfiT7TYOhvfwNlR08k,9132
knowit-0.5.2.dist-info/RECORD,, knowit-0.5.3.dist-info/RECORD,,
knowit-0.5.2.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0 knowit-0.5.3.dist-info/REQUESTED,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
knowit-0.5.2.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88 knowit-0.5.3.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
knowit-0.5.2.dist-info/entry_points.txt,sha256=IuayIkjKpJlQRE1a7lN4axDUR6d13l5obIbpXuL3gsc,47 knowit-0.5.3.dist-info/entry_points.txt,sha256=IuayIkjKpJlQRE1a7lN4axDUR6d13l5obIbpXuL3gsc,47
knowit/__init__.py,sha256=TxzHZ2jeocfO1t5sOLMEt5GJXT4FUJrSsUDM463oO0M,1269 knowit/__init__.py,sha256=TxzHZ2jeocfO1t5sOLMEt5GJXT4FUJrSsUDM463oO0M,1269
knowit/__main__.py,sha256=W-A3O0IO37SA5Tjsney8I2TGEfwaiwbgBxIcDPIguh4,6243 knowit/__main__.py,sha256=W-A3O0IO37SA5Tjsney8I2TGEfwaiwbgBxIcDPIguh4,6243
knowit/api.py,sha256=LFaWZamIeBeNhEG6YNv8mJELqTV_Oo8TfifONWHQuXc,3890 knowit/api.py,sha256=LFaWZamIeBeNhEG6YNv8mJELqTV_Oo8TfifONWHQuXc,3890
knowit/config.py,sha256=Syvq9bWj1pcaZWS1M67jb9XKebtGIHfE-UgwuaBEoqo,2006 knowit/config.py,sha256=GSiyDXu5mKZiHedmcs4eu9iohBwwjvNAiIOG4uybfNU,2175
knowit/core.py,sha256=7YMpLMjrIWSTvNoGYsQot3ZImITRJijxAZYdA-yN_e4,7457 knowit/core.py,sha256=7YMpLMjrIWSTvNoGYsQot3ZImITRJijxAZYdA-yN_e4,7457
knowit/defaults.yml,sha256=oWilBJyi0FkIwyOGQpz7q3Ax1pTmTSIG-ekYJpqWlJc,11748 knowit/defaults.yml,sha256=oWilBJyi0FkIwyOGQpz7q3Ax1pTmTSIG-ekYJpqWlJc,11748
knowit/properties/__init__.py,sha256=VvBTxa9wdzQ1ka6XtXibe7m_XUWRyQ_N0DW1q_S-Wms,504 knowit/properties/__init__.py,sha256=VvBTxa9wdzQ1ka6XtXibe7m_XUWRyQ_N0DW1q_S-Wms,504
knowit/properties/audio.py,sha256=wbW8Oq5VcbTUC-MdmVZh7pVC2sz4c0bSS-NcmF0Kz6U,1340 knowit/properties/audio.py,sha256=wbW8Oq5VcbTUC-MdmVZh7pVC2sz4c0bSS-NcmF0Kz6U,1340
knowit/properties/general.py,sha256=VVbGVryFd1d9zH73vZ743mSR80udWSqdcx9fEbzzNbg,4580 knowit/properties/general.py,sha256=ipAHNJFfECfY6fwFWqXP6YFg3__I9coM695YoVlJyCU,4761
knowit/properties/subtitle.py,sha256=HY-MN6ZIQS4Vw6_Eu3mTWRX6yKZ-c47viye8Y1R2U_0,303 knowit/properties/subtitle.py,sha256=HY-MN6ZIQS4Vw6_Eu3mTWRX6yKZ-c47viye8Y1R2U_0,303
knowit/properties/video.py,sha256=KfDQ0b-ndLtNgYtW4ScSDQ2MZipzuLhU8yrDtgdjzlU,3154 knowit/properties/video.py,sha256=KfDQ0b-ndLtNgYtW4ScSDQ2MZipzuLhU8yrDtgdjzlU,3154
knowit/provider.py,sha256=GHwOS_bW-MxeWIUdlbWY89uGbOzx3bLBRKnZB1e9mb8,4300 knowit/provider.py,sha256=GHwOS_bW-MxeWIUdlbWY89uGbOzx3bLBRKnZB1e9mb8,4300
@ -24,10 +24,10 @@ knowit/providers/ffmpeg.py,sha256=vq1FQu8Huct4vBEt52poFNupP1D8Chm2FKj367BmcB4,11
knowit/providers/mediainfo.py,sha256=PQxBfeN75M79NGeKXL3rYfbYOJf2H1Hp0XWuBdwD4f4,16163 knowit/providers/mediainfo.py,sha256=PQxBfeN75M79NGeKXL3rYfbYOJf2H1Hp0XWuBdwD4f4,16163
knowit/providers/mkvmerge.py,sha256=s8n1K3nmUcnbOIRfVCGcD7WELUCrIkCzFHWLvTy9JdI,10511 knowit/providers/mkvmerge.py,sha256=s8n1K3nmUcnbOIRfVCGcD7WELUCrIkCzFHWLvTy9JdI,10511
knowit/rules/__init__.py,sha256=lBOmgKQ_h5qcgNlV6bdVWwus2lyO96wdwmezdVubhg8,330 knowit/rules/__init__.py,sha256=lBOmgKQ_h5qcgNlV6bdVWwus2lyO96wdwmezdVubhg8,330
knowit/rules/audio.py,sha256=r3U0IwVADJICVzirV-vya6BwHd3NJUGOmP_obyZ0HRg,3295 knowit/rules/audio.py,sha256=-adiFZjG6Rowam6ZmnwuhLSujR8ud_lILGa4Vc4ib9E,3351
knowit/rules/general.py,sha256=78Io4Pda8TWZyeBw3aiGl9Ry0OfmguxAtEd_pvabtis,904 knowit/rules/general.py,sha256=78Io4Pda8TWZyeBw3aiGl9Ry0OfmguxAtEd_pvabtis,904
knowit/rules/subtitle.py,sha256=a7R1Jst8U-j1gig7CJJS15uywoiedLkADIkr2b8wnm4,771 knowit/rules/subtitle.py,sha256=a7R1Jst8U-j1gig7CJJS15uywoiedLkADIkr2b8wnm4,771
knowit/rules/video.py,sha256=yjXiKgmf__q4Ol6kECof5R8TGhq7cHuBoEt5o8aQbw8,2297 knowit/rules/video.py,sha256=yjXiKgmf__q4Ol6kECof5R8TGhq7cHuBoEt5o8aQbw8,2297
knowit/serializer.py,sha256=pX9-xxkX09rT0PXe4jcXcp-fDW7BdXlz0PCtckDvAZ0,6526 knowit/serializer.py,sha256=Y3vuKeAVLEnpAbv8WRqZRCiF9p-f4fcCcwMOcPVc47Q,6525
knowit/units.py,sha256=TFPAh8Pv9cV9ltDIj9dAd966rrEEsL8_Fgy1nQcSs08,824 knowit/units.py,sha256=TFPAh8Pv9cV9ltDIj9dAd966rrEEsL8_Fgy1nQcSs08,824
knowit/utils.py,sha256=YwtW10A5UXQv6aqwdVon4RdLN-9sOjOCEqO4AVvmYM4,4268 knowit/utils.py,sha256=Sif7QWpMyvUy0ZKSCIkx_BOauzFJDy_AEetg2mLVT3Y,4273

@ -2,9 +2,13 @@ import os
import typing import typing
from logging import NullHandler, getLogger from logging import NullHandler, getLogger
from pkg_resources import resource_stream
import yaml import yaml
try:
from importlib.resources import files
except ImportError:
from importlib_resources import files # type: ignore[assignment,no-redef,import-not-found]
from knowit.serializer import get_yaml_loader from knowit.serializer import get_yaml_loader
logger = getLogger(__name__) logger = getLogger(__name__)
@ -28,7 +32,8 @@ class Config:
def build(cls, path: typing.Optional[typing.Union[str, os.PathLike]] = None) -> 'Config': def build(cls, path: typing.Optional[typing.Union[str, os.PathLike]] = None) -> 'Config':
"""Build config instance.""" """Build config instance."""
loader = get_yaml_loader() loader = get_yaml_loader()
with resource_stream('knowit', 'defaults.yml') as stream: config_file = files(__package__).joinpath('defaults.yml')
with config_file.open('rb') as stream:
cfgs = [yaml.load(stream, Loader=loader)] cfgs = [yaml.load(stream, Loader=loader)]
if path: if path:

@ -81,7 +81,11 @@ class Language(Property[babelfish.Language]):
"""Handle languages.""" """Handle languages."""
try: try:
if len(value) == 3: if len(value) == 3:
return babelfish.Language.fromalpha3b(value) try:
return babelfish.Language.fromalpha3b(value)
except babelfish.Error:
# Try alpha3t if alpha3b fails
return babelfish.Language.fromalpha3t(value)
return babelfish.Language.fromietf(value) return babelfish.Language.fromietf(value)
except (babelfish.Error, ValueError): except (babelfish.Error, ValueError):

@ -1,5 +1,5 @@
import typing import typing
from decimal import Decimal from decimal import Decimal, InvalidOperation
from logging import NullHandler, getLogger from logging import NullHandler, getLogger
from knowit.core import Rule from knowit.core import Rule
@ -53,8 +53,8 @@ class AudioChannelsRule(Rule):
c = Decimal('0.0') c = Decimal('0.0')
for i in position.split('/'): for i in position.split('/'):
try: try:
c += Decimal(i) c += Decimal(i.replace('.?', ''))
except ValueError: except (ValueError, InvalidOperation):
logger.debug('Invalid %s: %s', self.description, i) logger.debug('Invalid %s: %s', self.description, i)
pass pass

@ -143,7 +143,7 @@ def format_duration(
seconds = int(seconds - (minutes * 60)) seconds = int(seconds - (minutes * 60))
if profile == 'human': if profile == 'human':
if hours > 0: if hours > 0:
return f'{hours} hours {minutes:02d} minutes { seconds:02d} seconds' return f'{hours} hours {minutes:02d} minutes {seconds:02d} seconds'
if minutes > 0: if minutes > 0:
return f'{minutes} minutes {seconds:02d} seconds' return f'{minutes} minutes {seconds:02d} seconds'
return f'{seconds} seconds' return f'{seconds} seconds'

@ -122,7 +122,7 @@ def build_path_candidates(
def round_decimal(value: Decimal, min_digits=0, max_digits: typing.Optional[int] = None): def round_decimal(value: Decimal, min_digits=0, max_digits: typing.Optional[int] = None):
exponent = value.normalize().as_tuple().exponent exponent = int(value.normalize().as_tuple().exponent)
if exponent >= 0: if exponent >= 0:
return round(value, min_digits) return round(value, min_digits)

@ -24,7 +24,7 @@ guessit==3.8.0
h11==0.14.0 h11==0.14.0
inflect==7.0.0 inflect==7.0.0
jsonschema<=4.17.3 # newer version require other compiled dependency jsonschema<=4.17.3 # newer version require other compiled dependency
knowit==0.5.2 knowit==0.5.3
Mako==1.3.2 Mako==1.3.2
pycountry==23.12.11 pycountry==23.12.11
pyrsistent==0.20.0 pyrsistent==0.20.0

Loading…
Cancel
Save