31 Commits

Author SHA1 Message Date
Markus Heiser
bdfe1c2a15 [mod] engines: migration of the individual cache solutions to EngineCache
The EngineCache class replaces all previously individual solutions for caches in
the context of the engines.

- demo_offline.py
- duckduckgo.py
- radio_browser.py
- soundcloud.py
- startpage.py
- wolframalpha_api.py
- wolframalpha_noapi.py

Search term to test most of the modified engines::

    !ddg !rb !sc !sp !wa test

    !ddg !rb !sc !sp !wa foo

For introspection of the DB, jump into developer environment and run command to
show cache state::

    $ ./manage pyenv.cmd bash --norc --noprofile
    (py3) python -m searx.enginelib cache state

    cache tables and key/values
    ===========================
    [demo_offline        ] 2025-04-22 11:32:50 count        --> (int) 4
    [startpage           ] 2025-04-22 12:32:30 SC_CODE      --> (str) fSOBnhEMlDfE20
    [duckduckgo          ] 2025-04-22 12:32:31 4dff493e.... --> (str) 4-128634958369380006627592672385352473325
    [duckduckgo          ] 2025-04-22 12:40:06 3e2583e2.... --> (str) 4-263126175288871260472289814259666848451
    [radio_browser       ] 2025-04-23 11:33:08 servers      --> (list) ['https://de2.api.radio-browser.info',  ...]
    [soundcloud          ] 2025-04-29 11:40:06 guest_client_id --> (str) EjkRJG0BLNEZquRiPZYdNtJdyGtTuHdp
    [wolframalpha        ] 2025-04-22 12:40:06 code         --> (str) 5aa79f86205ad26188e0e26e28fb7ae7
    number of tables: 6
    number of key/value pairs: 7

In the "cache tables and key/values" section, the table name (engine name) is at
first position on the second there is the calculated expire date and on the
third and fourth position the key/value is shown.

About duckduckgo: The *vqd coode* of ddg depends on the query term and therefore
the key is a hash value of the query term (to not to store the raw query term).

In the "properties of ENGINES_CACHE" section all properties of the SQLiteAppl /
ExpireCache and their last modification date are shown::

    properties of ENGINES_CACHE
    ===========================
    [last modified: 2025-04-22 11:32:27] DB_SCHEMA           : 1
    [last modified: 2025-04-22 11:32:27] LAST_MAINTENANCE    :
    [last modified: 2025-04-22 11:32:27] crypt_hash          : ca612e3566fdfd7cf7efe2b1c9349f461158d07cb78a3750e5c5be686aa8ebdc
    [last modified: 2025-04-22 11:32:30] CACHE-TABLE--demo_offline: demo_offline
    [last modified: 2025-04-22 11:32:30] CACHE-TABLE--startpage: startpage
    [last modified: 2025-04-22 11:32:31] CACHE-TABLE--duckduckgo: duckduckgo
    [last modified: 2025-04-22 11:33:08] CACHE-TABLE--radio_browser: radio_browser
    [last modified: 2025-04-22 11:40:06] CACHE-TABLE--soundcloud: soundcloud
    [last modified: 2025-04-22 11:40:06] CACHE-TABLE--wolframalpha: wolframalpha

These properties provide information about the state of the ExpireCache and
control the behavior.  For example, the maintenance intervals are controlled by
the last modification date of the LAST_MAINTENANCE property and the hash value
of the password can be used to detect whether the password has been changed (in
this case the DB entries can no longer be decrypted and the entire cache must be
discarded).

Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
2025-05-03 08:39:12 +02:00
Markus Heiser
8205f170ff [mod] pylint all engines without PYLINT_SEARXNG_DISABLE_OPTION
Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
2024-03-11 14:55:38 +01:00
Markus Heiser
3d96a9839a [format.python] initial formatting of the python code
This patch was generated by black [1]::

    make format.python

[1] https://github.com/psf/black

Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
2021-12-27 09:26:22 +01:00
Alexandre Flament
d14994dc73 [httpx] replace searx.poolrequests by searx.network
settings.yml:

* outgoing.networks:
   * can contains network definition
   * propertiers: enable_http, verify, http2, max_connections, max_keepalive_connections,
     keepalive_expiry, local_addresses, support_ipv4, support_ipv6, proxies, max_redirects, retries
   * retries: 0 by default, number of times searx retries to send the HTTP request (using different IP & proxy each time)
   * local_addresses can be "192.168.0.1/24" (it supports IPv6)
   * support_ipv4 & support_ipv6: both True by default
     see https://github.com/searx/searx/pull/1034
