mirror of
				https://github.com/searxng/searxng.git
				synced 2025-10-31 18:47:07 -04:00 
			
		
		
		
	The errors make pyright usage useless since a new error won't be seen [1]. [1] https://github.com/searxng/searxng/pull/1569 ``` searx/compat.py:11:27 - error: Expression of type "Type[cached_property[_T@cached_property]]" cannot be assigned to declared type "Type[cached_property]" "Type[cached_property[_T@cached_property]]" is incompatible with "Type[cached_property]" Type "Type[cached_property[_T@cached_property]]" cannot be assigned to type "Type[cached_property]" (reportGeneralTypeIssues) searx/utils.py:69:36 - error: Expression of type "None" cannot be assigned to parameter of type "str" Type "None" cannot be assigned to type "str" (reportGeneralTypeIssues) searx/utils.py:573:85 - error: Expression of type "None" cannot be assigned to parameter of type "int" Type "None" cannot be assigned to type "int" (reportGeneralTypeIssues) searx/webapp.py:1306:22 - error: Argument of type "str" cannot be assigned to parameter "__a" of type "BytesPath" in function "join" Type "str" cannot be assigned to type "BytesPath" "str" is incompatible with "bytes" "str" is incompatible with protocol "PathLike[bytes]" "__fspath__" is not present (reportGeneralTypeIssues) searx/webapp.py:1306:68 - error: Argument of type "Literal['themes']" cannot be assigned to parameter "paths" of type "BytesPath" in function "join" Type "Literal['themes']" cannot be assigned to type "BytesPath" "Literal['themes']" is incompatible with "bytes" "Literal['themes']" is incompatible with protocol "PathLike[bytes]" "__fspath__" is not present (reportGeneralTypeIssues) searx/webapp.py:1306:78 - error: Argument of type "str | Any | None" cannot be assigned to parameter "paths" of type "BytesPath" in function "join" Type "str | Any | None" cannot be assigned to type "BytesPath" Type "str" cannot be assigned to type "BytesPath" "str" is incompatible with "bytes" "str" is incompatible with protocol "PathLike[bytes]" "__fspath__" is not present (reportGeneralTypeIssues) searx/webapp.py:1306:85 - error: Argument of type "Literal['img']" cannot be assigned to parameter "paths" of type "BytesPath" in function "join" Type "Literal['img']" cannot be assigned to type "BytesPath" "Literal['img']" is incompatible with "bytes" "Literal['img']" is incompatible with protocol "PathLike[bytes]" "__fspath__" is not present (reportGeneralTypeIssues) searx/engines/mongodb.py:8:6 - warning: Import "pymongo" could not be resolved (reportMissingImports) searx/engines/mysql_server.py:9:8 - warning: Import "mysql.connector" could not be resolved (reportMissingImports) searx/engines/postgresql.py:9:8 - warning: Import "psycopg2" could not be resolved from source (reportMissingModuleSource) searx/engines/xpath.py:187:28 - warning: "categories" is not defined (reportUndefinedVariable) searx/search/__init__.py:184:82 - warning: "flask" is not defined (reportUndefinedVariable) searx/search/checker/background.py:19:26 - error: Type of "schedule" is partially unknown Type of "schedule" is "(delay: Any, func: Any, *args: Any) -> Literal[True]" (reportUnknownVariableType) searx/shared/__init__.py:8:12 - warning: Import "uwsgi" could not be resolved (reportMissingImports) searx/shared/shared_uwsgi.py:5:8 - warning: Import "uwsgi" could not be resolved (reportMissingImports) ```
		
			
				
	
	
		
			74 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # SPDX-License-Identifier: AGPL-3.0-or-later
 | |
| # lint: pylint
 | |
| # pyright: basic
 | |
| """Module for backward compatibility.
 | |
| 
 | |
| """
 | |
| # pylint: disable=C,R
 | |
| 
 | |
| 
 | |
| __all__ = ('cached_property',)
 | |
| 
 | |
| 
 | |
| try:
 | |
|     from functools import cached_property  # type: ignore
 | |
| 
 | |
| except ImportError:
 | |
| 
 | |
|     # cache_property has been added in py3.8 [1]
 | |
|     #
 | |
|     # To support cache_property in py3.7 the implementation from 3.8 has been
 | |
|     # copied here.  This code can be cleanup with EOL of py3.7.
 | |
|     #
 | |
|     # [1] https://docs.python.org/3/library/functools.html#functools.cached_property
 | |
| 
 | |
|     from threading import RLock
 | |
| 
 | |
|     _NOT_FOUND = object()
 | |
| 
 | |
|     class cached_property:
 | |
|         def __init__(self, func):
 | |
|             self.func = func
 | |
|             self.attrname = None
 | |
|             self.__doc__ = func.__doc__
 | |
|             self.lock = RLock()
 | |
| 
 | |
|         def __set_name__(self, owner, name):
 | |
|             if self.attrname is None:
 | |
|                 self.attrname = name
 | |
|             elif name != self.attrname:
 | |
|                 raise TypeError(
 | |
|                     "Cannot assign the same cached_property to two different names "
 | |
|                     f"({self.attrname!r} and {name!r})."
 | |
|                 )
 | |
| 
 | |
|         def __get__(self, instance, owner=None):
 | |
|             if instance is None:
 | |
|                 return self
 | |
|             if self.attrname is None:
 | |
|                 raise TypeError("Cannot use cached_property instance without calling __set_name__ on it.")
 | |
|             try:
 | |
|                 cache = instance.__dict__
 | |
|             except AttributeError:  # not all objects have __dict__ (e.g. class defines slots)
 | |
|                 msg = (
 | |
|                     f"No '__dict__' attribute on {type(instance).__name__!r} "
 | |
|                     f"instance to cache {self.attrname!r} property."
 | |
|                 )
 | |
|                 raise TypeError(msg) from None
 | |
|             val = cache.get(self.attrname, _NOT_FOUND)
 | |
|             if val is _NOT_FOUND:
 | |
|                 with self.lock:
 | |
|                     # check if another thread filled cache while we awaited lock
 | |
|                     val = cache.get(self.attrname, _NOT_FOUND)
 | |
|                     if val is _NOT_FOUND:
 | |
|                         val = self.func(instance)
 | |
|                         try:
 | |
|                             cache[self.attrname] = val
 | |
|                         except TypeError:
 | |
|                             msg = (
 | |
|                                 f"The '__dict__' attribute on {type(instance).__name__!r} instance "
 | |
|                                 f"does not support item assignment for caching {self.attrname!r} property."
 | |
|                             )
 | |
|                             raise TypeError(msg) from None
 | |
|             return val
 |