mirror of
https://github.com/searxng/searxng.git
synced 2026-08-06 07:11:23 +00:00
Compare commits
16 Commits
6cc4350a34
...
c51cce9384
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c51cce9384 | ||
|
|
33729439c5 | ||
|
|
20ce88a274 | ||
|
|
8595e467ce | ||
|
|
3392beb914 | ||
|
|
c6c6d3027c | ||
|
|
d19eb3903e | ||
|
|
f45d4145e6 | ||
|
|
937eb907d3 | ||
|
|
851c0e5cc0 | ||
|
|
07a94d4d2e | ||
|
|
e9157b3c1a | ||
|
|
5ae3b3f17e | ||
|
|
50ac76ce94 | ||
|
|
5aea044eb5 | ||
|
|
808dcaf1e2 |
230
client/simple/package-lock.json
generated
230
client/simple/package-lock.json
generated
@@ -31,8 +31,8 @@
|
|||||||
"stylelint-prettier": "^5.0.3",
|
"stylelint-prettier": "^5.0.3",
|
||||||
"svgo": "^3.3.2",
|
"svgo": "^3.3.2",
|
||||||
"swiped-events": "^1.2.0",
|
"swiped-events": "^1.2.0",
|
||||||
"vite": "^6.2.6",
|
"vite": "^6.3.2",
|
||||||
"vite-plugin-static-copy": "^2.3.0",
|
"vite-plugin-static-copy": "^2.3.1",
|
||||||
"vite-plugin-stylelint": "^6.0.0",
|
"vite-plugin-stylelint": "^6.0.0",
|
||||||
"webpack": "^5.99.5",
|
"webpack": "^5.99.5",
|
||||||
"webpack-cli": "^6.0.1"
|
"webpack-cli": "^6.0.1"
|
||||||
@@ -1486,9 +1486,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-android-arm-eabi": {
|
"node_modules/@rollup/rollup-android-arm-eabi": {
|
||||||
"version": "4.34.7",
|
"version": "4.40.0",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.7.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.40.0.tgz",
|
||||||
"integrity": "sha512-l6CtzHYo8D2TQ3J7qJNpp3Q1Iye56ssIAtqbM2H8axxCEEwvN7o8Ze9PuIapbxFL3OHrJU2JBX6FIIVnP/rYyw==",
|
"integrity": "sha512-+Fbls/diZ0RDerhE8kyC6hjADCXA1K4yVNlH0EYfd2XjyH0UGgzaQ8MlT0pCXAThfxv3QUAczHaL+qSv1E4/Cg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm"
|
"arm"
|
||||||
],
|
],
|
||||||
@@ -1500,9 +1500,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-android-arm64": {
|
"node_modules/@rollup/rollup-android-arm64": {
|
||||||
"version": "4.34.7",
|
"version": "4.40.0",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.7.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.40.0.tgz",
|
||||||
"integrity": "sha512-KvyJpFUueUnSp53zhAa293QBYqwm94TgYTIfXyOTtidhm5V0LbLCJQRGkQClYiX3FXDQGSvPxOTD/6rPStMMDg==",
|
"integrity": "sha512-PPA6aEEsTPRz+/4xxAmaoWDqh67N7wFbgFUJGMnanCFs0TV99M0M8QhhaSCks+n6EbQoFvLQgYOGXxlMGQe/6w==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -1514,9 +1514,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-darwin-arm64": {
|
"node_modules/@rollup/rollup-darwin-arm64": {
|
||||||
"version": "4.34.7",
|
"version": "4.40.0",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.7.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.40.0.tgz",
|
||||||
"integrity": "sha512-jq87CjmgL9YIKvs8ybtIC98s/M3HdbqXhllcy9EdLV0yMg1DpxES2gr65nNy7ObNo/vZ/MrOTxt0bE5LinL6mA==",
|
"integrity": "sha512-GwYOcOakYHdfnjjKwqpTGgn5a6cUX7+Ra2HeNj/GdXvO2VJOOXCiYYlRFU4CubFM67EhbmzLOmACKEfvp3J1kQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -1528,9 +1528,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-darwin-x64": {
|
"node_modules/@rollup/rollup-darwin-x64": {
|
||||||
"version": "4.34.7",
|
"version": "4.40.0",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.7.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.40.0.tgz",
|
||||||
"integrity": "sha512-rSI/m8OxBjsdnMMg0WEetu/w+LhLAcCDEiL66lmMX4R3oaml3eXz3Dxfvrxs1FbzPbJMaItQiksyMfv1hoIxnA==",
|
"integrity": "sha512-CoLEGJ+2eheqD9KBSxmma6ld01czS52Iw0e2qMZNpPDlf7Z9mj8xmMemxEucinev4LgHalDPczMyxzbq+Q+EtA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -1542,9 +1542,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-freebsd-arm64": {
|
"node_modules/@rollup/rollup-freebsd-arm64": {
|
||||||
"version": "4.34.7",
|
"version": "4.40.0",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.7.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.40.0.tgz",
|
||||||
"integrity": "sha512-oIoJRy3ZrdsXpFuWDtzsOOa/E/RbRWXVokpVrNnkS7npz8GEG++E1gYbzhYxhxHbO2om1T26BZjVmdIoyN2WtA==",
|
"integrity": "sha512-r7yGiS4HN/kibvESzmrOB/PxKMhPTlz+FcGvoUIKYoTyGd5toHp48g1uZy1o1xQvybwwpqpe010JrcGG2s5nkg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -1556,9 +1556,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-freebsd-x64": {
|
"node_modules/@rollup/rollup-freebsd-x64": {
|
||||||
"version": "4.34.7",
|
"version": "4.40.0",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.7.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.40.0.tgz",
|
||||||
"integrity": "sha512-X++QSLm4NZfZ3VXGVwyHdRf58IBbCu9ammgJxuWZYLX0du6kZvdNqPwrjvDfwmi6wFdvfZ/s6K7ia0E5kI7m8Q==",
|
"integrity": "sha512-mVDxzlf0oLzV3oZOr0SMJ0lSDd3xC4CmnWJ8Val8isp9jRGl5Dq//LLDSPFrasS7pSm6m5xAcKaw3sHXhBjoRw==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -1570,9 +1570,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
|
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
|
||||||
"version": "4.34.7",
|
"version": "4.40.0",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.7.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.40.0.tgz",
|
||||||
"integrity": "sha512-Z0TzhrsNqukTz3ISzrvyshQpFnFRfLunYiXxlCRvcrb3nvC5rVKI+ZXPFG/Aa4jhQa1gHgH3A0exHaRRN4VmdQ==",
|
"integrity": "sha512-y/qUMOpJxBMy8xCXD++jeu8t7kzjlOCkoxxajL58G62PJGBZVl/Gwpm7JK9+YvlB701rcQTzjUZ1JgUoPTnoQA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm"
|
"arm"
|
||||||
],
|
],
|
||||||
@@ -1584,9 +1584,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
|
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
|
||||||
"version": "4.34.7",
|
"version": "4.40.0",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.7.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.40.0.tgz",
|
||||||
"integrity": "sha512-nkznpyXekFAbvFBKBy4nNppSgneB1wwG1yx/hujN3wRnhnkrYVugMTCBXED4+Ni6thoWfQuHNYbFjgGH0MBXtw==",
|
"integrity": "sha512-GoCsPibtVdJFPv/BOIvBKO/XmwZLwaNWdyD8TKlXuqp0veo2sHE+A/vpMQ5iSArRUz/uaoj4h5S6Pn0+PdhRjg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm"
|
"arm"
|
||||||
],
|
],
|
||||||
@@ -1598,9 +1598,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-linux-arm64-gnu": {
|
"node_modules/@rollup/rollup-linux-arm64-gnu": {
|
||||||
"version": "4.34.7",
|
"version": "4.40.0",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.7.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.40.0.tgz",
|
||||||
"integrity": "sha512-KCjlUkcKs6PjOcxolqrXglBDcfCuUCTVlX5BgzgoJHw+1rWH1MCkETLkLe5iLLS9dP5gKC7mp3y6x8c1oGBUtA==",
|
"integrity": "sha512-L5ZLphTjjAD9leJzSLI7rr8fNqJMlGDKlazW2tX4IUF9P7R5TMQPElpH82Q7eNIDQnQlAyiNVfRPfP2vM5Avvg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -1612,9 +1612,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-linux-arm64-musl": {
|
"node_modules/@rollup/rollup-linux-arm64-musl": {
|
||||||
"version": "4.34.7",
|
"version": "4.40.0",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.7.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.40.0.tgz",
|
||||||
"integrity": "sha512-uFLJFz6+utmpbR313TTx+NpPuAXbPz4BhTQzgaP0tozlLnGnQ6rCo6tLwaSa6b7l6gRErjLicXQ1iPiXzYotjw==",
|
"integrity": "sha512-ATZvCRGCDtv1Y4gpDIXsS+wfFeFuLwVxyUBSLawjgXK2tRE6fnsQEkE4csQQYWlBlsFztRzCnBvWVfcae/1qxQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -1626,9 +1626,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-linux-loongarch64-gnu": {
|
"node_modules/@rollup/rollup-linux-loongarch64-gnu": {
|
||||||
"version": "4.34.7",
|
"version": "4.40.0",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.7.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.40.0.tgz",
|
||||||
"integrity": "sha512-ws8pc68UcJJqCpneDFepnwlsMUFoWvPbWXT/XUrJ7rWUL9vLoIN3GAasgG+nCvq8xrE3pIrd+qLX/jotcLy0Qw==",
|
"integrity": "sha512-wG9e2XtIhd++QugU5MD9i7OnpaVb08ji3P1y/hNbxrQ3sYEelKJOq1UJ5dXczeo6Hj2rfDEL5GdtkMSVLa/AOg==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"loong64"
|
"loong64"
|
||||||
],
|
],
|
||||||
@@ -1640,9 +1640,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
|
"node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
|
||||||
"version": "4.34.7",
|
"version": "4.40.0",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.7.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.40.0.tgz",
|
||||||
"integrity": "sha512-vrDk9JDa/BFkxcS2PbWpr0C/LiiSLxFbNOBgfbW6P8TBe9PPHx9Wqbvx2xgNi1TOAyQHQJ7RZFqBiEohm79r0w==",
|
"integrity": "sha512-vgXfWmj0f3jAUvC7TZSU/m/cOE558ILWDzS7jBhiCAFpY2WEBn5jqgbqvmzlMjtp8KlLcBlXVD2mkTSEQE6Ixw==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"ppc64"
|
"ppc64"
|
||||||
],
|
],
|
||||||
@@ -1654,9 +1654,23 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
|
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
|
||||||
"version": "4.34.7",
|
"version": "4.40.0",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.7.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.40.0.tgz",
|
||||||
"integrity": "sha512-rB+ejFyjtmSo+g/a4eovDD1lHWHVqizN8P0Hm0RElkINpS0XOdpaXloqM4FBkF9ZWEzg6bezymbpLmeMldfLTw==",
|
"integrity": "sha512-uJkYTugqtPZBS3Z136arevt/FsKTF/J9dEMTX/cwR7lsAW4bShzI2R0pJVw+hcBTWF4dxVckYh72Hk3/hWNKvA==",
|
||||||
|
"cpu": [
|
||||||
|
"riscv64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"node_modules/@rollup/rollup-linux-riscv64-musl": {
|
||||||
|
"version": "4.40.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.40.0.tgz",
|
||||||
|
"integrity": "sha512-rKmSj6EXQRnhSkE22+WvrqOqRtk733x3p5sWpZilhmjnkHkpeCgWsFFo0dGnUGeA+OZjRl3+VYq+HyCOEuwcxQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"riscv64"
|
"riscv64"
|
||||||
],
|
],
|
||||||
@@ -1668,9 +1682,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-linux-s390x-gnu": {
|
"node_modules/@rollup/rollup-linux-s390x-gnu": {
|
||||||
"version": "4.34.7",
|
"version": "4.40.0",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.7.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.40.0.tgz",
|
||||||
"integrity": "sha512-nNXNjo4As6dNqRn7OrsnHzwTgtypfRA3u3AKr0B3sOOo+HkedIbn8ZtFnB+4XyKJojIfqDKmbIzO1QydQ8c+Pw==",
|
"integrity": "sha512-SpnYlAfKPOoVsQqmTFJ0usx0z84bzGOS9anAC0AZ3rdSo3snecihbhFTlJZ8XMwzqAcodjFU4+/SM311dqE5Sw==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"s390x"
|
"s390x"
|
||||||
],
|
],
|
||||||
@@ -1682,9 +1696,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-linux-x64-gnu": {
|
"node_modules/@rollup/rollup-linux-x64-gnu": {
|
||||||
"version": "4.34.7",
|
"version": "4.40.0",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.7.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.40.0.tgz",
|
||||||
"integrity": "sha512-9kPVf9ahnpOMSGlCxXGv980wXD0zRR3wyk8+33/MXQIpQEOpaNe7dEHm5LMfyRZRNt9lMEQuH0jUKj15MkM7QA==",
|
"integrity": "sha512-RcDGMtqF9EFN8i2RYN2W+64CdHruJ5rPqrlYw+cgM3uOVPSsnAQps7cpjXe9be/yDp8UC7VLoCoKC8J3Kn2FkQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -1696,9 +1710,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-linux-x64-musl": {
|
"node_modules/@rollup/rollup-linux-x64-musl": {
|
||||||
"version": "4.34.7",
|
"version": "4.40.0",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.7.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.40.0.tgz",
|
||||||
"integrity": "sha512-7wJPXRWTTPtTFDFezA8sle/1sdgxDjuMoRXEKtx97ViRxGGkVQYovem+Q8Pr/2HxiHp74SSRG+o6R0Yq0shPwQ==",
|
"integrity": "sha512-HZvjpiUmSNx5zFgwtQAV1GaGazT2RWvqeDi0hV+AtC8unqqDSsaFjPxfsO6qPtKRRg25SisACWnJ37Yio8ttaw==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -1710,9 +1724,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-win32-arm64-msvc": {
|
"node_modules/@rollup/rollup-win32-arm64-msvc": {
|
||||||
"version": "4.34.7",
|
"version": "4.40.0",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.7.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.40.0.tgz",
|
||||||
"integrity": "sha512-MN7aaBC7mAjsiMEZcsJvwNsQVNZShgES/9SzWp1HC9Yjqb5OpexYnRjF7RmE4itbeesHMYYQiAtUAQaSKs2Rfw==",
|
"integrity": "sha512-UtZQQI5k/b8d7d3i9AZmA/t+Q4tk3hOC0tMOMSq2GlMYOfxbesxG4mJSeDp0EHs30N9bsfwUvs3zF4v/RzOeTQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"arm64"
|
"arm64"
|
||||||
],
|
],
|
||||||
@@ -1724,9 +1738,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-win32-ia32-msvc": {
|
"node_modules/@rollup/rollup-win32-ia32-msvc": {
|
||||||
"version": "4.34.7",
|
"version": "4.40.0",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.7.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.40.0.tgz",
|
||||||
"integrity": "sha512-aeawEKYswsFu1LhDM9RIgToobquzdtSc4jSVqHV8uApz4FVvhFl/mKh92wc8WpFc6aYCothV/03UjY6y7yLgbg==",
|
"integrity": "sha512-+m03kvI2f5syIqHXCZLPVYplP8pQch9JHyXKZ3AGMKlg8dCyr2PKHjwRLiW53LTrN/Nc3EqHOKxUxzoSPdKddA==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"ia32"
|
"ia32"
|
||||||
],
|
],
|
||||||
@@ -1738,9 +1752,9 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@rollup/rollup-win32-x64-msvc": {
|
"node_modules/@rollup/rollup-win32-x64-msvc": {
|
||||||
"version": "4.34.7",
|
"version": "4.40.0",
|
||||||
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.7.tgz",
|
"resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.40.0.tgz",
|
||||||
"integrity": "sha512-4ZedScpxxIrVO7otcZ8kCX1mZArtH2Wfj3uFCxRJ9NO80gg1XV0U/b2f/MKaGwj2X3QopHfoWiDQ917FRpwY3w==",
|
"integrity": "sha512-lpPE1cLfP5oPzVjKMx10pgBmKELQnFJXHgvtHCtuJWOv8MxqdEIMNtgHgBFf7Ea2/7EuVwa9fodWUfXAlXZLZQ==",
|
||||||
"cpu": [
|
"cpu": [
|
||||||
"x64"
|
"x64"
|
||||||
],
|
],
|
||||||
@@ -1815,9 +1829,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@types/estree": {
|
"node_modules/@types/estree": {
|
||||||
"version": "1.0.6",
|
"version": "1.0.7",
|
||||||
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz",
|
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz",
|
||||||
"integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==",
|
"integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
@@ -5623,13 +5637,13 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/rollup": {
|
"node_modules/rollup": {
|
||||||
"version": "4.34.7",
|
"version": "4.40.0",
|
||||||
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.34.7.tgz",
|
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.40.0.tgz",
|
||||||
"integrity": "sha512-8qhyN0oZ4x0H6wmBgfKxJtxM7qS98YJ0k0kNh5ECVtuchIJ7z9IVVvzpmtQyT10PXKMtBxYr1wQ5Apg8RS8kXQ==",
|
"integrity": "sha512-Noe455xmA96nnqH5piFtLobsGbCij7Tu+tb3c1vYjNbTkfzGqXqQXG3wJaYXkRZuQ0vEYN4bhwg7QnIrqB5B+w==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/estree": "1.0.6"
|
"@types/estree": "1.0.7"
|
||||||
},
|
},
|
||||||
"bin": {
|
"bin": {
|
||||||
"rollup": "dist/bin/rollup"
|
"rollup": "dist/bin/rollup"
|
||||||
@@ -5639,25 +5653,26 @@
|
|||||||
"npm": ">=8.0.0"
|
"npm": ">=8.0.0"
|
||||||
},
|
},
|
||||||
"optionalDependencies": {
|
"optionalDependencies": {
|
||||||
"@rollup/rollup-android-arm-eabi": "4.34.7",
|
"@rollup/rollup-android-arm-eabi": "4.40.0",
|
||||||
"@rollup/rollup-android-arm64": "4.34.7",
|
"@rollup/rollup-android-arm64": "4.40.0",
|
||||||
"@rollup/rollup-darwin-arm64": "4.34.7",
|
"@rollup/rollup-darwin-arm64": "4.40.0",
|
||||||
"@rollup/rollup-darwin-x64": "4.34.7",
|
"@rollup/rollup-darwin-x64": "4.40.0",
|
||||||
"@rollup/rollup-freebsd-arm64": "4.34.7",
|
"@rollup/rollup-freebsd-arm64": "4.40.0",
|
||||||
"@rollup/rollup-freebsd-x64": "4.34.7",
|
"@rollup/rollup-freebsd-x64": "4.40.0",
|
||||||
"@rollup/rollup-linux-arm-gnueabihf": "4.34.7",
|
"@rollup/rollup-linux-arm-gnueabihf": "4.40.0",
|
||||||
"@rollup/rollup-linux-arm-musleabihf": "4.34.7",
|
"@rollup/rollup-linux-arm-musleabihf": "4.40.0",
|
||||||
"@rollup/rollup-linux-arm64-gnu": "4.34.7",
|
"@rollup/rollup-linux-arm64-gnu": "4.40.0",
|
||||||
"@rollup/rollup-linux-arm64-musl": "4.34.7",
|
"@rollup/rollup-linux-arm64-musl": "4.40.0",
|
||||||
"@rollup/rollup-linux-loongarch64-gnu": "4.34.7",
|
"@rollup/rollup-linux-loongarch64-gnu": "4.40.0",
|
||||||
"@rollup/rollup-linux-powerpc64le-gnu": "4.34.7",
|
"@rollup/rollup-linux-powerpc64le-gnu": "4.40.0",
|
||||||
"@rollup/rollup-linux-riscv64-gnu": "4.34.7",
|
"@rollup/rollup-linux-riscv64-gnu": "4.40.0",
|
||||||
"@rollup/rollup-linux-s390x-gnu": "4.34.7",
|
"@rollup/rollup-linux-riscv64-musl": "4.40.0",
|
||||||
"@rollup/rollup-linux-x64-gnu": "4.34.7",
|
"@rollup/rollup-linux-s390x-gnu": "4.40.0",
|
||||||
"@rollup/rollup-linux-x64-musl": "4.34.7",
|
"@rollup/rollup-linux-x64-gnu": "4.40.0",
|
||||||
"@rollup/rollup-win32-arm64-msvc": "4.34.7",
|
"@rollup/rollup-linux-x64-musl": "4.40.0",
|
||||||
"@rollup/rollup-win32-ia32-msvc": "4.34.7",
|
"@rollup/rollup-win32-arm64-msvc": "4.40.0",
|
||||||
"@rollup/rollup-win32-x64-msvc": "4.34.7",
|
"@rollup/rollup-win32-ia32-msvc": "4.40.0",
|
||||||
|
"@rollup/rollup-win32-x64-msvc": "4.40.0",
|
||||||
"fsevents": "~2.3.2"
|
"fsevents": "~2.3.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -6792,15 +6807,18 @@
|
|||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/vite": {
|
"node_modules/vite": {
|
||||||
"version": "6.2.6",
|
"version": "6.3.2",
|
||||||
"resolved": "https://registry.npmjs.org/vite/-/vite-6.2.6.tgz",
|
"resolved": "https://registry.npmjs.org/vite/-/vite-6.3.2.tgz",
|
||||||
"integrity": "sha512-9xpjNl3kR4rVDZgPNdTL0/c6ao4km69a/2ihNQbcANz8RuCOK3hQBmLSJf3bRKVQjVMda+YvizNE8AwvogcPbw==",
|
"integrity": "sha512-ZSvGOXKGceizRQIZSz7TGJ0pS3QLlVY/9hwxVh17W3re67je1RKYzFHivZ/t0tubU78Vkyb9WnHPENSBCzbckg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"esbuild": "^0.25.0",
|
"esbuild": "^0.25.0",
|
||||||
|
"fdir": "^6.4.3",
|
||||||
|
"picomatch": "^4.0.2",
|
||||||
"postcss": "^8.5.3",
|
"postcss": "^8.5.3",
|
||||||
"rollup": "^4.30.1"
|
"rollup": "^4.34.9",
|
||||||
|
"tinyglobby": "^0.2.12"
|
||||||
},
|
},
|
||||||
"bin": {
|
"bin": {
|
||||||
"vite": "bin/vite.js"
|
"vite": "bin/vite.js"
|
||||||
@@ -6864,9 +6882,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/vite-plugin-static-copy": {
|
"node_modules/vite-plugin-static-copy": {
|
||||||
"version": "2.3.0",
|
"version": "2.3.1",
|
||||||
"resolved": "https://registry.npmjs.org/vite-plugin-static-copy/-/vite-plugin-static-copy-2.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/vite-plugin-static-copy/-/vite-plugin-static-copy-2.3.1.tgz",
|
||||||
"integrity": "sha512-LLKwhhHetGaCnWz4mas4qqjjguDka6/6b4+SeIohRroj8aCE7QTfiZECfPecslFQkWZ3HdQuq5kOPmWZjNYlKA==",
|
"integrity": "sha512-EfsPcBm3ewg3UMG8RJaC0ADq6/qnUZnokXx4By4+2cAcipjT9i0Y0owIJGqmZI7d6nxk4qB1q5aXOwNuSyPdyA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@@ -6943,6 +6961,34 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/vite/node_modules/fdir": {
|
||||||
|
"version": "6.4.3",
|
||||||
|
"resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz",
|
||||||
|
"integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"peerDependencies": {
|
||||||
|
"picomatch": "^3 || ^4"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"picomatch": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/vite/node_modules/picomatch": {
|
||||||
|
"version": "4.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz",
|
||||||
|
"integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
},
|
||||||
|
"funding": {
|
||||||
|
"url": "https://github.com/sponsors/jonschlinkert"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/watchpack": {
|
"node_modules/watchpack": {
|
||||||
"version": "2.4.2",
|
"version": "2.4.2",
|
||||||
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz",
|
"resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz",
|
||||||
|
|||||||
@@ -29,8 +29,8 @@
|
|||||||
"stylelint-prettier": "^5.0.3",
|
"stylelint-prettier": "^5.0.3",
|
||||||
"svgo": "^3.3.2",
|
"svgo": "^3.3.2",
|
||||||
"swiped-events": "^1.2.0",
|
"swiped-events": "^1.2.0",
|
||||||
"vite": "^6.2.6",
|
"vite": "^6.3.2",
|
||||||
"vite-plugin-static-copy": "^2.3.0",
|
"vite-plugin-static-copy": "^2.3.1",
|
||||||
"vite-plugin-stylelint": "^6.0.0",
|
"vite-plugin-stylelint": "^6.0.0",
|
||||||
"webpack": "^5.99.5",
|
"webpack": "^5.99.5",
|
||||||
"webpack-cli": "^6.0.1"
|
"webpack-cli": "^6.0.1"
|
||||||
|
|||||||
@@ -16,8 +16,14 @@
|
|||||||
open_metrics: ''
|
open_metrics: ''
|
||||||
|
|
||||||
``debug`` : ``$SEARXNG_DEBUG``
|
``debug`` : ``$SEARXNG_DEBUG``
|
||||||
Allow a more detailed log if you run SearXNG directly. Display *detailed* error
|
In debug mode, the server provides an interactive debugger, will reload when
|
||||||
messages in the browser too, so this must be deactivated in production.
|
code is changed and activates a verbose logging.
|
||||||
|
|
||||||
|
.. attention::
|
||||||
|
|
||||||
|
The debug setting is intended for local development server. Don't
|
||||||
|
activate debug (don't use a development server) when deploying to
|
||||||
|
production.
|
||||||
|
|
||||||
``donation_url`` :
|
``donation_url`` :
|
||||||
Set value to ``true`` to use your own donation page written in the
|
Set value to ``true`` to use your own donation page written in the
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
limiter: false
|
limiter: false
|
||||||
public_instance: false
|
public_instance: false
|
||||||
image_proxy: false
|
image_proxy: false
|
||||||
|
method: "POST"
|
||||||
default_http_headers:
|
default_http_headers:
|
||||||
X-Content-Type-Options : nosniff
|
X-Content-Type-Options : nosniff
|
||||||
X-Download-Options : noopen
|
X-Download-Options : noopen
|
||||||
@@ -50,6 +51,11 @@
|
|||||||
``image_proxy`` : ``$SEARXNG_IMAGE_PROXY``
|
``image_proxy`` : ``$SEARXNG_IMAGE_PROXY``
|
||||||
Allow your instance of SearXNG of being able to proxy images. Uses memory space.
|
Allow your instance of SearXNG of being able to proxy images. Uses memory space.
|
||||||
|
|
||||||
|
.. _method:
|
||||||
|
|
||||||
|
``method`` : ``$SEARXNG_METHOD``
|
||||||
|
Whether to use ``GET`` or ``POST`` HTTP method when searching.
|
||||||
|
|
||||||
.. _HTTP headers: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers
|
.. _HTTP headers: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers
|
||||||
|
|
||||||
``default_http_headers`` :
|
``default_http_headers`` :
|
||||||
|
|||||||
@@ -4,10 +4,5 @@
|
|||||||
Mullvad-Leta
|
Mullvad-Leta
|
||||||
============
|
============
|
||||||
|
|
||||||
.. contents:: Contents
|
|
||||||
:depth: 2
|
|
||||||
:local:
|
|
||||||
:backlinks: entry
|
|
||||||
|
|
||||||
.. automodule:: searx.engines.mullvad_leta
|
.. automodule:: searx.engines.mullvad_leta
|
||||||
:members:
|
:members:
|
||||||
|
|||||||
@@ -22,18 +22,18 @@ searx_dir = abspath(dirname(__file__))
|
|||||||
searx_parent_dir = abspath(dirname(dirname(__file__)))
|
searx_parent_dir = abspath(dirname(dirname(__file__)))
|
||||||
|
|
||||||
settings = {}
|
settings = {}
|
||||||
searx_debug = False
|
sxng_debug = False
|
||||||
logger = logging.getLogger('searx')
|
logger = logging.getLogger('searx')
|
||||||
|
|
||||||
_unset = object()
|
_unset = object()
|
||||||
|
|
||||||
|
|
||||||
def init_settings():
|
def init_settings():
|
||||||
"""Initialize global ``settings`` and ``searx_debug`` variables and
|
"""Initialize global ``settings`` and ``sxng_debug`` variables and
|
||||||
``logger`` from ``SEARXNG_SETTINGS_PATH``.
|
``logger`` from ``SEARXNG_SETTINGS_PATH``.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
global settings, searx_debug # pylint: disable=global-variable-not-assigned
|
global settings, sxng_debug # pylint: disable=global-variable-not-assigned
|
||||||
|
|
||||||
cfg, msg = searx.settings_loader.load_settings(load_user_settings=True)
|
cfg, msg = searx.settings_loader.load_settings(load_user_settings=True)
|
||||||
cfg = cfg or {}
|
cfg = cfg or {}
|
||||||
@@ -42,8 +42,8 @@ def init_settings():
|
|||||||
settings.clear()
|
settings.clear()
|
||||||
settings.update(cfg)
|
settings.update(cfg)
|
||||||
|
|
||||||
searx_debug = settings['general']['debug']
|
sxng_debug = get_setting("general.debug")
|
||||||
if searx_debug:
|
if sxng_debug:
|
||||||
_logging_config_debug()
|
_logging_config_debug()
|
||||||
else:
|
else:
|
||||||
logging.basicConfig(level=LOG_LEVEL_PROD, format=LOG_FORMAT_PROD)
|
logging.basicConfig(level=LOG_LEVEL_PROD, format=LOG_FORMAT_PROD)
|
||||||
|
|||||||
@@ -6628,6 +6628,172 @@
|
|||||||
"to-TO": "to"
|
"to-TO": "to"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"mullvadleta": {
|
||||||
|
"all_locale": null,
|
||||||
|
"custom": {},
|
||||||
|
"data_type": "traits_v1",
|
||||||
|
"languages": {
|
||||||
|
"ar": "ar",
|
||||||
|
"bg": "bg",
|
||||||
|
"ca": "ca",
|
||||||
|
"cs": "cs",
|
||||||
|
"da": "da",
|
||||||
|
"de": "de",
|
||||||
|
"en": "en",
|
||||||
|
"es": "es",
|
||||||
|
"et": "et",
|
||||||
|
"fi": "fi",
|
||||||
|
"fr": "fr",
|
||||||
|
"he": "he",
|
||||||
|
"hr": "hr",
|
||||||
|
"hu": "hu",
|
||||||
|
"is": "is",
|
||||||
|
"it": "it",
|
||||||
|
"ja": "jp",
|
||||||
|
"ko": "ko",
|
||||||
|
"lt": "lt",
|
||||||
|
"lv": "lv",
|
||||||
|
"nb": "nb",
|
||||||
|
"nl": "nl",
|
||||||
|
"pl": "pl",
|
||||||
|
"pt": "pt",
|
||||||
|
"ro": "ro",
|
||||||
|
"ru": "ru",
|
||||||
|
"sk": "sk",
|
||||||
|
"sl": "sl",
|
||||||
|
"sr": "sr",
|
||||||
|
"sv": "sv",
|
||||||
|
"tr": "tr",
|
||||||
|
"zh_Hans": "zh-hant",
|
||||||
|
"zh_Hant": "zh-hans"
|
||||||
|
},
|
||||||
|
"regions": {
|
||||||
|
"ar-SA": "sa",
|
||||||
|
"da-DK": "dk",
|
||||||
|
"de-AT": "at",
|
||||||
|
"de-BE": "be",
|
||||||
|
"de-CH": "ch",
|
||||||
|
"de-DE": "de",
|
||||||
|
"en-AU": "au",
|
||||||
|
"en-CA": "ca",
|
||||||
|
"en-GB": "uk",
|
||||||
|
"en-IN": "in",
|
||||||
|
"en-NZ": "nz",
|
||||||
|
"en-PH": "ph",
|
||||||
|
"en-US": "us",
|
||||||
|
"en-ZA": "za",
|
||||||
|
"es-AR": "ar",
|
||||||
|
"es-CL": "cl",
|
||||||
|
"es-ES": "es",
|
||||||
|
"es-MX": "mx",
|
||||||
|
"fi-FI": "fi",
|
||||||
|
"fr-BE": "be",
|
||||||
|
"fr-CA": "ca",
|
||||||
|
"fr-CH": "ch",
|
||||||
|
"fr-FR": "fr",
|
||||||
|
"id-ID": "id",
|
||||||
|
"it-CH": "ch",
|
||||||
|
"it-IT": "it",
|
||||||
|
"ja-JP": "jp",
|
||||||
|
"ko-KR": "kr",
|
||||||
|
"ms-MY": "my",
|
||||||
|
"nb-NO": "no",
|
||||||
|
"nl-BE": "be",
|
||||||
|
"nl-NL": "nl",
|
||||||
|
"pl-PL": "pl",
|
||||||
|
"pt-BR": "br",
|
||||||
|
"pt-PT": "pt",
|
||||||
|
"ru-RU": "ru",
|
||||||
|
"se-SE": "se",
|
||||||
|
"tr-TR": "tr",
|
||||||
|
"zh-CN": "cn",
|
||||||
|
"zh-HK": "hk",
|
||||||
|
"zh-TW": "tw"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"mullvadleta brave": {
|
||||||
|
"all_locale": null,
|
||||||
|
"custom": {},
|
||||||
|
"data_type": "traits_v1",
|
||||||
|
"languages": {
|
||||||
|
"ar": "ar",
|
||||||
|
"bg": "bg",
|
||||||
|
"ca": "ca",
|
||||||
|
"cs": "cs",
|
||||||
|
"da": "da",
|
||||||
|
"de": "de",
|
||||||
|
"en": "en",
|
||||||
|
"es": "es",
|
||||||
|
"et": "et",
|
||||||
|
"fi": "fi",
|
||||||
|
"fr": "fr",
|
||||||
|
"he": "he",
|
||||||
|
"hr": "hr",
|
||||||
|
"hu": "hu",
|
||||||
|
"is": "is",
|
||||||
|
"it": "it",
|
||||||
|
"ja": "jp",
|
||||||
|
"ko": "ko",
|
||||||
|
"lt": "lt",
|
||||||
|
"lv": "lv",
|
||||||
|
"nb": "nb",
|
||||||
|
"nl": "nl",
|
||||||
|
"pl": "pl",
|
||||||
|
"pt": "pt",
|
||||||
|
"ro": "ro",
|
||||||
|
"ru": "ru",
|
||||||
|
"sk": "sk",
|
||||||
|
"sl": "sl",
|
||||||
|
"sr": "sr",
|
||||||
|
"sv": "sv",
|
||||||
|
"tr": "tr",
|
||||||
|
"zh_Hans": "zh-hant",
|
||||||
|
"zh_Hant": "zh-hans"
|
||||||
|
},
|
||||||
|
"regions": {
|
||||||
|
"ar-SA": "sa",
|
||||||
|
"da-DK": "dk",
|
||||||
|
"de-AT": "at",
|
||||||
|
"de-BE": "be",
|
||||||
|
"de-CH": "ch",
|
||||||
|
"de-DE": "de",
|
||||||
|
"en-AU": "au",
|
||||||
|
"en-CA": "ca",
|
||||||
|
"en-GB": "uk",
|
||||||
|
"en-IN": "in",
|
||||||
|
"en-NZ": "nz",
|
||||||
|
"en-PH": "ph",
|
||||||
|
"en-US": "us",
|
||||||
|
"en-ZA": "za",
|
||||||
|
"es-AR": "ar",
|
||||||
|
"es-CL": "cl",
|
||||||
|
"es-ES": "es",
|
||||||
|
"es-MX": "mx",
|
||||||
|
"fi-FI": "fi",
|
||||||
|
"fr-BE": "be",
|
||||||
|
"fr-CA": "ca",
|
||||||
|
"fr-CH": "ch",
|
||||||
|
"fr-FR": "fr",
|
||||||
|
"id-ID": "id",
|
||||||
|
"it-CH": "ch",
|
||||||
|
"it-IT": "it",
|
||||||
|
"ja-JP": "jp",
|
||||||
|
"ko-KR": "kr",
|
||||||
|
"ms-MY": "my",
|
||||||
|
"nb-NO": "no",
|
||||||
|
"nl-BE": "be",
|
||||||
|
"nl-NL": "nl",
|
||||||
|
"pl-PL": "pl",
|
||||||
|
"pt-BR": "br",
|
||||||
|
"pt-PT": "pt",
|
||||||
|
"ru-RU": "ru",
|
||||||
|
"se-SE": "se",
|
||||||
|
"tr-TR": "tr",
|
||||||
|
"zh-CN": "cn",
|
||||||
|
"zh-HK": "hk",
|
||||||
|
"zh-TW": "tw"
|
||||||
|
}
|
||||||
|
},
|
||||||
"odysee": {
|
"odysee": {
|
||||||
"all_locale": null,
|
"all_locale": null,
|
||||||
"custom": {},
|
"custom": {},
|
||||||
|
|||||||
@@ -1,46 +1,61 @@
|
|||||||
# SPDX-License-Identifier: AGPL-3.0-or-later
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
"""Mullvad Leta is a search engine proxy. Currently Leta only offers text
|
||||||
"""This is the implementation of the Mullvad-Leta meta-search engine.
|
search results not image, news or any other types of search result. Leta acts
|
||||||
|
as a proxy to Google and Brave search results. You can select which backend
|
||||||
This engine **REQUIRES** that searxng operate within a Mullvad VPN
|
search engine you wish to use, see (:py:obj:`leta_engine`).
|
||||||
|
|
||||||
If using docker, consider using gluetun for easily connecting to the Mullvad
|
|
||||||
|
|
||||||
- https://github.com/qdm12/gluetun
|
|
||||||
|
|
||||||
Otherwise, follow instructions provided by Mullvad for enabling the VPN on Linux
|
|
||||||
|
|
||||||
- https://mullvad.net/en/help/install-mullvad-app-linux
|
|
||||||
|
|
||||||
.. hint::
|
.. hint::
|
||||||
|
|
||||||
The :py:obj:`EngineTraits` is empty by default. Maintainers have to run
|
Leta caches each search for up to 30 days. For example, if you use search
|
||||||
``make data.traits`` (in the Mullvad VPN / :py:obj:`fetch_traits`) and rebase
|
terms like ``news``, contrary to your intention you'll get very old results!
|
||||||
the modified JSON file ``searx/data/engine_traits.json`` on every single
|
|
||||||
update of SearXNG!
|
|
||||||
|
Configuration
|
||||||
|
=============
|
||||||
|
|
||||||
|
The engine has the following additional settings:
|
||||||
|
|
||||||
|
- :py:obj:`leta_engine` (:py:obj:`LetaEnginesType`)
|
||||||
|
|
||||||
|
You can configure one Leta engine for Google and one for Brave:
|
||||||
|
|
||||||
|
.. code:: yaml
|
||||||
|
|
||||||
|
- name: mullvadleta
|
||||||
|
engine: mullvad_leta
|
||||||
|
leta_engine: google
|
||||||
|
shortcut: ml
|
||||||
|
|
||||||
|
- name: mullvadleta brave
|
||||||
|
engine: mullvad_leta
|
||||||
|
network: mullvadleta # use network from engine "mullvadleta" configured above
|
||||||
|
leta_engine: brave
|
||||||
|
shortcut: mlb
|
||||||
|
|
||||||
|
Implementations
|
||||||
|
===============
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from typing import TYPE_CHECKING
|
import typing
|
||||||
|
from urllib.parse import urlencode
|
||||||
|
import babel
|
||||||
from httpx import Response
|
from httpx import Response
|
||||||
from lxml import html
|
from lxml import html
|
||||||
from searx.enginelib.traits import EngineTraits
|
from searx.enginelib.traits import EngineTraits
|
||||||
from searx.locales import region_tag, get_official_locales
|
from searx.locales import get_official_locales, language_tag, region_tag
|
||||||
from searx.utils import eval_xpath, extract_text, eval_xpath_list
|
from searx.utils import eval_xpath_list
|
||||||
from searx.exceptions import SearxEngineResponseException
|
from searx.result_types import EngineResults, MainResult
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if typing.TYPE_CHECKING:
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
logger = logging.getLogger()
|
logger = logging.getLogger()
|
||||||
|
|
||||||
traits: EngineTraits
|
traits: EngineTraits
|
||||||
|
|
||||||
use_cache: bool = True # non-cache use only has 100 searches per day!
|
|
||||||
|
|
||||||
leta_engine: str = 'google'
|
|
||||||
|
|
||||||
search_url = "https://leta.mullvad.net"
|
search_url = "https://leta.mullvad.net"
|
||||||
|
|
||||||
# about
|
# about
|
||||||
@@ -54,154 +69,205 @@ about = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
# engine dependent config
|
# engine dependent config
|
||||||
categories = ['general', 'web']
|
categories = ["general", "web"]
|
||||||
paging = True
|
paging = True
|
||||||
max_page = 50
|
max_page = 10
|
||||||
time_range_support = True
|
time_range_support = True
|
||||||
time_range_dict = {
|
time_range_dict = {
|
||||||
"day": "d1",
|
"day": "d",
|
||||||
"week": "w1",
|
"week": "w",
|
||||||
"month": "m1",
|
"month": "m",
|
||||||
"year": "y1",
|
"year": "y",
|
||||||
}
|
}
|
||||||
|
|
||||||
available_leta_engines = [
|
LetaEnginesType = typing.Literal["google", "brave"]
|
||||||
'google', # first will be default if provided engine is invalid
|
"""Engine types supported by mullvadleta."""
|
||||||
'brave',
|
|
||||||
]
|
leta_engine: LetaEnginesType = "google"
|
||||||
|
"""Select Leta's engine type from :py:obj:`LetaEnginesType`."""
|
||||||
|
|
||||||
|
|
||||||
def is_vpn_connected(dom: html.HtmlElement) -> bool:
|
def init(_):
|
||||||
"""Returns true if the VPN is connected, False otherwise"""
|
l = typing.get_args(LetaEnginesType)
|
||||||
connected_text = extract_text(eval_xpath(dom, '//main/div/p[1]'))
|
if leta_engine not in l:
|
||||||
return connected_text != 'You are not connected to Mullvad VPN.'
|
raise ValueError(f"leta_engine '{leta_engine}' is invalid, use one of {', '.join(l)}")
|
||||||
|
|
||||||
|
|
||||||
def assign_headers(headers: dict) -> dict:
|
class DataNodeQueryMetaDataIndices(typing.TypedDict):
|
||||||
"""Assigns the headers to make a request to Mullvad Leta"""
|
"""Indices into query metadata."""
|
||||||
headers['Accept'] = "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8"
|
|
||||||
headers['Content-Type'] = "application/x-www-form-urlencoded"
|
success: int
|
||||||
headers['Host'] = "leta.mullvad.net"
|
q: int # pylint: disable=invalid-name
|
||||||
headers['Origin'] = "https://leta.mullvad.net"
|
country: int
|
||||||
return headers
|
language: int
|
||||||
|
lastUpdated: int
|
||||||
|
engine: int
|
||||||
|
items: int
|
||||||
|
infobox: int
|
||||||
|
news: int
|
||||||
|
timestamp: int
|
||||||
|
altered: int
|
||||||
|
page: int
|
||||||
|
next: int # if -1, there no more results are available
|
||||||
|
previous: int
|
||||||
|
|
||||||
|
|
||||||
|
class DataNodeResultIndices(typing.TypedDict):
|
||||||
|
"""Indices into query resultsdata."""
|
||||||
|
|
||||||
|
link: int
|
||||||
|
snippet: int
|
||||||
|
title: int
|
||||||
|
favicon: int
|
||||||
|
|
||||||
|
|
||||||
def request(query: str, params: dict):
|
def request(query: str, params: dict):
|
||||||
country = traits.get_region(params.get('searxng_locale', 'all'), traits.all_locale) # type: ignore
|
params["method"] = "GET"
|
||||||
|
args = {
|
||||||
result_engine = leta_engine
|
|
||||||
if leta_engine not in available_leta_engines:
|
|
||||||
result_engine = available_leta_engines[0]
|
|
||||||
logger.warning(
|
|
||||||
'Configured engine "%s" not one of the available engines %s, defaulting to "%s"',
|
|
||||||
leta_engine,
|
|
||||||
available_leta_engines,
|
|
||||||
result_engine,
|
|
||||||
)
|
|
||||||
|
|
||||||
params['url'] = search_url
|
|
||||||
params['method'] = 'POST'
|
|
||||||
params['data'] = {
|
|
||||||
"q": query,
|
"q": query,
|
||||||
"gl": country if country is str else '',
|
"engine": leta_engine,
|
||||||
'engine': result_engine,
|
"x-sveltekit-invalidated": "001", # hardcoded from all requests seen
|
||||||
}
|
}
|
||||||
# pylint: disable=undefined-variable
|
|
||||||
if use_cache:
|
|
||||||
params['data']['oc'] = "on"
|
|
||||||
# pylint: enable=undefined-variable
|
|
||||||
|
|
||||||
if params['time_range'] in time_range_dict:
|
country = traits.get_region(params.get("searxng_locale"), traits.all_locale) # type: ignore
|
||||||
params['dateRestrict'] = time_range_dict[params['time_range']]
|
if country:
|
||||||
else:
|
args["country"] = country
|
||||||
params['dateRestrict'] = ''
|
|
||||||
|
|
||||||
if params['pageno'] > 1:
|
language = traits.get_language(params.get("searxng_locale"), traits.all_locale) # type: ignore
|
||||||
# Page 1 is n/a, Page 2 is 11, page 3 is 21, ...
|
if language:
|
||||||
params['data']['start'] = ''.join([str(params['pageno'] - 1), "1"])
|
args["language"] = language
|
||||||
|
|
||||||
if params['headers'] is None:
|
if params["time_range"] in time_range_dict:
|
||||||
params['headers'] = {}
|
args["lastUpdated"] = time_range_dict[params["time_range"]]
|
||||||
|
|
||||||
|
if params["pageno"] > 1:
|
||||||
|
args["page"] = params["pageno"]
|
||||||
|
|
||||||
|
params["url"] = f"{search_url}/search/__data.json?{urlencode(args)}"
|
||||||
|
|
||||||
assign_headers(params['headers'])
|
|
||||||
return params
|
return params
|
||||||
|
|
||||||
|
|
||||||
def extract_result(dom_result: list[html.HtmlElement]):
|
def response(resp: Response) -> EngineResults:
|
||||||
# Infoboxes sometimes appear in the beginning and will have a length of 0
|
json_response = resp.json()
|
||||||
if len(dom_result) == 3:
|
|
||||||
[a_elem, h3_elem, p_elem] = dom_result
|
|
||||||
elif len(dom_result) == 4:
|
|
||||||
[_, a_elem, h3_elem, p_elem] = dom_result
|
|
||||||
else:
|
|
||||||
return None
|
|
||||||
|
|
||||||
return {
|
nodes = json_response["nodes"]
|
||||||
'url': extract_text(a_elem.text),
|
# 0: is None
|
||||||
'title': extract_text(h3_elem),
|
# 1: has "connected=True", not useful
|
||||||
'content': extract_text(p_elem),
|
# 2: query results within "data"
|
||||||
}
|
|
||||||
|
data_nodes = nodes[2]["data"]
|
||||||
|
# Instead of nested object structure, all objects are flattened into a
|
||||||
|
# list. Rather, the first object in data_node provides indices into the
|
||||||
|
# "data_nodes" to access each searchresult (which is an object of more
|
||||||
|
# indices)
|
||||||
|
#
|
||||||
|
# Read the relative TypedDict definitions for details
|
||||||
|
|
||||||
|
query_meta_data: DataNodeQueryMetaDataIndices = data_nodes[0]
|
||||||
|
|
||||||
|
query_items_indices = query_meta_data["items"]
|
||||||
|
|
||||||
|
results = EngineResults()
|
||||||
|
for idx in data_nodes[query_items_indices]:
|
||||||
|
query_item_indices: DataNodeResultIndices = data_nodes[idx]
|
||||||
|
results.add(
|
||||||
|
MainResult(
|
||||||
|
url=data_nodes[query_item_indices["link"]],
|
||||||
|
title=data_nodes[query_item_indices["title"]],
|
||||||
|
content=data_nodes[query_item_indices["snippet"]],
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
return results
|
||||||
|
|
||||||
|
|
||||||
def extract_results(search_results: html.HtmlElement):
|
def fetch_traits(engine_traits: EngineTraits) -> None:
|
||||||
for search_result in search_results:
|
"""Fetch languages and regions from Mullvad-Leta"""
|
||||||
dom_result = eval_xpath_list(search_result, 'div/div/*')
|
|
||||||
result = extract_result(dom_result)
|
|
||||||
if result is not None:
|
|
||||||
yield result
|
|
||||||
|
|
||||||
|
def extract_table_data(table):
|
||||||
|
for row in table.xpath(".//tr")[2:]:
|
||||||
|
cells = row.xpath(".//td | .//th") # includes headers and data
|
||||||
|
if len(cells) > 1: # ensure the column exists
|
||||||
|
cell0 = cells[0].text_content().strip()
|
||||||
|
cell1 = cells[1].text_content().strip()
|
||||||
|
yield [cell0, cell1]
|
||||||
|
|
||||||
def response(resp: Response):
|
|
||||||
"""Checks if connected to Mullvad VPN, then extracts the search results from
|
|
||||||
the DOM resp: requests response object"""
|
|
||||||
|
|
||||||
dom = html.fromstring(resp.text)
|
|
||||||
if not is_vpn_connected(dom):
|
|
||||||
raise SearxEngineResponseException('Not connected to Mullvad VPN')
|
|
||||||
search_results = eval_xpath(dom.body, '//main/div[2]/div')
|
|
||||||
return list(extract_results(search_results))
|
|
||||||
|
|
||||||
|
|
||||||
def fetch_traits(engine_traits: EngineTraits):
|
|
||||||
"""Fetch languages and regions from Mullvad-Leta
|
|
||||||
|
|
||||||
.. warning::
|
|
||||||
|
|
||||||
Fetching the engine traits also requires a Mullvad VPN connection. If
|
|
||||||
not connected, then an error message will print and no traits will be
|
|
||||||
updated.
|
|
||||||
"""
|
|
||||||
# pylint: disable=import-outside-toplevel
|
# pylint: disable=import-outside-toplevel
|
||||||
# see https://github.com/searxng/searxng/issues/762
|
# see https://github.com/searxng/searxng/issues/762
|
||||||
from searx.network import post as http_post
|
from searx.network import get as http_get
|
||||||
|
|
||||||
# pylint: enable=import-outside-toplevel
|
# pylint: enable=import-outside-toplevel
|
||||||
resp = http_post(search_url, headers=assign_headers({}))
|
|
||||||
|
resp = http_get(f"{search_url}/documentation")
|
||||||
if not isinstance(resp, Response):
|
if not isinstance(resp, Response):
|
||||||
print("ERROR: failed to get response from mullvad-leta. Are you connected to the VPN?")
|
print("ERROR: failed to get response from mullvad-leta. Are you connected to the VPN?")
|
||||||
return
|
return
|
||||||
if not resp.ok:
|
if not resp.ok:
|
||||||
print("ERROR: response from mullvad-leta is not OK. Are you connected to the VPN?")
|
print("ERROR: response from mullvad-leta is not OK. Are you connected to the VPN?")
|
||||||
return
|
return
|
||||||
|
|
||||||
dom = html.fromstring(resp.text)
|
dom = html.fromstring(resp.text)
|
||||||
if not is_vpn_connected(dom):
|
|
||||||
print('ERROR: Not connected to Mullvad VPN')
|
|
||||||
return
|
|
||||||
# supported region codes
|
|
||||||
options = eval_xpath_list(dom.body, '//main/div/form/div[2]/div/select[1]/option')
|
|
||||||
if options is None or len(options) <= 0:
|
|
||||||
print('ERROR: could not find any results. Are you connected to the VPN?')
|
|
||||||
for x in options:
|
|
||||||
eng_country = x.get("value")
|
|
||||||
|
|
||||||
sxng_locales = get_official_locales(eng_country, engine_traits.languages.keys(), regional=True)
|
# There are 4 HTML tables on the documentation page for extracting information:
|
||||||
|
# 0. Keyboard Shortcuts
|
||||||
|
# 1. Query Parameters (shoutout to Mullvad for accessible docs for integration)
|
||||||
|
# 2. Country Codes [Country, Code]
|
||||||
|
# 3. Language Codes [Language, Code]
|
||||||
|
tables = eval_xpath_list(dom.body, "//table")
|
||||||
|
if tables is None or len(tables) <= 0:
|
||||||
|
print("ERROR: could not find any tables. Was the page updated?")
|
||||||
|
|
||||||
if not sxng_locales:
|
language_table = tables[3]
|
||||||
print(
|
lang_map = {
|
||||||
"ERROR: can't map from Mullvad-Leta country %s (%s) to a babel region."
|
"zh-hant": "zh_Hans",
|
||||||
% (x.get('data-name'), eng_country)
|
"zh-hans": "zh_Hant",
|
||||||
)
|
"jp": "ja",
|
||||||
|
}
|
||||||
|
|
||||||
|
for language, code in extract_table_data(language_table):
|
||||||
|
|
||||||
|
locale_tag = lang_map.get(code, code).replace("-", "_") # type: ignore
|
||||||
|
try:
|
||||||
|
locale = babel.Locale.parse(locale_tag)
|
||||||
|
except babel.UnknownLocaleError:
|
||||||
|
print(f"ERROR: Mullvad-Leta language {language} ({code}) is unknown by babel")
|
||||||
continue
|
continue
|
||||||
|
|
||||||
for sxng_locale in sxng_locales:
|
sxng_tag = language_tag(locale)
|
||||||
engine_traits.regions[region_tag(sxng_locale)] = eng_country
|
engine_traits.languages[sxng_tag] = code
|
||||||
|
|
||||||
|
country_table = tables[2]
|
||||||
|
country_map = {
|
||||||
|
"cn": "zh-CN",
|
||||||
|
"hk": "zh-HK",
|
||||||
|
"jp": "ja-JP",
|
||||||
|
"my": "ms-MY",
|
||||||
|
"tw": "zh-TW",
|
||||||
|
"uk": "en-GB",
|
||||||
|
"us": "en-US",
|
||||||
|
}
|
||||||
|
|
||||||
|
for country, code in extract_table_data(country_table):
|
||||||
|
|
||||||
|
sxng_tag = country_map.get(code)
|
||||||
|
if sxng_tag:
|
||||||
|
engine_traits.regions[sxng_tag] = code
|
||||||
|
continue
|
||||||
|
|
||||||
|
try:
|
||||||
|
locale = babel.Locale.parse(f"{code.lower()}_{code.upper()}")
|
||||||
|
except babel.UnknownLocaleError:
|
||||||
|
locale = None
|
||||||
|
|
||||||
|
if locale:
|
||||||
|
engine_traits.regions[region_tag(locale)] = code
|
||||||
|
continue
|
||||||
|
|
||||||
|
official_locales = get_official_locales(code, engine_traits.languages.keys(), regional=True)
|
||||||
|
if not official_locales:
|
||||||
|
print(f"ERROR: Mullvad-Leta country '{code}' ({country}) could not be mapped as expected.")
|
||||||
|
continue
|
||||||
|
|
||||||
|
for locale in official_locales:
|
||||||
|
engine_traits.regions[region_tag(locale)] = code
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ from searx.exceptions import SearxEngineAPIException, SearxEngineCaptchaExceptio
|
|||||||
|
|
||||||
# Metadata
|
# Metadata
|
||||||
about = {
|
about = {
|
||||||
"website": "https://m.quark.cn/",
|
"website": "https://quark.sm.cn/",
|
||||||
"wikidata_id": "Q48816502",
|
"wikidata_id": "Q48816502",
|
||||||
"use_official_api": False,
|
"use_official_api": False,
|
||||||
"require_api_key": False,
|
"require_api_key": False,
|
||||||
@@ -53,7 +53,7 @@ def request(query, params):
|
|||||||
|
|
||||||
category_config = {
|
category_config = {
|
||||||
'general': {
|
'general': {
|
||||||
'endpoint': 'https://m.quark.cn/s',
|
'endpoint': 'https://quark.sm.cn/s',
|
||||||
'params': {
|
'params': {
|
||||||
"q": query,
|
"q": query,
|
||||||
"layout": "html",
|
"layout": "html",
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ from lxml import html
|
|||||||
from searx.network import get as http_get
|
from searx.network import get as http_get
|
||||||
|
|
||||||
about = {
|
about = {
|
||||||
"website": "ttps://soundcloud.com",
|
"website": "https://soundcloud.com",
|
||||||
"wikidata_id": "Q568769",
|
"wikidata_id": "Q568769",
|
||||||
"official_api_documentation": "https://developers.soundcloud.com/docs/api/guide",
|
"official_api_documentation": "https://developers.soundcloud.com/docs/api/guide",
|
||||||
"use_official_api": False,
|
"use_official_api": False,
|
||||||
|
|||||||
51
searx/engines/steam.py
Normal file
51
searx/engines/steam.py
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||||||
|
"""Steam (store) for SearXNG."""
|
||||||
|
|
||||||
|
from urllib.parse import urlencode
|
||||||
|
|
||||||
|
from searx.utils import html_to_text
|
||||||
|
from searx.result_types import EngineResults, MainResult
|
||||||
|
|
||||||
|
about = {
|
||||||
|
"website": 'https://store.steampowered.com/',
|
||||||
|
"wikidata_id": 'Q337535',
|
||||||
|
"use_official_api": False,
|
||||||
|
"require_api_key": False,
|
||||||
|
"results": 'JSON',
|
||||||
|
}
|
||||||
|
|
||||||
|
categories = []
|
||||||
|
|
||||||
|
base_url = "https://store.steampowered.com"
|
||||||
|
|
||||||
|
|
||||||
|
def request(query, params):
|
||||||
|
query_params = {"term": query, "cc": "us", "l": "en"}
|
||||||
|
params['url'] = f'{base_url}/api/storesearch/?{urlencode(query_params)}'
|
||||||
|
return params
|
||||||
|
|
||||||
|
|
||||||
|
def response(resp) -> EngineResults:
|
||||||
|
results = EngineResults()
|
||||||
|
search_results = resp.json()
|
||||||
|
|
||||||
|
for item in search_results.get('items', []):
|
||||||
|
app_id = item.get('id')
|
||||||
|
|
||||||
|
currency = item.get('price', {}).get('currency', 'USD')
|
||||||
|
price = item.get('price', {}).get('final', 0) / 100
|
||||||
|
|
||||||
|
platforms = ', '.join([platform for platform, supported in item.get('platforms', {}).items() if supported])
|
||||||
|
|
||||||
|
content = [f'Price: {price:.2f} {currency}', f'Platforms: {platforms}']
|
||||||
|
|
||||||
|
results.add(
|
||||||
|
MainResult(
|
||||||
|
title=item.get('name'),
|
||||||
|
content=html_to_text(' | '.join(content)),
|
||||||
|
url=f'{base_url}/app/{app_id}',
|
||||||
|
thumbnail=item.get('tiny_image', ''),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
return results
|
||||||
@@ -12,7 +12,7 @@ from typing import Dict
|
|||||||
|
|
||||||
import httpx
|
import httpx
|
||||||
|
|
||||||
from searx import logger, searx_debug
|
from searx import logger, sxng_debug
|
||||||
from searx.extended_types import SXNG_Response
|
from searx.extended_types import SXNG_Response
|
||||||
from .client import new_client, get_loop, AsyncHTTPTransportNoHttp
|
from .client import new_client, get_loop, AsyncHTTPTransportNoHttp
|
||||||
from .raise_for_httperror import raise_for_httperror
|
from .raise_for_httperror import raise_for_httperror
|
||||||
@@ -186,7 +186,7 @@ class Network:
|
|||||||
local_address = next(self._local_addresses_cycle)
|
local_address = next(self._local_addresses_cycle)
|
||||||
proxies = next(self._proxies_cycle) # is a tuple so it can be part of the key
|
proxies = next(self._proxies_cycle) # is a tuple so it can be part of the key
|
||||||
key = (verify, max_redirects, local_address, proxies)
|
key = (verify, max_redirects, local_address, proxies)
|
||||||
hook_log_response = self.log_response if searx_debug else None
|
hook_log_response = self.log_response if sxng_debug else None
|
||||||
if key not in self._clients or self._clients[key].is_closed:
|
if key not in self._clients or self._clients[key].is_closed:
|
||||||
client = new_client(
|
client = new_client(
|
||||||
self.enable_http,
|
self.enable_http,
|
||||||
|
|||||||
@@ -155,7 +155,7 @@ class ExternalBangParser(QueryPartParser):
|
|||||||
return raw_value.startswith('!!') and len(raw_value) > 2
|
return raw_value.startswith('!!') and len(raw_value) > 2
|
||||||
|
|
||||||
def __call__(self, raw_value):
|
def __call__(self, raw_value):
|
||||||
value = raw_value[2:]
|
value = raw_value[2:].lower()
|
||||||
found, bang_ac_list = self._parse(value) if len(value) > 0 else (False, [])
|
found, bang_ac_list = self._parse(value) if len(value) > 0 else (False, [])
|
||||||
if self.enable_autocomplete:
|
if self.enable_autocomplete:
|
||||||
self._autocomplete(bang_ac_list)
|
self._autocomplete(bang_ac_list)
|
||||||
@@ -183,7 +183,7 @@ class BangParser(QueryPartParser):
|
|||||||
return raw_value[0] == '!' and (len(raw_value) < 2 or raw_value[1] != '!')
|
return raw_value[0] == '!' and (len(raw_value) < 2 or raw_value[1] != '!')
|
||||||
|
|
||||||
def __call__(self, raw_value):
|
def __call__(self, raw_value):
|
||||||
value = raw_value[1:].replace('-', ' ').replace('_', ' ')
|
value = raw_value[1:].replace('-', ' ').replace('_', ' ').lower()
|
||||||
found = self._parse(value) if len(value) > 0 else False
|
found = self._parse(value) if len(value) > 0 else False
|
||||||
if found and raw_value[0] == '!':
|
if found and raw_value[0] == '!':
|
||||||
self.raw_text_query.specific = True
|
self.raw_text_query.specific = True
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ from typing import Any, Dict, List, Literal, Optional, Tuple, TypedDict, Union
|
|||||||
|
|
||||||
import redis.exceptions
|
import redis.exceptions
|
||||||
|
|
||||||
from searx import logger, settings, searx_debug
|
from searx import logger, settings, sxng_debug
|
||||||
from searx.redisdb import client as get_redis_client
|
from searx.redisdb import client as get_redis_client
|
||||||
from searx.exceptions import SearxSettingsException
|
from searx.exceptions import SearxSettingsException
|
||||||
from searx.search.processors import PROCESSORS
|
from searx.search.processors import PROCESSORS
|
||||||
@@ -139,7 +139,7 @@ def initialize():
|
|||||||
signal.signal(signal.SIGUSR1, _signal_handler)
|
signal.signal(signal.SIGUSR1, _signal_handler)
|
||||||
|
|
||||||
# special case when debug is activate
|
# special case when debug is activate
|
||||||
if searx_debug and settings['checker']['off_when_debug']:
|
if sxng_debug and settings['checker']['off_when_debug']:
|
||||||
logger.info('debug mode: checker is disabled')
|
logger.info('debug mode: checker is disabled')
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|||||||
@@ -101,7 +101,8 @@ server:
|
|||||||
# 1.0 and 1.1 are supported
|
# 1.0 and 1.1 are supported
|
||||||
http_protocol_version: "1.0"
|
http_protocol_version: "1.0"
|
||||||
# POST queries are more secure as they don't show up in history but may cause
|
# POST queries are more secure as they don't show up in history but may cause
|
||||||
# problems when using Firefox containers
|
# problems when using Firefox containers.
|
||||||
|
# Is overwritten by ${SEARXNG_METHOD}
|
||||||
method: "POST"
|
method: "POST"
|
||||||
default_http_headers:
|
default_http_headers:
|
||||||
X-Content-Type-Options: nosniff
|
X-Content-Type-Options: nosniff
|
||||||
@@ -710,26 +711,6 @@ engines:
|
|||||||
search_type: news
|
search_type: news
|
||||||
disabled: true
|
disabled: true
|
||||||
|
|
||||||
- name: curlie
|
|
||||||
engine: xpath
|
|
||||||
shortcut: cl
|
|
||||||
categories: general
|
|
||||||
disabled: true
|
|
||||||
paging: true
|
|
||||||
lang_all: ''
|
|
||||||
search_url: https://curlie.org/search?q={query}&lang={lang}&start={pageno}&stime=92452189
|
|
||||||
page_size: 20
|
|
||||||
results_xpath: //div[@id="site-list-content"]/div[@class="site-item"]
|
|
||||||
url_xpath: ./div[@class="title-and-desc"]/a/@href
|
|
||||||
title_xpath: ./div[@class="title-and-desc"]/a/div
|
|
||||||
content_xpath: ./div[@class="title-and-desc"]/div[@class="site-descr"]
|
|
||||||
about:
|
|
||||||
website: https://curlie.org/
|
|
||||||
wikidata_id: Q60715723
|
|
||||||
use_official_api: false
|
|
||||||
require_api_key: false
|
|
||||||
results: HTML
|
|
||||||
|
|
||||||
- name: currency
|
- name: currency
|
||||||
engine: currency_convert
|
engine: currency_convert
|
||||||
categories: general
|
categories: general
|
||||||
@@ -1419,14 +1400,21 @@ engines:
|
|||||||
require_api_key: false
|
require_api_key: false
|
||||||
results: JSON
|
results: JSON
|
||||||
|
|
||||||
# read https://docs.searxng.org/dev/engines/online/mullvad_leta.html
|
# https://docs.searxng.org/dev/engines/online/mullvad_leta.html
|
||||||
# - name: mullvadleta
|
- name: mullvadleta
|
||||||
# engine: mullvad_leta
|
engine: mullvad_leta
|
||||||
# leta_engine: google # choose one of the following: google, brave
|
disabled: true
|
||||||
# use_cache: true # Only 100 non-cache searches per day, suggested only for private instances
|
leta_engine: google
|
||||||
# search_url: https://leta.mullvad.net
|
categories: [general, web]
|
||||||
# categories: [general, web]
|
shortcut: ml
|
||||||
# shortcut: ml
|
|
||||||
|
- name: mullvadleta brave
|
||||||
|
engine: mullvad_leta
|
||||||
|
network: mullvadleta
|
||||||
|
disabled: true
|
||||||
|
leta_engine: brave
|
||||||
|
categories: [general, web]
|
||||||
|
shortcut: mlb
|
||||||
|
|
||||||
- name: odysee
|
- name: odysee
|
||||||
engine: odysee
|
engine: odysee
|
||||||
@@ -1971,6 +1959,11 @@ engines:
|
|||||||
categories: [images, web]
|
categories: [images, web]
|
||||||
shortcut: spi
|
shortcut: spi
|
||||||
|
|
||||||
|
- name: steam
|
||||||
|
engine: steam
|
||||||
|
shortcut: stm
|
||||||
|
disabled: true
|
||||||
|
|
||||||
- name: tokyotoshokan
|
- name: tokyotoshokan
|
||||||
engine: tokyotoshokan
|
engine: tokyotoshokan
|
||||||
shortcut: tt
|
shortcut: tt
|
||||||
|
|||||||
@@ -182,7 +182,7 @@ SCHEMA = {
|
|||||||
'base_url': SettingsValue((False, str), False, 'SEARXNG_BASE_URL'),
|
'base_url': SettingsValue((False, str), False, 'SEARXNG_BASE_URL'),
|
||||||
'image_proxy': SettingsValue(bool, False, 'SEARXNG_IMAGE_PROXY'),
|
'image_proxy': SettingsValue(bool, False, 'SEARXNG_IMAGE_PROXY'),
|
||||||
'http_protocol_version': SettingsValue(('1.0', '1.1'), '1.0'),
|
'http_protocol_version': SettingsValue(('1.0', '1.1'), '1.0'),
|
||||||
'method': SettingsValue(('POST', 'GET'), 'POST'),
|
'method': SettingsValue(('POST', 'GET'), 'POST', 'SEARXNG_METHOD'),
|
||||||
'default_http_headers': SettingsValue(dict, {}),
|
'default_http_headers': SettingsValue(dict, {}),
|
||||||
},
|
},
|
||||||
'redis': {
|
'redis': {
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ sxng_locales = (
|
|||||||
('da-DK', 'Dansk', 'Danmark', 'Danish', '\U0001f1e9\U0001f1f0'),
|
('da-DK', 'Dansk', 'Danmark', 'Danish', '\U0001f1e9\U0001f1f0'),
|
||||||
('de', 'Deutsch', '', 'German', '\U0001f310'),
|
('de', 'Deutsch', '', 'German', '\U0001f310'),
|
||||||
('de-AT', 'Deutsch', 'Österreich', 'German', '\U0001f1e6\U0001f1f9'),
|
('de-AT', 'Deutsch', 'Österreich', 'German', '\U0001f1e6\U0001f1f9'),
|
||||||
|
('de-BE', 'Deutsch', 'Belgien', 'German', '\U0001f1e7\U0001f1ea'),
|
||||||
('de-CH', 'Deutsch', 'Schweiz', 'German', '\U0001f1e8\U0001f1ed'),
|
('de-CH', 'Deutsch', 'Schweiz', 'German', '\U0001f1e8\U0001f1ed'),
|
||||||
('de-DE', 'Deutsch', 'Deutschland', 'German', '\U0001f1e9\U0001f1ea'),
|
('de-DE', 'Deutsch', 'Deutschland', 'German', '\U0001f1e9\U0001f1ea'),
|
||||||
('el', 'Ελληνικά', '', 'Greek', '\U0001f310'),
|
('el', 'Ελληνικά', '', 'Greek', '\U0001f310'),
|
||||||
|
|||||||
Binary file not shown.
@@ -25,13 +25,14 @@
|
|||||||
# Yahya-Lando <yahya-lando@users.noreply.translate.codeberg.org>, 2025.
|
# Yahya-Lando <yahya-lando@users.noreply.translate.codeberg.org>, 2025.
|
||||||
# curtwheeler <curtwheeler@users.noreply.translate.codeberg.org>, 2025.
|
# curtwheeler <curtwheeler@users.noreply.translate.codeberg.org>, 2025.
|
||||||
# return42 <return42@noreply.codeberg.org>, 2025.
|
# return42 <return42@noreply.codeberg.org>, 2025.
|
||||||
|
# DZDevelopers <dzdevelopers@noreply.codeberg.org>, 2025.
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: searx\n"
|
"Project-Id-Version: searx\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2025-03-29 09:21+0000\n"
|
"POT-Creation-Date: 2025-03-29 09:21+0000\n"
|
||||||
"PO-Revision-Date: 2025-03-31 18:08+0000\n"
|
"PO-Revision-Date: 2025-04-15 10:37+0000\n"
|
||||||
"Last-Translator: return42 <return42@noreply.codeberg.org>\n"
|
"Last-Translator: DZDevelopers <dzdevelopers@noreply.codeberg.org>\n"
|
||||||
"Language-Team: Arabic <https://translate.codeberg.org/projects/searxng/"
|
"Language-Team: Arabic <https://translate.codeberg.org/projects/searxng/"
|
||||||
"searxng/ar/>\n"
|
"searxng/ar/>\n"
|
||||||
"Language: ar\n"
|
"Language: ar\n"
|
||||||
@@ -535,15 +536,15 @@ msgstr "جودة الملف"
|
|||||||
|
|
||||||
#: searx/plugins/ahmia_filter.py:32
|
#: searx/plugins/ahmia_filter.py:32
|
||||||
msgid "Ahmia blacklist"
|
msgid "Ahmia blacklist"
|
||||||
msgstr ""
|
msgstr "{دالة}"
|
||||||
|
|
||||||
#: searx/plugins/ahmia_filter.py:33
|
#: searx/plugins/ahmia_filter.py:33
|
||||||
msgid "Filter out onion results that appear in Ahmia's blacklist."
|
msgid "Filter out onion results that appear in Ahmia's blacklist."
|
||||||
msgstr ""
|
msgstr "قم بتصفية نتائج .onion التي تظهر في القائمة السوداء الخاصة بـ Ahmia."
|
||||||
|
|
||||||
#: searx/plugins/calculator.py:38
|
#: searx/plugins/calculator.py:38
|
||||||
msgid "Basic Calculator"
|
msgid "Basic Calculator"
|
||||||
msgstr ""
|
msgstr "آلة حاسبة بسيطة"
|
||||||
|
|
||||||
#: searx/plugins/calculator.py:39
|
#: searx/plugins/calculator.py:39
|
||||||
msgid "Calculate mathematical expressions via the search bar"
|
msgid "Calculate mathematical expressions via the search bar"
|
||||||
@@ -639,7 +640,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: searx/plugins/unit_converter.py:49
|
#: searx/plugins/unit_converter.py:49
|
||||||
msgid "Unit converter plugin"
|
msgid "Unit converter plugin"
|
||||||
msgstr ""
|
msgstr "إضافة محول الوحدات"
|
||||||
|
|
||||||
#: searx/plugins/unit_converter.py:50
|
#: searx/plugins/unit_converter.py:50
|
||||||
msgid "Convert between units"
|
msgid "Convert between units"
|
||||||
@@ -1190,6 +1191,8 @@ msgid ""
|
|||||||
"A URL containing your preferences. This URL can be used to restore your "
|
"A URL containing your preferences. This URL can be used to restore your "
|
||||||
"settings on a different device."
|
"settings on a different device."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"رابط يحتوي على تفضيلاتك. يمكن استخدام هذا الرابط لاستعادة إعداداتك على جهاز "
|
||||||
|
"مختلف."
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/cookies.html:46
|
#: searx/templates/simple/preferences/cookies.html:46
|
||||||
msgid "Copy preferences hash"
|
msgid "Copy preferences hash"
|
||||||
|
|||||||
Binary file not shown.
@@ -43,13 +43,14 @@
|
|||||||
# pxrb <pxrb@users.noreply.translate.codeberg.org>, 2025.
|
# pxrb <pxrb@users.noreply.translate.codeberg.org>, 2025.
|
||||||
# curtwheeler <curtwheeler@users.noreply.translate.codeberg.org>, 2025.
|
# curtwheeler <curtwheeler@users.noreply.translate.codeberg.org>, 2025.
|
||||||
# return42 <return42@noreply.codeberg.org>, 2025.
|
# return42 <return42@noreply.codeberg.org>, 2025.
|
||||||
|
# Atul_Eterno <atul_eterno@noreply.codeberg.org>, 2025.
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: searx\n"
|
"Project-Id-Version: searx\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2025-03-29 09:21+0000\n"
|
"POT-Creation-Date: 2025-03-29 09:21+0000\n"
|
||||||
"PO-Revision-Date: 2025-04-08 11:34+0000\n"
|
"PO-Revision-Date: 2025-04-24 14:06+0000\n"
|
||||||
"Last-Translator: return42 <return42@noreply.codeberg.org>\n"
|
"Last-Translator: Atul_Eterno <atul_eterno@noreply.codeberg.org>\n"
|
||||||
"Language-Team: Spanish <https://translate.codeberg.org/projects/searxng/"
|
"Language-Team: Spanish <https://translate.codeberg.org/projects/searxng/"
|
||||||
"searxng/es/>\n"
|
"searxng/es/>\n"
|
||||||
"Language: es\n"
|
"Language: es\n"
|
||||||
@@ -553,7 +554,7 @@ msgstr "Calidad del archivo"
|
|||||||
|
|
||||||
#: searx/plugins/ahmia_filter.py:32
|
#: searx/plugins/ahmia_filter.py:32
|
||||||
msgid "Ahmia blacklist"
|
msgid "Ahmia blacklist"
|
||||||
msgstr ""
|
msgstr "Lista negra de Ahmia"
|
||||||
|
|
||||||
#: searx/plugins/ahmia_filter.py:33
|
#: searx/plugins/ahmia_filter.py:33
|
||||||
msgid "Filter out onion results that appear in Ahmia's blacklist."
|
msgid "Filter out onion results that appear in Ahmia's blacklist."
|
||||||
@@ -1210,6 +1211,8 @@ msgid ""
|
|||||||
"A URL containing your preferences. This URL can be used to restore your "
|
"A URL containing your preferences. This URL can be used to restore your "
|
||||||
"settings on a different device."
|
"settings on a different device."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Una URL conteniendo sus preferencias. Esta URL puede ser usada para "
|
||||||
|
"restaurar sus ajustes en un dispositivo diferente."
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/cookies.html:46
|
#: searx/templates/simple/preferences/cookies.html:46
|
||||||
msgid "Copy preferences hash"
|
msgid "Copy preferences hash"
|
||||||
|
|||||||
Binary file not shown.
@@ -3,22 +3,23 @@
|
|||||||
# This file is distributed under the same license as the PROJECT project.
|
# This file is distributed under the same license as the PROJECT project.
|
||||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.
|
# FIRST AUTHOR <EMAIL@ADDRESS>, 2024.
|
||||||
# return42 <return42@users.noreply.translate.codeberg.org>, 2025.
|
# return42 <return42@users.noreply.translate.codeberg.org>, 2025.
|
||||||
|
# aindriu80 <aindriu80@noreply.codeberg.org>, 2025.
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PROJECT VERSION\n"
|
"Project-Id-Version: PROJECT VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2025-03-29 09:21+0000\n"
|
"POT-Creation-Date: 2025-03-29 09:21+0000\n"
|
||||||
"PO-Revision-Date: 2025-01-21 19:34+0000\n"
|
"PO-Revision-Date: 2025-04-14 09:17+0000\n"
|
||||||
"Last-Translator: return42 <return42@users.noreply.translate.codeberg.org>"
|
"Last-Translator: aindriu80 <aindriu80@noreply.codeberg.org>\n"
|
||||||
"\n"
|
"Language-Team: Irish <https://translate.codeberg.org/projects/searxng/"
|
||||||
|
"searxng/ga/>\n"
|
||||||
"Language: ga\n"
|
"Language: ga\n"
|
||||||
"Language-Team: Irish "
|
|
||||||
"<https://translate.codeberg.org/projects/searxng/searxng/ga/>\n"
|
|
||||||
"Plural-Forms: nplurals=5; plural=n==1 ? 0 : n==2 ? 1 : (n>2 && n<7) ? 2 "
|
|
||||||
":(n>6 && n<11) ? 3 : 4;\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=utf-8\n"
|
"Content-Type: text/plain; charset=utf-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=5; plural=n==1 ? 0 : n==2 ? 1 : (n>2 && n<7) ? 2 :("
|
||||||
|
"n>6 && n<11) ? 3 : 4;\n"
|
||||||
|
"X-Generator: Weblate 5.10.2\n"
|
||||||
"Generated-By: Babel 2.17.0\n"
|
"Generated-By: Babel 2.17.0\n"
|
||||||
|
|
||||||
#. CONSTANT_NAMES['NO_SUBGROUPING']
|
#. CONSTANT_NAMES['NO_SUBGROUPING']
|
||||||
@@ -437,11 +438,11 @@ msgstr "Cruthaigh luachanna randamacha éag"
|
|||||||
#: searx/answerers/statistics.py:36
|
#: searx/answerers/statistics.py:36
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "Compute {func} of the arguments"
|
msgid "Compute {func} of the arguments"
|
||||||
msgstr ""
|
msgstr "Ríomh {func} na n-argóintí"
|
||||||
|
|
||||||
#: searx/engines/openstreetmap.py:158
|
#: searx/engines/openstreetmap.py:158
|
||||||
msgid "Show route in map .."
|
msgid "Show route in map .."
|
||||||
msgstr ""
|
msgstr "Taispeáin an bealach ar an léarscáil .."
|
||||||
|
|
||||||
#: searx/engines/pdbe.py:96
|
#: searx/engines/pdbe.py:96
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
@@ -514,15 +515,15 @@ msgstr "Cáilíocht comhad"
|
|||||||
|
|
||||||
#: searx/plugins/ahmia_filter.py:32
|
#: searx/plugins/ahmia_filter.py:32
|
||||||
msgid "Ahmia blacklist"
|
msgid "Ahmia blacklist"
|
||||||
msgstr ""
|
msgstr "Liosta dubh Ahmia"
|
||||||
|
|
||||||
#: searx/plugins/ahmia_filter.py:33
|
#: searx/plugins/ahmia_filter.py:33
|
||||||
msgid "Filter out onion results that appear in Ahmia's blacklist."
|
msgid "Filter out onion results that appear in Ahmia's blacklist."
|
||||||
msgstr ""
|
msgstr "Scag amach torthaí oinniún atá le feiceáil ar liosta dubh Ahmia."
|
||||||
|
|
||||||
#: searx/plugins/calculator.py:38
|
#: searx/plugins/calculator.py:38
|
||||||
msgid "Basic Calculator"
|
msgid "Basic Calculator"
|
||||||
msgstr ""
|
msgstr "Áireamhán Bunúsach"
|
||||||
|
|
||||||
#: searx/plugins/calculator.py:39
|
#: searx/plugins/calculator.py:39
|
||||||
msgid "Calculate mathematical expressions via the search bar"
|
msgid "Calculate mathematical expressions via the search bar"
|
||||||
@@ -530,7 +531,7 @@ msgstr "Ríomh nathanna matamaiticiúla tríd an mbarra cu"
|
|||||||
|
|
||||||
#: searx/plugins/hash_plugin.py:34
|
#: searx/plugins/hash_plugin.py:34
|
||||||
msgid "Hash plugin"
|
msgid "Hash plugin"
|
||||||
msgstr ""
|
msgstr "Breiseán hais"
|
||||||
|
|
||||||
#: searx/plugins/hash_plugin.py:35
|
#: searx/plugins/hash_plugin.py:35
|
||||||
msgid "Converts strings to different hash digests."
|
msgid "Converts strings to different hash digests."
|
||||||
@@ -571,6 +572,8 @@ msgid ""
|
|||||||
"Displays your IP if the query is \"ip\" and your user agent if the query "
|
"Displays your IP if the query is \"ip\" and your user agent if the query "
|
||||||
"is \"user-agent\"."
|
"is \"user-agent\"."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Taispeáin do IP más \"ip\" an cheist agus do ghníomhaire úsáideora más "
|
||||||
|
"\"úsáideoir-gníomhaire\" an cheist."
|
||||||
|
|
||||||
#: searx/plugins/self_info.py:52
|
#: searx/plugins/self_info.py:52
|
||||||
msgid "Your IP is: "
|
msgid "Your IP is: "
|
||||||
@@ -595,15 +598,17 @@ msgstr ""
|
|||||||
|
|
||||||
#: searx/plugins/tor_check.py:65
|
#: searx/plugins/tor_check.py:65
|
||||||
msgid "Could not download the list of Tor exit-nodes from"
|
msgid "Could not download the list of Tor exit-nodes from"
|
||||||
msgstr ""
|
msgstr "Níorbh fhéidir liosta na nóid scoir Tor a íoslódáil ó"
|
||||||
|
|
||||||
#: searx/plugins/tor_check.py:72
|
#: searx/plugins/tor_check.py:72
|
||||||
msgid "You are using Tor and it looks like you have the external IP address"
|
msgid "You are using Tor and it looks like you have the external IP address"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Tá tú ag úsáid Tor agus tá an chuma ar an scéal go bhfuil an seoladh IP "
|
||||||
|
"seachtrach agat"
|
||||||
|
|
||||||
#: searx/plugins/tor_check.py:76
|
#: searx/plugins/tor_check.py:76
|
||||||
msgid "You are not using Tor and you have the external IP address"
|
msgid "You are not using Tor and you have the external IP address"
|
||||||
msgstr ""
|
msgstr "Níl tú ag úsáid Tor agus tá an seoladh IP seachtrach agat"
|
||||||
|
|
||||||
#: searx/plugins/tracker_url_remover.py:37
|
#: searx/plugins/tracker_url_remover.py:37
|
||||||
msgid "Tracker URL remover"
|
msgid "Tracker URL remover"
|
||||||
@@ -615,7 +620,7 @@ msgstr "Bain argóintí rianaithe ón URL ar ais"
|
|||||||
|
|
||||||
#: searx/plugins/unit_converter.py:49
|
#: searx/plugins/unit_converter.py:49
|
||||||
msgid "Unit converter plugin"
|
msgid "Unit converter plugin"
|
||||||
msgstr ""
|
msgstr "Breiseán tiontaire aonad"
|
||||||
|
|
||||||
#: searx/plugins/unit_converter.py:50
|
#: searx/plugins/unit_converter.py:50
|
||||||
msgid "Convert between units"
|
msgid "Convert between units"
|
||||||
@@ -933,7 +938,7 @@ msgstr "Samplaí"
|
|||||||
|
|
||||||
#: searx/templates/simple/answer/translations.html:21
|
#: searx/templates/simple/answer/translations.html:21
|
||||||
msgid "Definitions"
|
msgid "Definitions"
|
||||||
msgstr ""
|
msgstr "Sainmhínithe"
|
||||||
|
|
||||||
#: searx/templates/simple/answer/translations.html:30
|
#: searx/templates/simple/answer/translations.html:30
|
||||||
msgid "Synonyms"
|
msgid "Synonyms"
|
||||||
@@ -1094,7 +1099,7 @@ msgstr "Ceadaigh"
|
|||||||
|
|
||||||
#: searx/templates/simple/preferences/answerers.html:5
|
#: searx/templates/simple/preferences/answerers.html:5
|
||||||
msgid "Keywords (first word in query)"
|
msgid "Keywords (first word in query)"
|
||||||
msgstr ""
|
msgstr "Eochairfhocail (an chéad fhocal sa cheist)"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/answerers.html:6
|
#: searx/templates/simple/preferences/answerers.html:6
|
||||||
#: searx/templates/simple/result_templates/packages.html:7
|
#: searx/templates/simple/result_templates/packages.html:7
|
||||||
@@ -1171,6 +1176,8 @@ msgid ""
|
|||||||
"A URL containing your preferences. This URL can be used to restore your "
|
"A URL containing your preferences. This URL can be used to restore your "
|
||||||
"settings on a different device."
|
"settings on a different device."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"URL ina bhfuil do shainroghanna. Is féidir an URL seo a úsáid chun do "
|
||||||
|
"shocruithe a chur ar ais ar ghléas eile."
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/cookies.html:46
|
#: searx/templates/simple/preferences/cookies.html:46
|
||||||
msgid "Copy preferences hash"
|
msgid "Copy preferences hash"
|
||||||
@@ -1186,7 +1193,7 @@ msgstr "Roghanna hais"
|
|||||||
|
|
||||||
#: searx/templates/simple/preferences/doi_resolver.html:1
|
#: searx/templates/simple/preferences/doi_resolver.html:1
|
||||||
msgid "Digital Object Identifier (DOI)"
|
msgid "Digital Object Identifier (DOI)"
|
||||||
msgstr ""
|
msgstr "Aitheantóir Oibiachta Digiteach (DOI)"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/doi_resolver.html:6
|
#: searx/templates/simple/preferences/doi_resolver.html:6
|
||||||
msgid "Open Access DOI resolver"
|
msgid "Open Access DOI resolver"
|
||||||
@@ -1631,4 +1638,3 @@ msgstr "físeán a cheilt"
|
|||||||
#~ "shonrú sna roghanna URL a úsáid "
|
#~ "shonrú sna roghanna URL a úsáid "
|
||||||
#~ "chun roghanna a shioncronú ar fud "
|
#~ "chun roghanna a shioncronú ar fud "
|
||||||
#~ "feistí."
|
#~ "feistí."
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
@@ -26,20 +26,22 @@
|
|||||||
# nogb <nogb@users.noreply.translate.codeberg.org>, 2025.
|
# nogb <nogb@users.noreply.translate.codeberg.org>, 2025.
|
||||||
# syobon <syobon@users.noreply.translate.codeberg.org>, 2025.
|
# syobon <syobon@users.noreply.translate.codeberg.org>, 2025.
|
||||||
# cc5efd7b0 <cc5efd7b0@noreply.codeberg.org>, 2025.
|
# cc5efd7b0 <cc5efd7b0@noreply.codeberg.org>, 2025.
|
||||||
|
# ayame30 <ayame30@noreply.codeberg.org>, 2025.
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: searx\n"
|
"Project-Id-Version: searx\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2025-03-29 09:21+0000\n"
|
"POT-Creation-Date: 2025-03-29 09:21+0000\n"
|
||||||
"PO-Revision-Date: 2025-03-15 14:07+0000\n"
|
"PO-Revision-Date: 2025-04-11 15:12+0000\n"
|
||||||
"Last-Translator: cc5efd7b0 <cc5efd7b0@noreply.codeberg.org>\n"
|
"Last-Translator: ayame30 <ayame30@noreply.codeberg.org>\n"
|
||||||
|
"Language-Team: Japanese <https://translate.codeberg.org/projects/searxng/"
|
||||||
|
"searxng/ja/>\n"
|
||||||
"Language: ja\n"
|
"Language: ja\n"
|
||||||
"Language-Team: Japanese "
|
|
||||||
"<https://translate.codeberg.org/projects/searxng/searxng/ja/>\n"
|
|
||||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=utf-8\n"
|
"Content-Type: text/plain; charset=utf-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
|
"X-Generator: Weblate 5.10.2\n"
|
||||||
"Generated-By: Babel 2.17.0\n"
|
"Generated-By: Babel 2.17.0\n"
|
||||||
|
|
||||||
#. CONSTANT_NAMES['NO_SUBGROUPING']
|
#. CONSTANT_NAMES['NO_SUBGROUPING']
|
||||||
@@ -530,15 +532,15 @@ msgstr "ファイル品質"
|
|||||||
|
|
||||||
#: searx/plugins/ahmia_filter.py:32
|
#: searx/plugins/ahmia_filter.py:32
|
||||||
msgid "Ahmia blacklist"
|
msgid "Ahmia blacklist"
|
||||||
msgstr ""
|
msgstr "Ahmiaのブラックリスト"
|
||||||
|
|
||||||
#: searx/plugins/ahmia_filter.py:33
|
#: searx/plugins/ahmia_filter.py:33
|
||||||
msgid "Filter out onion results that appear in Ahmia's blacklist."
|
msgid "Filter out onion results that appear in Ahmia's blacklist."
|
||||||
msgstr ""
|
msgstr "Ahmiaのブラックリストに表示されるオニオン結果を除外します。"
|
||||||
|
|
||||||
#: searx/plugins/calculator.py:38
|
#: searx/plugins/calculator.py:38
|
||||||
msgid "Basic Calculator"
|
msgid "Basic Calculator"
|
||||||
msgstr ""
|
msgstr "基本的な計算機"
|
||||||
|
|
||||||
#: searx/plugins/calculator.py:39
|
#: searx/plugins/calculator.py:39
|
||||||
msgid "Calculate mathematical expressions via the search bar"
|
msgid "Calculate mathematical expressions via the search bar"
|
||||||
@@ -624,7 +626,7 @@ msgstr "返された URL からトラッカー引数を消去する"
|
|||||||
|
|
||||||
#: searx/plugins/unit_converter.py:49
|
#: searx/plugins/unit_converter.py:49
|
||||||
msgid "Unit converter plugin"
|
msgid "Unit converter plugin"
|
||||||
msgstr ""
|
msgstr "単位変換プラグイン"
|
||||||
|
|
||||||
#: searx/plugins/unit_converter.py:50
|
#: searx/plugins/unit_converter.py:50
|
||||||
msgid "Convert between units"
|
msgid "Convert between units"
|
||||||
@@ -1170,7 +1172,8 @@ msgstr "このURLで違うブラウザに設定を復活"
|
|||||||
msgid ""
|
msgid ""
|
||||||
"A URL containing your preferences. This URL can be used to restore your "
|
"A URL containing your preferences. This URL can be used to restore your "
|
||||||
"settings on a different device."
|
"settings on a different device."
|
||||||
msgstr ""
|
msgstr "設定内容が保存されたURLです。このURLを使用すると、別のデバイスで設定を復元で"
|
||||||
|
"きます。"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/cookies.html:46
|
#: searx/templates/simple/preferences/cookies.html:46
|
||||||
msgid "Copy preferences hash"
|
msgid "Copy preferences hash"
|
||||||
@@ -2019,4 +2022,3 @@ msgstr "動画を隠す"
|
|||||||
#~ "preferences URL can be used to "
|
#~ "preferences URL can be used to "
|
||||||
#~ "sync preferences across devices."
|
#~ "sync preferences across devices."
|
||||||
#~ msgstr "初期設定URLを使うことで、特別な設定をデバイスをまたいで同期できる。"
|
#~ msgstr "初期設定URLを使うことで、特別な設定をデバイスをまたいで同期できる。"
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
@@ -16,20 +16,21 @@
|
|||||||
# return42 <return42@noreply.codeberg.org>, 2025.
|
# return42 <return42@noreply.codeberg.org>, 2025.
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: searx\n"
|
"Project-Id-Version: searx\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2025-03-29 09:21+0000\n"
|
"POT-Creation-Date: 2025-03-29 09:21+0000\n"
|
||||||
"PO-Revision-Date: 2025-03-27 13:44+0000\n"
|
"PO-Revision-Date: 2025-04-20 12:41+0000\n"
|
||||||
"Last-Translator: return42 <return42@noreply.codeberg.org>\n"
|
"Last-Translator: return42 <return42@noreply.codeberg.org>\n"
|
||||||
|
"Language-Team: Lithuanian <https://translate.codeberg.org/projects/searxng/"
|
||||||
|
"searxng/lt/>\n"
|
||||||
"Language: lt\n"
|
"Language: lt\n"
|
||||||
"Language-Team: Lithuanian "
|
|
||||||
"<https://translate.codeberg.org/projects/searxng/searxng/lt/>\n"
|
|
||||||
"Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100"
|
|
||||||
" < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < "
|
|
||||||
"11) ? 1 : n % 1 != 0 ? 2: 3);\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=utf-8\n"
|
"Content-Type: text/plain; charset=utf-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < "
|
||||||
|
"11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 :"
|
||||||
|
" n % 1 != 0 ? 2: 3);\n"
|
||||||
|
"X-Generator: Weblate 5.10.2\n"
|
||||||
"Generated-By: Babel 2.17.0\n"
|
"Generated-By: Babel 2.17.0\n"
|
||||||
|
|
||||||
#. CONSTANT_NAMES['NO_SUBGROUPING']
|
#. CONSTANT_NAMES['NO_SUBGROUPING']
|
||||||
@@ -525,15 +526,15 @@ msgstr "Failo kokybė"
|
|||||||
|
|
||||||
#: searx/plugins/ahmia_filter.py:32
|
#: searx/plugins/ahmia_filter.py:32
|
||||||
msgid "Ahmia blacklist"
|
msgid "Ahmia blacklist"
|
||||||
msgstr ""
|
msgstr "Ahmia juodasis sąrašas"
|
||||||
|
|
||||||
#: searx/plugins/ahmia_filter.py:33
|
#: searx/plugins/ahmia_filter.py:33
|
||||||
msgid "Filter out onion results that appear in Ahmia's blacklist."
|
msgid "Filter out onion results that appear in Ahmia's blacklist."
|
||||||
msgstr ""
|
msgstr "Išfiltruoti onion rezultatus esančius Ahmia juodajame sąraše."
|
||||||
|
|
||||||
#: searx/plugins/calculator.py:38
|
#: searx/plugins/calculator.py:38
|
||||||
msgid "Basic Calculator"
|
msgid "Basic Calculator"
|
||||||
msgstr ""
|
msgstr "Bazinis skaičiuotuvas"
|
||||||
|
|
||||||
#: searx/plugins/calculator.py:39
|
#: searx/plugins/calculator.py:39
|
||||||
msgid "Calculate mathematical expressions via the search bar"
|
msgid "Calculate mathematical expressions via the search bar"
|
||||||
@@ -582,6 +583,8 @@ msgid ""
|
|||||||
"Displays your IP if the query is \"ip\" and your user agent if the query "
|
"Displays your IP if the query is \"ip\" and your user agent if the query "
|
||||||
"is \"user-agent\"."
|
"is \"user-agent\"."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Rodo tavo IP jei užklausa yra „ip“ ir tavo naudotojo agentą jei užklausa yra "
|
||||||
|
"„user-agent“."
|
||||||
|
|
||||||
#: searx/plugins/self_info.py:52
|
#: searx/plugins/self_info.py:52
|
||||||
msgid "Your IP is: "
|
msgid "Your IP is: "
|
||||||
@@ -589,7 +592,7 @@ msgstr "Jūsų IP adresas: "
|
|||||||
|
|
||||||
#: searx/plugins/self_info.py:55
|
#: searx/plugins/self_info.py:55
|
||||||
msgid "Your user-agent is: "
|
msgid "Your user-agent is: "
|
||||||
msgstr ""
|
msgstr "Tavo naudotojo agentas (user-agent) yra: "
|
||||||
|
|
||||||
#: searx/plugins/tor_check.py:42
|
#: searx/plugins/tor_check.py:42
|
||||||
msgid "Tor check plugin"
|
msgid "Tor check plugin"
|
||||||
@@ -606,15 +609,15 @@ msgstr ""
|
|||||||
|
|
||||||
#: searx/plugins/tor_check.py:65
|
#: searx/plugins/tor_check.py:65
|
||||||
msgid "Could not download the list of Tor exit-nodes from"
|
msgid "Could not download the list of Tor exit-nodes from"
|
||||||
msgstr ""
|
msgstr "Nepavyko atsisiųsti Tor išėjimo mazgų iš"
|
||||||
|
|
||||||
#: searx/plugins/tor_check.py:72
|
#: searx/plugins/tor_check.py:72
|
||||||
msgid "You are using Tor and it looks like you have the external IP address"
|
msgid "You are using Tor and it looks like you have the external IP address"
|
||||||
msgstr ""
|
msgstr "Jūs naudojate Tor ir atrodo, kad turite išorinį IP adresą"
|
||||||
|
|
||||||
#: searx/plugins/tor_check.py:76
|
#: searx/plugins/tor_check.py:76
|
||||||
msgid "You are not using Tor and you have the external IP address"
|
msgid "You are not using Tor and you have the external IP address"
|
||||||
msgstr ""
|
msgstr "Jūs nenaudojate Tor, tačiau atrodo, kad turite išorinį IP adresą"
|
||||||
|
|
||||||
#: searx/plugins/tracker_url_remover.py:37
|
#: searx/plugins/tracker_url_remover.py:37
|
||||||
msgid "Tracker URL remover"
|
msgid "Tracker URL remover"
|
||||||
@@ -626,11 +629,11 @@ msgstr "Šalinti seklių argumentus iš grąžinamų URL"
|
|||||||
|
|
||||||
#: searx/plugins/unit_converter.py:49
|
#: searx/plugins/unit_converter.py:49
|
||||||
msgid "Unit converter plugin"
|
msgid "Unit converter plugin"
|
||||||
msgstr ""
|
msgstr "Matavimo vienetų konvertavimo papildinys"
|
||||||
|
|
||||||
#: searx/plugins/unit_converter.py:50
|
#: searx/plugins/unit_converter.py:50
|
||||||
msgid "Convert between units"
|
msgid "Convert between units"
|
||||||
msgstr ""
|
msgstr "Konvertuoti tarp matavimo vienetų"
|
||||||
|
|
||||||
#: searx/templates/simple/404.html:4
|
#: searx/templates/simple/404.html:4
|
||||||
msgid "Page not found"
|
msgid "Page not found"
|
||||||
@@ -942,7 +945,7 @@ msgstr "Pavyzdžiai"
|
|||||||
|
|
||||||
#: searx/templates/simple/answer/translations.html:21
|
#: searx/templates/simple/answer/translations.html:21
|
||||||
msgid "Definitions"
|
msgid "Definitions"
|
||||||
msgstr ""
|
msgstr "Apibrėžimai"
|
||||||
|
|
||||||
#: searx/templates/simple/answer/translations.html:30
|
#: searx/templates/simple/answer/translations.html:30
|
||||||
msgid "Synonyms"
|
msgid "Synonyms"
|
||||||
@@ -966,7 +969,7 @@ msgstr "Pranešimai iš paieškos sistemų"
|
|||||||
|
|
||||||
#: searx/templates/simple/elements/engines_msg.html:7
|
#: searx/templates/simple/elements/engines_msg.html:7
|
||||||
msgid "seconds"
|
msgid "seconds"
|
||||||
msgstr ""
|
msgstr "sekundės"
|
||||||
|
|
||||||
#: searx/templates/simple/elements/search_url.html:3
|
#: searx/templates/simple/elements/search_url.html:3
|
||||||
msgid "Search URL"
|
msgid "Search URL"
|
||||||
@@ -1084,11 +1087,11 @@ msgstr "Pakeiskite nuostatose naudojamą paieškos variklį:"
|
|||||||
|
|
||||||
#: searx/templates/simple/messages/no_results.html:22
|
#: searx/templates/simple/messages/no_results.html:22
|
||||||
msgid "Switch to another instance:"
|
msgid "Switch to another instance:"
|
||||||
msgstr ""
|
msgstr "Pakeisti instanciją:"
|
||||||
|
|
||||||
#: searx/templates/simple/messages/no_results.html:24
|
#: searx/templates/simple/messages/no_results.html:24
|
||||||
msgid "Search for another query or select another category."
|
msgid "Search for another query or select another category."
|
||||||
msgstr ""
|
msgstr "Ieškoti kitos užklausos arba pasirinkti kitą kategoriją."
|
||||||
|
|
||||||
#: searx/templates/simple/messages/no_results.html:25
|
#: searx/templates/simple/messages/no_results.html:25
|
||||||
msgid "Go back to the previous page using the previous page button."
|
msgid "Go back to the previous page using the previous page button."
|
||||||
@@ -1101,7 +1104,7 @@ msgstr "Leisti"
|
|||||||
|
|
||||||
#: searx/templates/simple/preferences/answerers.html:5
|
#: searx/templates/simple/preferences/answerers.html:5
|
||||||
msgid "Keywords (first word in query)"
|
msgid "Keywords (first word in query)"
|
||||||
msgstr ""
|
msgstr "Raktažodžiai (pirmasis užklausos žodis)"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/answerers.html:6
|
#: searx/templates/simple/preferences/answerers.html:6
|
||||||
#: searx/templates/simple/result_templates/packages.html:7
|
#: searx/templates/simple/result_templates/packages.html:7
|
||||||
@@ -1178,6 +1181,8 @@ msgid ""
|
|||||||
"A URL containing your preferences. This URL can be used to restore your "
|
"A URL containing your preferences. This URL can be used to restore your "
|
||||||
"settings on a different device."
|
"settings on a different device."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"URL adresas su jūsų nustatymais. Šis URL adresas gali būti panaudotas "
|
||||||
|
"atstatyti jūsų nustatymus kitame įrenginyje."
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/cookies.html:46
|
#: searx/templates/simple/preferences/cookies.html:46
|
||||||
msgid "Copy preferences hash"
|
msgid "Copy preferences hash"
|
||||||
@@ -1193,7 +1198,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: searx/templates/simple/preferences/doi_resolver.html:1
|
#: searx/templates/simple/preferences/doi_resolver.html:1
|
||||||
msgid "Digital Object Identifier (DOI)"
|
msgid "Digital Object Identifier (DOI)"
|
||||||
msgstr ""
|
msgstr "Skaitmeninis objekto identifikatorius (DOI)"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/doi_resolver.html:6
|
#: searx/templates/simple/preferences/doi_resolver.html:6
|
||||||
msgid "Open Access DOI resolver"
|
msgid "Open Access DOI resolver"
|
||||||
@@ -2058,4 +2063,3 @@ msgstr "slėpti vaizdo įrašą"
|
|||||||
#~ "Nurodant tinkintus nustatymus nuostatų URL,"
|
#~ "Nurodant tinkintus nustatymus nuostatų URL,"
|
||||||
#~ " jūs galite susinchronizuoti nuostatas tarp"
|
#~ " jūs galite susinchronizuoti nuostatas tarp"
|
||||||
#~ " prietaisų."
|
#~ " prietaisų."
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
@@ -14,21 +14,23 @@
|
|||||||
# Vision <vision@users.noreply.translate.codeberg.org>, 2025.
|
# Vision <vision@users.noreply.translate.codeberg.org>, 2025.
|
||||||
# curtwheeler <curtwheeler@users.noreply.translate.codeberg.org>, 2025.
|
# curtwheeler <curtwheeler@users.noreply.translate.codeberg.org>, 2025.
|
||||||
# return42 <return42@noreply.codeberg.org>, 2025.
|
# return42 <return42@noreply.codeberg.org>, 2025.
|
||||||
|
# whytf <whytf@noreply.codeberg.org>, 2025.
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: searx\n"
|
"Project-Id-Version: searx\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2025-03-29 09:21+0000\n"
|
"POT-Creation-Date: 2025-03-29 09:21+0000\n"
|
||||||
"PO-Revision-Date: 2025-03-27 13:44+0000\n"
|
"PO-Revision-Date: 2025-04-23 19:16+0000\n"
|
||||||
"Last-Translator: return42 <return42@noreply.codeberg.org>\n"
|
"Last-Translator: whytf <whytf@noreply.codeberg.org>\n"
|
||||||
|
"Language-Team: Slovak <https://translate.codeberg.org/projects/searxng/"
|
||||||
|
"searxng/sk/>\n"
|
||||||
"Language: sk\n"
|
"Language: sk\n"
|
||||||
"Language-Team: Slovak "
|
|
||||||
"<https://translate.codeberg.org/projects/searxng/searxng/sk/>\n"
|
|
||||||
"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 "
|
|
||||||
"&& n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=utf-8\n"
|
"Content-Type: text/plain; charset=utf-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n "
|
||||||
|
">= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);\n"
|
||||||
|
"X-Generator: Weblate 5.10.2\n"
|
||||||
"Generated-By: Babel 2.17.0\n"
|
"Generated-By: Babel 2.17.0\n"
|
||||||
|
|
||||||
#. CONSTANT_NAMES['NO_SUBGROUPING']
|
#. CONSTANT_NAMES['NO_SUBGROUPING']
|
||||||
@@ -433,12 +435,12 @@ msgstr "Pozastavené"
|
|||||||
#: searx/webutils.py:314
|
#: searx/webutils.py:314
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "{minutes} minute(s) ago"
|
msgid "{minutes} minute(s) ago"
|
||||||
msgstr "pred {minutes} min."
|
msgstr "pred {minutes} minútami"
|
||||||
|
|
||||||
#: searx/webutils.py:315
|
#: searx/webutils.py:315
|
||||||
#, python-brace-format
|
#, python-brace-format
|
||||||
msgid "{hours} hour(s), {minutes} minute(s) ago"
|
msgid "{hours} hour(s), {minutes} minute(s) ago"
|
||||||
msgstr "pred {hours} hod., {minutes} min."
|
msgstr "pred {hours} hodinami, {minutes} minútami"
|
||||||
|
|
||||||
#: searx/answerers/random.py:69
|
#: searx/answerers/random.py:69
|
||||||
msgid "Generate different random values"
|
msgid "Generate different random values"
|
||||||
@@ -524,15 +526,15 @@ msgstr "Kvalita súboru"
|
|||||||
|
|
||||||
#: searx/plugins/ahmia_filter.py:32
|
#: searx/plugins/ahmia_filter.py:32
|
||||||
msgid "Ahmia blacklist"
|
msgid "Ahmia blacklist"
|
||||||
msgstr ""
|
msgstr "Čierna listina Ahmia"
|
||||||
|
|
||||||
#: searx/plugins/ahmia_filter.py:33
|
#: searx/plugins/ahmia_filter.py:33
|
||||||
msgid "Filter out onion results that appear in Ahmia's blacklist."
|
msgid "Filter out onion results that appear in Ahmia's blacklist."
|
||||||
msgstr ""
|
msgstr "Odfiltruj výsledky onion, ktoré sa zobrazujú na čiernej listine Ahmia."
|
||||||
|
|
||||||
#: searx/plugins/calculator.py:38
|
#: searx/plugins/calculator.py:38
|
||||||
msgid "Basic Calculator"
|
msgid "Basic Calculator"
|
||||||
msgstr ""
|
msgstr "Základná Kalkulačka"
|
||||||
|
|
||||||
#: searx/plugins/calculator.py:39
|
#: searx/plugins/calculator.py:39
|
||||||
msgid "Calculate mathematical expressions via the search bar"
|
msgid "Calculate mathematical expressions via the search bar"
|
||||||
@@ -626,7 +628,7 @@ msgstr "Odstrániť sledovacie argumenty z vrátenej URL"
|
|||||||
|
|
||||||
#: searx/plugins/unit_converter.py:49
|
#: searx/plugins/unit_converter.py:49
|
||||||
msgid "Unit converter plugin"
|
msgid "Unit converter plugin"
|
||||||
msgstr ""
|
msgstr "Modul konvertora jednotiek"
|
||||||
|
|
||||||
#: searx/plugins/unit_converter.py:50
|
#: searx/plugins/unit_converter.py:50
|
||||||
msgid "Convert between units"
|
msgid "Convert between units"
|
||||||
@@ -1182,6 +1184,8 @@ msgid ""
|
|||||||
"A URL containing your preferences. This URL can be used to restore your "
|
"A URL containing your preferences. This URL can be used to restore your "
|
||||||
"settings on a different device."
|
"settings on a different device."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Adresa URL obsahujúca vaše preferencie. Túto adresu URL môžete použiť na "
|
||||||
|
"obnovenie nastavení v inom zariadení."
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/cookies.html:46
|
#: searx/templates/simple/preferences/cookies.html:46
|
||||||
msgid "Copy preferences hash"
|
msgid "Copy preferences hash"
|
||||||
@@ -2079,4 +2083,3 @@ msgstr "skryť video"
|
|||||||
#~ "Zadaním osobitých nastavení v adrese "
|
#~ "Zadaním osobitých nastavení v adrese "
|
||||||
#~ "(URL) nastavení je možné synchronizovať "
|
#~ "(URL) nastavení je možné synchronizovať "
|
||||||
#~ "nastavenia do iných zariadení."
|
#~ "nastavenia do iných zariadení."
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
@@ -24,21 +24,22 @@
|
|||||||
# return42 <return42@users.noreply.translate.codeberg.org>, 2025.
|
# return42 <return42@users.noreply.translate.codeberg.org>, 2025.
|
||||||
# Eshan-K-I <eshan-k-i@users.noreply.translate.codeberg.org>, 2025.
|
# Eshan-K-I <eshan-k-i@users.noreply.translate.codeberg.org>, 2025.
|
||||||
# rajeeban <rajeeban@users.noreply.translate.codeberg.org>, 2025.
|
# rajeeban <rajeeban@users.noreply.translate.codeberg.org>, 2025.
|
||||||
|
# prashere <prashere@noreply.codeberg.org>, 2025.
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: searx\n"
|
"Project-Id-Version: searx\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2025-03-29 09:21+0000\n"
|
"POT-Creation-Date: 2025-03-29 09:21+0000\n"
|
||||||
"PO-Revision-Date: 2025-01-20 03:36+0000\n"
|
"PO-Revision-Date: 2025-04-22 10:45+0000\n"
|
||||||
"Last-Translator: rajeeban <rajeeban@users.noreply.translate.codeberg.org>"
|
"Last-Translator: prashere <prashere@noreply.codeberg.org>\n"
|
||||||
"\n"
|
"Language-Team: Tamil <https://translate.codeberg.org/projects/searxng/"
|
||||||
|
"searxng/ta/>\n"
|
||||||
"Language: ta\n"
|
"Language: ta\n"
|
||||||
"Language-Team: Tamil "
|
|
||||||
"<https://translate.codeberg.org/projects/searxng/searxng/ta/>\n"
|
|
||||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=utf-8\n"
|
"Content-Type: text/plain; charset=utf-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||||
|
"X-Generator: Weblate 5.10.2\n"
|
||||||
"Generated-By: Babel 2.17.0\n"
|
"Generated-By: Babel 2.17.0\n"
|
||||||
|
|
||||||
#. CONSTANT_NAMES['NO_SUBGROUPING']
|
#. CONSTANT_NAMES['NO_SUBGROUPING']
|
||||||
@@ -149,7 +150,7 @@ msgstr "கிடங்கு"
|
|||||||
#. CATEGORY_GROUPS['SOFTWARE_WIKIS']
|
#. CATEGORY_GROUPS['SOFTWARE_WIKIS']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
msgid "software wikis"
|
msgid "software wikis"
|
||||||
msgstr "மென்பொருள் விகி"
|
msgstr "மென்பொருள் விக்கி"
|
||||||
|
|
||||||
#. CATEGORY_GROUPS['WEB']
|
#. CATEGORY_GROUPS['WEB']
|
||||||
#: searx/searxng.msg
|
#: searx/searxng.msg
|
||||||
@@ -2064,4 +2065,3 @@ msgstr "காணொளிகளை மறை"
|
|||||||
#~ "preferences URL can be used to "
|
#~ "preferences URL can be used to "
|
||||||
#~ "sync preferences across devices."
|
#~ "sync preferences across devices."
|
||||||
#~ msgstr ""
|
#~ msgstr ""
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
@@ -12,21 +12,22 @@
|
|||||||
# saledai <saledai@users.noreply.translate.codeberg.org>, 2024, 2025.
|
# saledai <saledai@users.noreply.translate.codeberg.org>, 2024, 2025.
|
||||||
# Anonymous <anonymous@users.noreply.translate.codeberg.org>, 2025.
|
# Anonymous <anonymous@users.noreply.translate.codeberg.org>, 2025.
|
||||||
# yuttct <yuttct@users.noreply.translate.codeberg.org>, 2025.
|
# yuttct <yuttct@users.noreply.translate.codeberg.org>, 2025.
|
||||||
|
# return42 <return42@noreply.codeberg.org>, 2025.
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PROJECT VERSION\n"
|
"Project-Id-Version: PROJECT VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2025-03-29 09:21+0000\n"
|
"POT-Creation-Date: 2025-03-29 09:21+0000\n"
|
||||||
"PO-Revision-Date: 2025-01-06 15:53+0000\n"
|
"PO-Revision-Date: 2025-04-15 10:37+0000\n"
|
||||||
"Last-Translator: sahussawud "
|
"Last-Translator: return42 <return42@noreply.codeberg.org>\n"
|
||||||
"<sahussawud@users.noreply.translate.codeberg.org>\n"
|
"Language-Team: Thai <https://translate.codeberg.org/projects/searxng/searxng/"
|
||||||
|
"th/>\n"
|
||||||
"Language: th\n"
|
"Language: th\n"
|
||||||
"Language-Team: Thai "
|
|
||||||
"<https://translate.codeberg.org/projects/searxng/searxng/th/>\n"
|
|
||||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=utf-8\n"
|
"Content-Type: text/plain; charset=utf-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
|
"X-Generator: Weblate 5.10.2\n"
|
||||||
"Generated-By: Babel 2.17.0\n"
|
"Generated-By: Babel 2.17.0\n"
|
||||||
|
|
||||||
#. CONSTANT_NAMES['NO_SUBGROUPING']
|
#. CONSTANT_NAMES['NO_SUBGROUPING']
|
||||||
@@ -382,7 +383,7 @@ msgstr "ข้อผิดพลาดระหว่างแจงโครง
|
|||||||
|
|
||||||
#: searx/webutils.py:38
|
#: searx/webutils.py:38
|
||||||
msgid "HTTP protocol error"
|
msgid "HTTP protocol error"
|
||||||
msgstr "โปรโตคอล HTTP เกิดข้อผิดพลาดของ"
|
msgstr "เกิดข้อผิดพลาดของโปรโตคอล HTTP"
|
||||||
|
|
||||||
#: searx/webutils.py:39
|
#: searx/webutils.py:39
|
||||||
msgid "network error"
|
msgid "network error"
|
||||||
@@ -1788,4 +1789,3 @@ msgstr "ซ่อนวิดีโอ"
|
|||||||
#~ msgstr ""
|
#~ msgstr ""
|
||||||
#~ "การระบุการตั้งค่าแบบกำหนดเองใน URL "
|
#~ "การระบุการตั้งค่าแบบกำหนดเองใน URL "
|
||||||
#~ "ค่ากำหนดสามารถใช้เพื่อซิงค์กับค่ากำหนดในอุปกรณ์ต่างๆได้"
|
#~ "ค่ากำหนดสามารถใช้เพื่อซิงค์กับค่ากำหนดในอุปกรณ์ต่างๆได้"
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
@@ -36,13 +36,14 @@
|
|||||||
# nonepork <nonepork@users.noreply.translate.codeberg.org>, 2025.
|
# nonepork <nonepork@users.noreply.translate.codeberg.org>, 2025.
|
||||||
# Shihfu Juan <xlion@xlion.tw>, 2025.
|
# Shihfu Juan <xlion@xlion.tw>, 2025.
|
||||||
# return42 <return42@noreply.codeberg.org>, 2025.
|
# return42 <return42@noreply.codeberg.org>, 2025.
|
||||||
|
# ayame30 <ayame30@noreply.codeberg.org>, 2025.
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: searx\n"
|
"Project-Id-Version: searx\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2025-03-29 09:21+0000\n"
|
"POT-Creation-Date: 2025-03-29 09:21+0000\n"
|
||||||
"PO-Revision-Date: 2025-04-08 11:34+0000\n"
|
"PO-Revision-Date: 2025-04-11 15:12+0000\n"
|
||||||
"Last-Translator: return42 <return42@noreply.codeberg.org>\n"
|
"Last-Translator: ayame30 <ayame30@noreply.codeberg.org>\n"
|
||||||
"Language-Team: Chinese (Traditional Han script) <https://"
|
"Language-Team: Chinese (Traditional Han script) <https://"
|
||||||
"translate.codeberg.org/projects/searxng/searxng/zh_Hant/>\n"
|
"translate.codeberg.org/projects/searxng/searxng/zh_Hant/>\n"
|
||||||
"Language: zh_Hant_TW\n"
|
"Language: zh_Hant_TW\n"
|
||||||
@@ -545,11 +546,11 @@ msgstr "Ahmia 黑名單"
|
|||||||
|
|
||||||
#: searx/plugins/ahmia_filter.py:33
|
#: searx/plugins/ahmia_filter.py:33
|
||||||
msgid "Filter out onion results that appear in Ahmia's blacklist."
|
msgid "Filter out onion results that appear in Ahmia's blacklist."
|
||||||
msgstr ""
|
msgstr "過濾掉 Ahmia 黑名單中出現的洋蔥結果。"
|
||||||
|
|
||||||
#: searx/plugins/calculator.py:38
|
#: searx/plugins/calculator.py:38
|
||||||
msgid "Basic Calculator"
|
msgid "Basic Calculator"
|
||||||
msgstr ""
|
msgstr "基本計算機"
|
||||||
|
|
||||||
#: searx/plugins/calculator.py:39
|
#: searx/plugins/calculator.py:39
|
||||||
msgid "Calculate mathematical expressions via the search bar"
|
msgid "Calculate mathematical expressions via the search bar"
|
||||||
@@ -635,7 +636,7 @@ msgstr "從傳回的 URL 中移除追蹤器參數"
|
|||||||
|
|
||||||
#: searx/plugins/unit_converter.py:49
|
#: searx/plugins/unit_converter.py:49
|
||||||
msgid "Unit converter plugin"
|
msgid "Unit converter plugin"
|
||||||
msgstr ""
|
msgstr "單位轉換外掛"
|
||||||
|
|
||||||
#: searx/plugins/unit_converter.py:50
|
#: searx/plugins/unit_converter.py:50
|
||||||
msgid "Convert between units"
|
msgid "Convert between units"
|
||||||
@@ -1181,7 +1182,7 @@ msgstr "用於在其他瀏覽器上還原您的偏好設定的網址"
|
|||||||
msgid ""
|
msgid ""
|
||||||
"A URL containing your preferences. This URL can be used to restore your "
|
"A URL containing your preferences. This URL can be used to restore your "
|
||||||
"settings on a different device."
|
"settings on a different device."
|
||||||
msgstr ""
|
msgstr "包含您的偏好設定的 URL。此 URL 可用於在其他裝置上恢復您的設定。"
|
||||||
|
|
||||||
#: searx/templates/simple/preferences/cookies.html:46
|
#: searx/templates/simple/preferences/cookies.html:46
|
||||||
msgid "Copy preferences hash"
|
msgid "Copy preferences hash"
|
||||||
|
|||||||
134
searx/webapp.py
134
searx/webapp.py
@@ -6,6 +6,7 @@
|
|||||||
# pylint: disable=use-dict-literal
|
# pylint: disable=use-dict-literal
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import inspect
|
||||||
import hashlib
|
import hashlib
|
||||||
import hmac
|
import hmac
|
||||||
import json
|
import json
|
||||||
@@ -29,6 +30,8 @@ from pygments import highlight
|
|||||||
from pygments.lexers import get_lexer_by_name
|
from pygments.lexers import get_lexer_by_name
|
||||||
from pygments.formatters import HtmlFormatter # pylint: disable=no-name-in-module
|
from pygments.formatters import HtmlFormatter # pylint: disable=no-name-in-module
|
||||||
|
|
||||||
|
from werkzeug.serving import is_running_from_reloader
|
||||||
|
|
||||||
import flask
|
import flask
|
||||||
|
|
||||||
from flask import (
|
from flask import (
|
||||||
@@ -48,12 +51,12 @@ from flask_babel import (
|
|||||||
format_decimal,
|
format_decimal,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
import searx
|
||||||
from searx.extended_types import sxng_request
|
from searx.extended_types import sxng_request
|
||||||
from searx import (
|
from searx import (
|
||||||
logger,
|
logger,
|
||||||
get_setting,
|
get_setting,
|
||||||
settings,
|
settings,
|
||||||
searx_debug,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
from searx import infopage
|
from searx import infopage
|
||||||
@@ -81,7 +84,6 @@ from searx.webutils import (
|
|||||||
exception_classname_to_text,
|
exception_classname_to_text,
|
||||||
new_hmac,
|
new_hmac,
|
||||||
is_hmac_of,
|
is_hmac_of,
|
||||||
is_flask_run_cmdline,
|
|
||||||
group_engines_in_tab,
|
group_engines_in_tab,
|
||||||
)
|
)
|
||||||
from searx.webadapter import (
|
from searx.webadapter import (
|
||||||
@@ -128,11 +130,6 @@ logger = logger.getChild('webapp')
|
|||||||
|
|
||||||
warnings.simplefilter("always")
|
warnings.simplefilter("always")
|
||||||
|
|
||||||
# check secret_key
|
|
||||||
if not searx_debug and settings['server']['secret_key'] == 'ultrasecretkey':
|
|
||||||
logger.error('server.secret_key is not changed. Please use something else instead of ultrasecretkey.')
|
|
||||||
sys.exit(1)
|
|
||||||
|
|
||||||
# about static
|
# about static
|
||||||
logger.debug('static directory is %s', settings['ui']['static_path'])
|
logger.debug('static directory is %s', settings['ui']['static_path'])
|
||||||
static_files = get_static_files(settings['ui']['static_path'])
|
static_files = get_static_files(settings['ui']['static_path'])
|
||||||
@@ -1329,45 +1326,112 @@ def page_not_found(_e):
|
|||||||
return render('404.html'), 404
|
return render('404.html'), 404
|
||||||
|
|
||||||
|
|
||||||
# see https://flask.palletsprojects.com/en/1.1.x/cli/
|
def run():
|
||||||
# True if "FLASK_APP=searx/webapp.py FLASK_ENV=development flask run"
|
"""Runs the application on a local development server.
|
||||||
flask_run_development = (
|
|
||||||
os.environ.get("FLASK_APP") is not None and os.environ.get("FLASK_ENV") == 'development' and is_flask_run_cmdline()
|
|
||||||
)
|
|
||||||
|
|
||||||
# True if reload feature is activated of werkzeug, False otherwise (including uwsgi, etc..)
|
This run method is only called when SearXNG is started via ``__main__``::
|
||||||
# __name__ != "__main__" if searx.webapp is imported (make test, make docs, uwsgi...)
|
|
||||||
# see run() at the end of this file : searx_debug activates the reload feature.
|
python -m searx.webapp
|
||||||
werkzeug_reloader = flask_run_development or (searx_debug and __name__ == "__main__")
|
|
||||||
|
Do not use :ref:`run() <flask.Flask.run>` in a production setting. It is
|
||||||
|
not intended to meet security and performance requirements for a production
|
||||||
|
server.
|
||||||
|
|
||||||
|
It is not recommended to use this function for development with automatic
|
||||||
|
reloading as this is badly supported. Instead you should be using the flask
|
||||||
|
command line script’s run support::
|
||||||
|
|
||||||
|
flask --app searx.webapp run --debug --reload --host 127.0.0.1 --port 8888
|
||||||
|
|
||||||
|
.. _Flask.run: https://flask.palletsprojects.com/en/stable/api/#flask.Flask.run
|
||||||
|
"""
|
||||||
|
|
||||||
|
host: str = get_setting("server.bind_address") # type: ignore
|
||||||
|
port: int = get_setting("server.port") # type: ignore
|
||||||
|
|
||||||
|
if searx.sxng_debug:
|
||||||
|
logger.debug("run local development server (DEBUG) on %s:%s", host, port)
|
||||||
|
app.run(
|
||||||
|
debug=True,
|
||||||
|
port=port,
|
||||||
|
host=host,
|
||||||
|
threaded=True,
|
||||||
|
extra_files=[DEFAULT_SETTINGS_FILE],
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
logger.debug("run local development server on %s:%s", host, port)
|
||||||
|
app.run(port=port, host=host, threaded=True)
|
||||||
|
|
||||||
|
|
||||||
|
def is_werkzeug_reload_active() -> bool:
|
||||||
|
"""Returns ``True`` if server is is launched by :ref:`werkzeug.serving` and
|
||||||
|
the ``use_reload`` argument was set to ``True``. If this is the case, it
|
||||||
|
should be avoided that the server is initialized twice (:py:obj:`init`,
|
||||||
|
:py:obj:`run`).
|
||||||
|
|
||||||
|
.. _werkzeug.serving:
|
||||||
|
https://werkzeug.palletsprojects.com/en/stable/serving/#werkzeug.serving.run_simple
|
||||||
|
"""
|
||||||
|
|
||||||
|
if "uwsgi" in sys.argv:
|
||||||
|
# server was launched by uWSGI
|
||||||
|
return False
|
||||||
|
|
||||||
|
# https://github.com/searxng/searxng/pull/1656#issuecomment-1214198941
|
||||||
|
# https://github.com/searxng/searxng/pull/1616#issuecomment-1206137468
|
||||||
|
|
||||||
|
frames = inspect.stack()
|
||||||
|
|
||||||
|
if len(frames) > 1 and frames[-2].filename.endswith('flask/cli.py'):
|
||||||
|
# server was launched by "flask run", is argument "--reload" set?
|
||||||
|
if "--reload" in sys.argv or "--debug" in sys.argv:
|
||||||
|
return True
|
||||||
|
|
||||||
|
elif frames[0].filename.endswith('searx/webapp.py'):
|
||||||
|
# server was launched by "python -m searx.webapp" / see run()
|
||||||
|
if searx.sxng_debug:
|
||||||
|
return True
|
||||||
|
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def init():
|
||||||
|
|
||||||
|
if searx.sxng_debug or app.debug:
|
||||||
|
app.debug = True
|
||||||
|
searx.sxng_debug = True
|
||||||
|
|
||||||
|
# check secret_key in production
|
||||||
|
|
||||||
|
if not app.debug and get_setting("server.secret_key") == 'ultrasecretkey':
|
||||||
|
logger.error("server.secret_key is not changed. Please use something else instead of ultrasecretkey.")
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
# When automatic reloading is activated stop Flask from initialising twice.
|
||||||
|
# - https://github.com/pallets/flask/issues/5307#issuecomment-1774646119
|
||||||
|
# - https://stackoverflow.com/a/25504196
|
||||||
|
|
||||||
|
reloader_active = is_werkzeug_reload_active()
|
||||||
|
werkzeug_run_main = is_running_from_reloader()
|
||||||
|
|
||||||
|
if reloader_active and not werkzeug_run_main:
|
||||||
|
logger.info("in reloading mode and not in main loop, cancel the initialization")
|
||||||
|
return
|
||||||
|
|
||||||
# initialize the engines except on the first run of the werkzeug server.
|
|
||||||
if not werkzeug_reloader or (werkzeug_reloader and os.environ.get("WERKZEUG_RUN_MAIN") == "true"):
|
|
||||||
locales_initialize()
|
locales_initialize()
|
||||||
redis_initialize()
|
redis_initialize()
|
||||||
searx.plugins.initialize(app)
|
searx.plugins.initialize(app)
|
||||||
searx.search.initialize(
|
|
||||||
enable_checker=True,
|
metrics: bool = get_setting("general.enable_metrics") # type: ignore
|
||||||
check_network=True,
|
searx.search.initialize(enable_checker=True, check_network=True, enable_metrics=metrics)
|
||||||
enable_metrics=get_setting("general.enable_metrics"),
|
|
||||||
)
|
|
||||||
limiter.initialize(app, settings)
|
limiter.initialize(app, settings)
|
||||||
favicons.init()
|
favicons.init()
|
||||||
|
|
||||||
|
|
||||||
def run():
|
|
||||||
logger.debug('starting webserver on %s:%s', settings['server']['bind_address'], settings['server']['port'])
|
|
||||||
app.run(
|
|
||||||
debug=searx_debug,
|
|
||||||
use_debugger=searx_debug,
|
|
||||||
port=settings['server']['port'],
|
|
||||||
host=settings['server']['bind_address'],
|
|
||||||
threaded=True,
|
|
||||||
extra_files=[DEFAULT_SETTINGS_FILE],
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
application = app
|
application = app
|
||||||
patch_application(app)
|
patch_application(app)
|
||||||
|
init()
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
run()
|
run()
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ import csv
|
|||||||
import hashlib
|
import hashlib
|
||||||
import hmac
|
import hmac
|
||||||
import re
|
import re
|
||||||
import inspect
|
|
||||||
import itertools
|
import itertools
|
||||||
import json
|
import json
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
@@ -316,21 +315,6 @@ def searxng_l10n_timespan(dt: datetime) -> str: # pylint: disable=invalid-name
|
|||||||
return format_date(dt)
|
return format_date(dt)
|
||||||
|
|
||||||
|
|
||||||
def is_flask_run_cmdline():
|
|
||||||
"""Check if the application was started using "flask run" command line
|
|
||||||
|
|
||||||
Inspect the callstack.
|
|
||||||
See https://github.com/pallets/flask/blob/master/src/flask/__main__.py
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
bool: True if the application was started using "flask run".
|
|
||||||
"""
|
|
||||||
frames = inspect.stack()
|
|
||||||
if len(frames) < 2:
|
|
||||||
return False
|
|
||||||
return frames[-2].filename.endswith('flask/cli.py')
|
|
||||||
|
|
||||||
|
|
||||||
NO_SUBGROUPING = 'without further subgrouping'
|
NO_SUBGROUPING = 'without further subgrouping'
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -5,13 +5,8 @@ import pathlib
|
|||||||
import os
|
import os
|
||||||
import aiounittest
|
import aiounittest
|
||||||
|
|
||||||
# Before import from the searx package, we need to set up the (debug)
|
|
||||||
# environment. The import of the searx package initialize the searx.settings
|
|
||||||
# and this in turn takes the defaults from the environment!
|
|
||||||
|
|
||||||
os.environ.pop('SEARXNG_SETTINGS_PATH', None)
|
os.environ.pop('SEARXNG_SETTINGS_PATH', None)
|
||||||
os.environ['SEARXNG_DEBUG'] = '1'
|
|
||||||
os.environ['SEARXNG_DEBUG_LOG_LEVEL'] = 'WARNING'
|
|
||||||
os.environ['SEARXNG_DISABLE_ETC_SETTINGS'] = '1'
|
os.environ['SEARXNG_DISABLE_ETC_SETTINGS'] = '1'
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -27,15 +27,6 @@ class SearxRobotLayer:
|
|||||||
webapp = str(tests_path.parent / 'searx' / 'webapp.py')
|
webapp = str(tests_path.parent / 'searx' / 'webapp.py')
|
||||||
exe = 'python'
|
exe = 'python'
|
||||||
|
|
||||||
# The Flask app is started by Flask.run(...), don't enable Flask's debug
|
|
||||||
# mode, the debugger from Flask will cause wired process model, where
|
|
||||||
# the server never dies. Further read:
|
|
||||||
#
|
|
||||||
# - debug mode: https://flask.palletsprojects.com/quickstart/#debug-mode
|
|
||||||
# - Flask.run(..): https://flask.palletsprojects.com/api/#flask.Flask.run
|
|
||||||
|
|
||||||
os.environ['SEARXNG_DEBUG'] = '0'
|
|
||||||
|
|
||||||
# set robot settings path
|
# set robot settings path
|
||||||
os.environ['SEARXNG_SETTINGS_PATH'] = str(tests_path / 'robot' / 'settings_robot.yml')
|
os.environ['SEARXNG_SETTINGS_PATH'] = str(tests_path / 'robot' / 'settings_robot.yml')
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user