mirror of
https://github.com/morpheus65535/bazarr.git
synced 2025-04-19 12:24:59 -04:00
Added experimental Python 3.13 compatibility. #2803
This commit is contained in:
parent
4642db334a
commit
759da8a111
2 changed files with 37 additions and 9 deletions
|
@ -3,7 +3,22 @@
|
|||
import os
|
||||
import argparse
|
||||
|
||||
from distutils.util import strtobool
|
||||
|
||||
def strtobool(val):
|
||||
"""Convert a string representation of truth to true (1) or false (0).
|
||||
|
||||
True values are 'y', 'yes', 't', 'true', 'on', and '1'; false values
|
||||
are 'n', 'no', 'f', 'false', 'off', and '0'. Raises ValueError if
|
||||
'val' is anything else.
|
||||
"""
|
||||
val = val.lower()
|
||||
if val in ('y', 'yes', 't', 'true', 'on', '1'):
|
||||
return 1
|
||||
elif val in ('n', 'no', 'f', 'false', 'off', '0'):
|
||||
return 0
|
||||
else:
|
||||
raise ValueError(f"invalid truth value {val!r}")
|
||||
|
||||
|
||||
no_update = os.environ.get("NO_UPDATE", "false").strip() == "true"
|
||||
no_cli = os.environ.get("NO_CLI", "false").strip() == "true"
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from __future__ import absolute_import
|
||||
from pkg_resources import EntryPoint
|
||||
|
||||
import re
|
||||
from importlib.metadata import EntryPoint
|
||||
|
||||
from stevedore import ExtensionManager
|
||||
|
||||
|
@ -26,23 +28,23 @@ class RegistrableExtensionManager(ExtensionManager):
|
|||
self.registered_extensions = []
|
||||
|
||||
#: Internal extensions with entry point syntax
|
||||
self.internal_extensions = internal_extensions
|
||||
self.internal_extensions = list(internal_extensions)
|
||||
|
||||
super(RegistrableExtensionManager, self).__init__(namespace, **kwargs)
|
||||
super().__init__(namespace, **kwargs)
|
||||
|
||||
def list_entry_points(self):
|
||||
# copy of default extensions
|
||||
eps = list(super(RegistrableExtensionManager, self).list_entry_points())
|
||||
eps = list(super().list_entry_points())
|
||||
|
||||
# internal extensions
|
||||
for iep in self.internal_extensions:
|
||||
ep = EntryPoint.parse(iep)
|
||||
ep = parse_entry_point(iep, self.namespace)
|
||||
if ep.name not in [e.name for e in eps]:
|
||||
eps.append(ep)
|
||||
|
||||
# registered extensions
|
||||
for rep in self.registered_extensions:
|
||||
ep = EntryPoint.parse(rep)
|
||||
ep = parse_entry_point(rep, self.namespace)
|
||||
if ep.name not in [e.name for e in eps]:
|
||||
eps.append(ep)
|
||||
|
||||
|
@ -58,7 +60,7 @@ class RegistrableExtensionManager(ExtensionManager):
|
|||
if entry_point in self.registered_extensions:
|
||||
raise ValueError('Extension already registered')
|
||||
|
||||
ep = EntryPoint.parse(entry_point)
|
||||
ep = parse_entry_point(entry_point, self.namespace)
|
||||
if ep.name in self.names():
|
||||
raise ValueError('An extension with the same name already exist')
|
||||
|
||||
|
@ -77,7 +79,7 @@ class RegistrableExtensionManager(ExtensionManager):
|
|||
if entry_point not in self.registered_extensions:
|
||||
raise ValueError('Extension not registered')
|
||||
|
||||
ep = EntryPoint.parse(entry_point)
|
||||
ep = parse_entry_point(entry_point, self.namespace)
|
||||
self.registered_extensions.remove(entry_point)
|
||||
if self._extensions_by_name is not None:
|
||||
del self._extensions_by_name[ep.name]
|
||||
|
@ -87,6 +89,17 @@ class RegistrableExtensionManager(ExtensionManager):
|
|||
break
|
||||
|
||||
|
||||
def parse_entry_point(src: str, group: str) -> EntryPoint:
|
||||
"""Parse a string entry point."""
|
||||
pattern = re.compile(r'\s*(?P<name>.+?)\s*=\s*(?P<value>.+)')
|
||||
m = pattern.match(src)
|
||||
if not m:
|
||||
msg = "EntryPoint must be in the 'name = module:attrs' format"
|
||||
raise ValueError(msg, src)
|
||||
res = m.groupdict()
|
||||
return EntryPoint(res['name'], res['value'], group)
|
||||
|
||||
|
||||
#: Provider manager
|
||||
provider_manager = RegistrableExtensionManager('subliminal.providers', [
|
||||
'addic7ed = subliminal.providers.addic7ed:Addic7edProvider',
|
||||
|
|
Loading…
Add table
Reference in a new issue