summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBnyro <bnyro@tutanota.com>2024-09-11 19:08:33 +0200
committerMarkus Heiser <markus.heiser@darmarIT.de>2024-09-15 08:04:21 +0200
commit84e2f9d46a7aada4347df7f4a79147170cc31dc0 (patch)
treed572e77c433cca11689644bca3ec96166ef8667f
parent231e55f38dcb0d78c264672015b636c8a0171410 (diff)
downloadsearxng-84e2f9d46a7aada4347df7f4a79147170cc31dc0.tar.gz
searxng-84e2f9d46a7aada4347df7f4a79147170cc31dc0.zip
[feat] gitlab: implement dedicated module
Co-authored-by: Markus Heiser <markus.heiser@darmarit.de>
-rw-r--r--docs/dev/engines/online/gitlab.rst8
-rw-r--r--searx/engines/gitlab.py95
-rw-r--r--searx/settings.yml25
3 files changed, 114 insertions, 14 deletions
diff --git a/docs/dev/engines/online/gitlab.rst b/docs/dev/engines/online/gitlab.rst
new file mode 100644
index 000000000..5f0d3e3d1
--- /dev/null
+++ b/docs/dev/engines/online/gitlab.rst
@@ -0,0 +1,8 @@
+.. _gitlab engine:
+
+======
+GitLab
+======
+
+.. automodule:: searx.engines.gitlab
+ :members:
diff --git a/searx/engines/gitlab.py b/searx/engines/gitlab.py
new file mode 100644
index 000000000..b5ab7df2a
--- /dev/null
+++ b/searx/engines/gitlab.py
@@ -0,0 +1,95 @@
+# SPDX-License-Identifier: AGPL-3.0-or-later
+"""Engine to search in collaborative software platforms based on GitLab_ with
+the `GitLab REST API`_.
+
+.. _GitLab: https://about.gitlab.com/install/
+.. _GitLab REST API: https://docs.gitlab.com/ee/api/
+
+Configuration
+=============
+
+The engine has the following mandatory setting:
+
+- :py:obj:`base_url`
+
+Optional settings are:
+
+- :py:obj:`api_path`
+
+.. code:: yaml
+
+ - name: gitlab
+ engine: gitlab
+ base_url: https://gitlab.com
+ shortcut: gl
+ about:
+ website: https://gitlab.com/
+ wikidata_id: Q16639197
+
+ - name: gnome
+ engine: gitlab
+ base_url: https://gitlab.gnome.org
+ shortcut: gn
+ about:
+ website: https://gitlab.gnome.org
+ wikidata_id: Q44316
+
+Implementations
+===============
+
+"""
+
+from urllib.parse import urlencode
+from dateutil import parser
+
+about = {
+ "website": None,
+ "wikidata_id": None,
+ "official_api_documentation": "https://docs.gitlab.com/ee/api/",
+ "use_official_api": True,
+ "require_api_key": False,
+ "results": "JSON",
+}
+
+categories = ['it', 'repos']
+paging = True
+
+base_url: str = ""
+"""Base URL of the GitLab host."""
+
+api_path: str = 'api/v4/projects'
+"""The path the `project API <https://docs.gitlab.com/ee/api/projects.html>`_.
+
+The default path should work fine usually.
+"""
+
+
+def request(query, params):
+ args = {'search': query, 'page': params['pageno']}
+ params['url'] = f"{base_url}/{api_path}?{urlencode(args)}"
+
+ return params
+
+
+def response(resp):
+ results = []
+
+ for item in resp.json():
+ results.append(
+ {
+ 'template': 'packages.html',
+ 'url': item.get('web_url'),
+ 'title': item.get('name'),
+ 'content': item.get('description'),
+ 'thumbnail': item.get('avatar_url'),
+ 'package_name': item.get('name'),
+ 'maintainer': item.get('namespace', {}).get('name'),
+ 'publishedDate': parser.parse(item.get('last_activity_at') or item.get("created_at")),
+ 'tags': item.get('tag_list', []),
+ 'popularity': item.get('star_count'),
+ 'homepage': item.get('readme_url'),
+ 'source_code_url': item.get('http_url_to_repo'),
+ }
+ )
+
+ return results
diff --git a/searx/settings.yml b/searx/settings.yml
index 4417485bc..2e18baaff 100644
--- a/searx/settings.yml
+++ b/searx/settings.yml
@@ -807,24 +807,21 @@ engines:
timeout: 10
- name: gitlab
- engine: json_engine
- paging: true
- search_url: https://gitlab.com/api/v4/projects?search={query}&page={pageno}
- url_query: web_url
- title_query: name_with_namespace
- content_query: description
- page_size: 20
- categories: [it, repos]
+ engine: gitlab
+ base_url: https://gitlab.com
shortcut: gl
- timeout: 10.0
disabled: true
about:
- website: https://about.gitlab.com/
+ website: https://gitlab.com/
wikidata_id: Q16639197
- official_api_documentation: https://docs.gitlab.com/ee/api/
- use_official_api: false
- require_api_key: false
- results: JSON
+
+ # - name: gnome
+ # engine: gitlab
+ # base_url: https://gitlab.gnome.org
+ # shortcut: gn
+ # about:
+ # website: https://gitlab.gnome.org
+ # wikidata_id: Q44316
- name: github
engine: github