* each engine can define a "network" section:
   * either a full network description
   * either reference an existing network

* all HTTP requests of engine use the same HTTP configuration (it was not the case before, see proxy configuration in master)
2021-04-12 17:25:56 +02:00
Alexandre Flament
a4dcfa025c [enh] engines: add about variable
move meta information from comment to the about variable
so the preferences, the documentation can show these information
2021-01-14 20:57:17 +01:00
Dalf
1022228d95 Drop Python 2 (1/n): remove unicode string and url_utils 2020-09-10 10:39:04 +02:00
Noémi Ványi
a6f20caf32 add initial support for offline engines && command engine 2019-10-16 15:52:48 +02:00
Adam Tauber
78365ffb8a [enh] add init function to engines which loads parallel 2017-06-06 22:20:20 +02:00
Adam Tauber
52e615dede [enh] py3 compatibility 2017-05-15 12:02:30 +02:00
Adam Tauber
16bdc0baf4 [mod] do not escape html content in engines 2016-12-09 18:59:19 +01:00
firebovine
e145fdb86d #607 - noapi fix 2016-09-10 17:43:12 -04:00
marc
09ee2aa69d [fix] Result text in Wolfram|Alpha (#607) 2016-09-10 17:42:04 -04:00
Adam Tauber
104cdb7d03 [fix] remove unused imports ++ int token timestamp by default 2016-08-13 01:13:41 +02:00
a01200356
8f3b33de23 [fix] remove unnecesary async calls in wolframalpha_noapi
setting async to false in the request did the job, lol.
2016-02-28 02:05:52 -06:00
a01200356
4cea71e3bb [fix] merge with 79705450dfdf321c19839bce23c56d9d4a86ba68 2016-02-28 01:04:29 -06:00
a01200356
4d8996eb4d [enh] unit tests for wolframalpha 2016-02-28 00:47:36 -06:00
a01200356
78d3f3d6b1 [enh] infobox for wolframalpha
TODO:
    - infobox styles
    - unit tests

ISSUES:
    - no_api version needs to re-call server for additional pods, such
      as plots. therefore, it's even slower than before. comment out the
part that calls get_async_pod if requests reach timeout or increase
timeout in settings.yml.
2016-02-27 19:06:44 -06:00
Adam Tauber
79705450df [fix] wolframalpha unicode inputs 2016-02-25 14:55:26 +01:00
Adam Tauber
db72fc6449 [fix] encapsulate wolframalpha token fetching errors 2016-02-17 17:21:54 +01:00
Adam Tauber
d06178139f [fix] wolframalpha page changes
related issues: #508 #509
2016-02-17 17:11:51 +01:00
a01200356
30bfbf2e07 [fix] pep8 2016-01-18 11:34:38 -06:00
a01200356
2a15944b58 [fix] test in wolframalpha_noapi 2016-01-03 22:03:33 -06:00
a01200356
d997265e55 add tests for unicode strings in wolframalpha 2016-01-03 19:57:37 -06:00
a01200356
576d37f256 [fix] unescape htmlentities in wolframalpha_noapi's answer 2016-01-03 15:58:01 -06:00
a01200356
19d025f0e7 [fix] pass wolframalpha_noapi tests 2016-01-02 01:49:32 -06:00
a01200356
e9d35c1309 update tests for wolframalpha 2016-01-02 00:41:14 -06:00
a01200356
0871c7ca85 [enh] wolframalpha appends result 2016-01-01 22:02:10 -06:00
a01200356
be54e5269a Add tests for the Wolfram Alpha engines (both API and NO API versions) 2015-12-30 00:53:15 -06:00
a01200356
5ed8f4da80 Make wolframalpha_noapi.py flake8 compliant 2015-12-29 21:37:48 -06:00
a01200356
d827fc49a1 Remove unnecessary code in wolframalpha_noapi engine
The answer is scraped from a js function, so parsing the html tree
doesn't achieve anything here.
2015-12-29 21:11:49 -06:00
a01200356
b51ba32f61 Wolfram Alpha (no API needed now) 2015-12-29 20:59:51 -06:00