mirror of
				https://github.com/searxng/searxng.git
				synced 2025-10-31 10:37:06 -04:00 
			
		
		
		
	- pyright configuration [1]_ - stub files: types-lxml [2]_ - addition of various type hints - enable use of new type system features on older Python versions [3]_ - ``.tool-versions`` - set python to lowest version we support (3.10.18) [4]_: Older versions typically lack some typing features found in newer Python versions. Therefore, for local type checking (before commit), it is necessary to use the older Python interpreter. .. [1] https://docs.basedpyright.com/v1.20.0/configuration/config-files/ .. [2] https://pypi.org/project/types-lxml/ .. [3] https://typing-extensions.readthedocs.io/en/latest/# .. [4] https://mise.jdx.dev/configuration.html#tool-versions Signed-off-by: Markus Heiser <markus.heiser@darmarit.de> Format: reST
		
			
				
	
	
		
			148 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			148 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env bash
 | |
| # SPDX-License-Identifier: AGPL-3.0-or-later
 | |
| 
 | |
| test.help() {
 | |
|     cat <<EOF
 | |
| test.:
 | |
|   yamllint  : lint YAML files (YAMLLINT_FILES)
 | |
|   pylint    : lint ./searx, ./searxng_extra and ./tests
 | |
|   pyright   : check Python types
 | |
|   black     : check Python code format
 | |
|   shfmt     : check Shell script code format
 | |
|   unit      : run unit tests
 | |
|   coverage  : run unit tests with coverage
 | |
|   robot     : run robot test
 | |
|   rst       : test .rst files incl. README.rst
 | |
|   clean     : clean intermediate test stuff
 | |
| EOF
 | |
| }
 | |
| 
 | |
| if [ "$VERBOSE" = "1" ]; then
 | |
|     TEST_NOSE2_VERBOSE="-vvv"
 | |
| fi
 | |
| 
 | |
| test.yamllint() {
 | |
|     build_msg TEST "[yamllint] $YAMLLINT_FILES"
 | |
|     pyenv.cmd yamllint --strict --format parsable "${YAMLLINT_FILES[@]}"
 | |
|     dump_return $?
 | |
| }
 | |
| 
 | |
| test.pylint() {
 | |
|     (
 | |
|         set -e
 | |
|         pyenv.activate
 | |
|         PYLINT_OPTIONS="--rcfile .pylintrc"
 | |
| 
 | |
|         build_msg TEST "[pylint] ./searx/engines"
 | |
|         # shellcheck disable=SC2086
 | |
|         pylint ${PYLINT_OPTIONS} ${PYLINT_VERBOSE} \
 | |
|             --additional-builtins="traits,supported_languages,language_aliases,logger,categories" \
 | |
|             searx/engines
 | |
| 
 | |
|         build_msg TEST "[pylint] ./searx ./searxng_extra ./tests"
 | |
|         # shellcheck disable=SC2086
 | |
|         pylint ${PYLINT_OPTIONS} ${PYLINT_VERBOSE} \
 | |
|             --ignore=searx/engines \
 | |
|             searx searx/searxng.msg \
 | |
|             searxng_extra searxng_extra/docs_prebuild \
 | |
|             tests
 | |
|     )
 | |
|     dump_return $?
 | |
| }
 | |
| 
 | |
| test.pyright() {
 | |
|     # For integration into your IDE (editor) use the basedpyright-langserver
 | |
|     # (LSP) installed by 'pipx basedpyright' and read:
 | |
|     #
 | |
|     # - https://docs.basedpyright.com/latest/installation/ides/
 | |
|     #
 | |
|     # The $REPO_ROOT/pyrightconfig.json uses the virtualenv found in
 | |
|     # $REPO_ROOT/local/py3 and create by a 'make pyenv'
 | |
| 
 | |
|     build_msg TEST "[basedpyright] static type check of python sources"
 | |
|     LANG=C pyenv.cmd basedpyright
 | |
|     # ignore exit value from basedpyright
 | |
|     # dump_return $?
 | |
|     return 0
 | |
| }
 | |
| 
 | |
| test.pyright_modified() {
 | |
|     build_msg TEST "[basedpyright] static type check of local modified files"
 | |
|     local pyrigth_files=()
 | |
|     readarray -t pyrigth_files < <(git status --porcelain | awk 'match($2,".py[i]*$") {print $2}')
 | |
|     if [ ${#pyrigth_files[@]} -eq 0 ]; then
 | |
|         echo "there are no locally modified python files that could be checked"
 | |
|     else
 | |
|         pyenv.cmd basedpyright --level warning "${pyrigth_files[@]}"
 | |
|     fi
 | |
|     # ignore exit value from basedpyright
 | |
|     # dump_return $?
 | |
|     return 0
 | |
| }
 | |
| 
 | |
| test.black() {
 | |
|     build_msg TEST "[black] $BLACK_TARGETS"
 | |
|     pyenv.cmd black --check --diff "${BLACK_OPTIONS[@]}" "${BLACK_TARGETS[@]}"
 | |
|     dump_return $?
 | |
| }
 | |
| 
 | |
| test.shfmt() {
 | |
|     build_msg TEST "[shfmt] ${SHFMT_SCRIPTS[*]}"
 | |
|     go.tool shfmt --list --diff "${SHFMT_SCRIPTS[@]}"
 | |
|     dump_return $?
 | |
| }
 | |
| 
 | |
| test.unit() {
 | |
|     build_msg TEST 'tests/unit'
 | |
|     # shellcheck disable=SC2086
 | |
|     pyenv.cmd python -m nose2 ${TEST_NOSE2_VERBOSE} -s tests/unit
 | |
|     dump_return $?
 | |
| }
 | |
| 
 | |
| test.coverage() {
 | |
|     build_msg TEST 'unit test coverage'
 | |
|     (
 | |
|         set -e
 | |
|         pyenv.activate
 | |
|         # shellcheck disable=SC2086
 | |
|         python -m nose2 ${TEST_NOSE2_VERBOSE} -C --log-capture --with-coverage --coverage searx -s tests/unit
 | |
|         coverage report
 | |
|         coverage html
 | |
|     )
 | |
|     dump_return $?
 | |
| }
 | |
| 
 | |
| test.robot() {
 | |
|     build_msg TEST 'robot'
 | |
|     gecko.driver
 | |
|     PYTHONPATH=. pyenv.cmd python -m tests.robot
 | |
|     dump_return $?
 | |
| }
 | |
| 
 | |
| test.rst() {
 | |
|     build_msg TEST "[reST markup] ${RST_FILES[*]}"
 | |
| 
 | |
|     for rst in "${RST_FILES[@]}"; do
 | |
|         pyenv.cmd rst2html --halt error "$rst" >/dev/null || die 42 "fix issue in $rst"
 | |
|     done
 | |
| }
 | |
| 
 | |
| test.themes() {
 | |
|     build_msg TEST 'SearXNG themes'
 | |
|     themes.test
 | |
|     dump_return $?
 | |
| }
 | |
| 
 | |
| test.pybabel() {
 | |
|     TEST_BABEL_FOLDER="build/test/pybabel"
 | |
|     build_msg TEST "[extract messages] pybabel"
 | |
|     mkdir -p "${TEST_BABEL_FOLDER}"
 | |
|     pyenv.cmd pybabel extract -F babel.cfg -o "${TEST_BABEL_FOLDER}/messages.pot" searx
 | |
| }
 | |
| 
 | |
| test.clean() {
 | |
|     build_msg CLEAN "test stuff"
 | |
|     rm -rf geckodriver.log .coverage coverage/
 | |
|     dump_return $?
 | |
| }
 |