wagtailmeili


Namewagtailmeili JSON
Version 0.3.1 PyPI version JSON
download
home_pageNone
SummaryA Meilisearch backend for Wagtail CMS
upload_time2025-02-14 01:59:59
maintainerNone
docs_urlNone
authorNone
requires_python>=3.11
licenseNone
keywords wagtail django search meilisearch backend
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Wagtailmeili
[![Version](https://img.shields.io/pypi/v/wagtailmeili.svg?style=flat)](https://pypi.python.org/pypi/wagtailmeili/)
[![codecov](https://codecov.io/gh/softquantum/wagtailmeili/graph/badge.svg?token=QY0HJ9L6N5)](https://codecov.io/gh/softquantum/wagtailmeili)
[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
[![License](https://img.shields.io/badge/license-BSD-blue.svg?style=flat)](https://opensource.org/licenses/BSD-3-Clause)

A search backend for Wagtail using [MeiliSearch](https://github.com/meilisearch/MeiliSearch).

> [!CAUTION]
> This package is still in development and until version 1.0.0, I will not maintain a DeprecationWarning pattern.
> I built the integration with meilisearch about 2 years ago for a project and decided to make it a public package to improve it and integrate more features.

> [!TIP]  
> If you need support or require help with a Wagtail project, you can hire me 😊

## Requirements
Wagtailmeili requires the following:
- Python >= 3.11
- Wagtail >= 5.2

## Installation

### In your Wagtail project
#### Configure your MeiliSearch instance in your `settings.py` file.
Install Meilisearch python client e.g., using pip
```shell
  pip install meilisearch
```
Add `wagtailmeili` to your `INSTALLED_APPS`
```python
INSTALLED_APPS = [
    # ...
    "wagtailmeili",
    # ...
]
```
add the search backend to your `WAGTAILSEARCH_BACKENDS`
```python
import os

WAGTAILSEARCH_BACKENDS = {
    "default": {
        "BACKEND": "wagtailmeili.backend",
        "HOST":  os.environ.get("MEILISEARCH_HOST", "http://127.0.0.1"),
        "PORT": os.environ.get("MEILISEARCH_PORT", "7700"),
        "MASTER_KEY": os.environ.get("MEILISEARCH_MASTER_KEY", "your-master-key"),
        # "STOP_WORDS": ...
        # "RANKING_RULES: ...
        # "SKIP_MODELS": ...
        # "SKIP_MODELS_BY_FIELD_VALUE": ...
    },
}
```
## Features
### Default search configs
* STOP_WORDS: see defaults in [settings.py](src/wagtailmeili/settings.py)
* RANKING_RULES: see defaults in [settings.py](src/wagtailmeili/settings.py)
* SKIP_MODELS: "skip_models" is a list of models that you want to skip from indexing no matter the model setup.
```python
WAGTAILSEARCH_BACKENDS = {
    "default": {
        "SKIP_MODELS": ["app_label.Model1", "app_label.Model2",],
        # ...
    }
}
```
* SKIP_MODELS_BY_FIELD_VALUE: A convenient way to skip instances based on attributes
```python
WAGTAILSEARCH_BACKENDS = {
    "default": {
        # add this to not index pages that are not published for example
        "SKIP_MODELS_BY_FIELD_VALUE": {
            "wagtailmeili_testapp.MoviePage": {
                "field": "live",
                "value": False,
            },
        },
        # ...
    }
}
```

### Model fields

To declare **_sortable attributes_** or add **_ranking rules_** for the model, just add, for example:
```python
from wagtail.models import Page


class MySuperPage(Page):
    """A Super Page to do incredible things."""
    
    sortable_attributes = [
        "published_last_timestamp", 
        # ...
    ]
    ranking_rules = [
        "published_last_timestamp:desc",
        # ...
    ]
```

### Template Tag filter
```html
{% load meilisearch %}

{% get_matches_position result %}
```

## Roadmap before 1.0.0 (unsorted)
- -[x] ~~Adding tests~~
- -[ ] Refactoring index.py to be with easier testing
- -[ ] Exploring Meilisearch and bringing more of its features for Wagtail
- -[ ] Getting a leaner implementation (looking at Autocomplete and rebuilder)
- -[ ] Giving more love to the Sample project with a frontend
- -[ ] official documentation

## Sample Project: WMDB
The Wagtail Movie Database (WMDB) is a sample project for testing purposes. To run the project, follow these steps:
1. start the local meilisearch instance
```shell
meilisearch --master-key=<your masterKey>
```
2. copy the directory wagtail_moviedb wherever you want
3. create a virtualenv and activate it (instructions on linux/macOS)
```shell
python -m venv .venv
source .venv/bin/activate
```
4. install the dependencies
```shell
pip install -r requirements.txt
```
5. add an .env file
```dotenv
MEILISEARCH_MASTER_KEY="your masterKey"
```
6. apply migrations
```shell
python manage.py migrate
```
7. Create a superuser (optional)
```shell
python manage.py createsuperuser
```
8. load movies & start local web server
```shell
python manage.py load_movies
python manage.py runserver
```
9. visit your meilisearch local instance: https://127.0.0.1:7700, give it your master-key.  You should see some movies loaded.
10. update index (optional):
```shell
python manage.py update_index
```

## Contributions
Welcome to all contributions!

### Prerequisites
- Install Meilisearch locally following their [documentation](https://www.meilisearch.com/docs/learn/self_hosted/install_meilisearch_locally)
- Start Meilisearch instance in your favorite terminal

```shell
meilisearch --master-key correctmasterkey
```

### Install
To make changes to this project, first clone this repository:

```sh
git clone git@github.com:softquantum/wagtailmeili.git
cd wagtailmeili
```

With your preferred virtualenv activated, install testing dependencies:
#### Using pip

```sh
pip install "pip>=21.3"
pip install -e '.[dev]' -U
```
### How to run tests

You can run tests as shown below:
```shell
pytest 
```
or with tox
```
tox
```

## License
This project is released under the [3-Clause BSD License](LICENSE).

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "wagtailmeili",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.11",
    "maintainer_email": "Maxime Decooman <maxime@softquantum.com>",
    "keywords": "wagtail, django, search, meilisearch, backend",
    "author": null,
    "author_email": "Maxime Decooman <maxime@softquantum.com>",
    "download_url": "https://files.pythonhosted.org/packages/50/fc/fb2636e5043ac98a919193c713c33ac8f25d6d3c1959af112bc6b87ecd21/wagtailmeili-0.3.1.tar.gz",
    "platform": null,
    "description": "# Wagtailmeili\n[![Version](https://img.shields.io/pypi/v/wagtailmeili.svg?style=flat)](https://pypi.python.org/pypi/wagtailmeili/)\n[![codecov](https://codecov.io/gh/softquantum/wagtailmeili/graph/badge.svg?token=QY0HJ9L6N5)](https://codecov.io/gh/softquantum/wagtailmeili)\n[![Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)\n[![License](https://img.shields.io/badge/license-BSD-blue.svg?style=flat)](https://opensource.org/licenses/BSD-3-Clause)\n\nA search backend for Wagtail using [MeiliSearch](https://github.com/meilisearch/MeiliSearch).\n\n> [!CAUTION]\n> This package is still in development and until version 1.0.0, I will not maintain a DeprecationWarning pattern.\n> I built the integration with meilisearch about 2 years ago for a project and decided to make it a public package to improve it and integrate more features.\n\n> [!TIP]  \n> If you need support or require help with a Wagtail project, you can hire me \ud83d\ude0a\n\n## Requirements\nWagtailmeili requires the following:\n- Python >= 3.11\n- Wagtail >= 5.2\n\n## Installation\n\n### In your Wagtail project\n#### Configure your MeiliSearch instance in your `settings.py` file.\nInstall Meilisearch python client e.g., using pip\n```shell\n  pip install meilisearch\n```\nAdd `wagtailmeili` to your `INSTALLED_APPS`\n```python\nINSTALLED_APPS = [\n    # ...\n    \"wagtailmeili\",\n    # ...\n]\n```\nadd the search backend to your `WAGTAILSEARCH_BACKENDS`\n```python\nimport os\n\nWAGTAILSEARCH_BACKENDS = {\n    \"default\": {\n        \"BACKEND\": \"wagtailmeili.backend\",\n        \"HOST\":  os.environ.get(\"MEILISEARCH_HOST\", \"http://127.0.0.1\"),\n        \"PORT\": os.environ.get(\"MEILISEARCH_PORT\", \"7700\"),\n        \"MASTER_KEY\": os.environ.get(\"MEILISEARCH_MASTER_KEY\", \"your-master-key\"),\n        # \"STOP_WORDS\": ...\n        # \"RANKING_RULES: ...\n        # \"SKIP_MODELS\": ...\n        # \"SKIP_MODELS_BY_FIELD_VALUE\": ...\n    },\n}\n```\n## Features\n### Default search configs\n* STOP_WORDS: see defaults in [settings.py](src/wagtailmeili/settings.py)\n* RANKING_RULES: see defaults in [settings.py](src/wagtailmeili/settings.py)\n* SKIP_MODELS: \"skip_models\" is a list of models that you want to skip from indexing no matter the model setup.\n```python\nWAGTAILSEARCH_BACKENDS = {\n    \"default\": {\n        \"SKIP_MODELS\": [\"app_label.Model1\", \"app_label.Model2\",],\n        # ...\n    }\n}\n```\n* SKIP_MODELS_BY_FIELD_VALUE: A convenient way to skip instances based on attributes\n```python\nWAGTAILSEARCH_BACKENDS = {\n    \"default\": {\n        # add this to not index pages that are not published for example\n        \"SKIP_MODELS_BY_FIELD_VALUE\": {\n            \"wagtailmeili_testapp.MoviePage\": {\n                \"field\": \"live\",\n                \"value\": False,\n            },\n        },\n        # ...\n    }\n}\n```\n\n### Model fields\n\nTo declare **_sortable attributes_** or add **_ranking rules_** for the model, just add, for example:\n```python\nfrom wagtail.models import Page\n\n\nclass MySuperPage(Page):\n    \"\"\"A Super Page to do incredible things.\"\"\"\n    \n    sortable_attributes = [\n        \"published_last_timestamp\", \n        # ...\n    ]\n    ranking_rules = [\n        \"published_last_timestamp:desc\",\n        # ...\n    ]\n```\n\n### Template Tag filter\n```html\n{% load meilisearch %}\n\n{% get_matches_position result %}\n```\n\n## Roadmap before 1.0.0 (unsorted)\n- -[x] ~~Adding tests~~\n- -[ ] Refactoring index.py to be with easier testing\n- -[ ] Exploring Meilisearch and bringing more of its features for Wagtail\n- -[ ] Getting a leaner implementation (looking at Autocomplete and rebuilder)\n- -[ ] Giving more love to the Sample project with a frontend\n- -[ ] official documentation\n\n## Sample Project: WMDB\nThe Wagtail Movie Database (WMDB) is a sample project for testing purposes. To run the project, follow these steps:\n1. start the local meilisearch instance\n```shell\nmeilisearch --master-key=<your masterKey>\n```\n2. copy the directory wagtail_moviedb wherever you want\n3. create a virtualenv and activate it (instructions on linux/macOS)\n```shell\npython -m venv .venv\nsource .venv/bin/activate\n```\n4. install the dependencies\n```shell\npip install -r requirements.txt\n```\n5. add an .env file\n```dotenv\nMEILISEARCH_MASTER_KEY=\"your masterKey\"\n```\n6. apply migrations\n```shell\npython manage.py migrate\n```\n7. Create a superuser (optional)\n```shell\npython manage.py createsuperuser\n```\n8. load movies & start local web server\n```shell\npython manage.py load_movies\npython manage.py runserver\n```\n9. visit your meilisearch local instance: https://127.0.0.1:7700, give it your master-key.  You should see some movies loaded.\n10. update index (optional):\n```shell\npython manage.py update_index\n```\n\n## Contributions\nWelcome to all contributions!\n\n### Prerequisites\n- Install Meilisearch locally following their [documentation](https://www.meilisearch.com/docs/learn/self_hosted/install_meilisearch_locally)\n- Start Meilisearch instance in your favorite terminal\n\n```shell\nmeilisearch --master-key correctmasterkey\n```\n\n### Install\nTo make changes to this project, first clone this repository:\n\n```sh\ngit clone git@github.com:softquantum/wagtailmeili.git\ncd wagtailmeili\n```\n\nWith your preferred virtualenv activated, install testing dependencies:\n#### Using pip\n\n```sh\npip install \"pip>=21.3\"\npip install -e '.[dev]' -U\n```\n### How to run tests\n\nYou can run tests as shown below:\n```shell\npytest \n```\nor with tox\n```\ntox\n```\n\n## License\nThis project is released under the [3-Clause BSD License](LICENSE).\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "A Meilisearch backend for Wagtail CMS",
    "version": "0.3.1",
    "project_urls": {
        "Home": "https://github.com/softquantum/wagtailmeili",
        "Issues": "https://github.com/softquantum/wagtailmeili/issues"
    },
    "split_keywords": [
        "wagtail",
        " django",
        " search",
        " meilisearch",
        " backend"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "ae50ca1cdf89d4b94925407e95eb4e7c5d9e2170b95f15a4a906a5ece8faf986",
                "md5": "2ee9f7779ab95815295f13187c728608",
                "sha256": "d08f0075274d94914daf0448c020687721a8e0e9474b07b504593352d990cc72"
            },
            "downloads": -1,
            "filename": "wagtailmeili-0.3.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "2ee9f7779ab95815295f13187c728608",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.11",
            "size": 24070,
            "upload_time": "2025-02-14T01:59:57",
            "upload_time_iso_8601": "2025-02-14T01:59:57.331381Z",
            "url": "https://files.pythonhosted.org/packages/ae/50/ca1cdf89d4b94925407e95eb4e7c5d9e2170b95f15a4a906a5ece8faf986/wagtailmeili-0.3.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "50fcfb2636e5043ac98a919193c713c33ac8f25d6d3c1959af112bc6b87ecd21",
                "md5": "29e675c237e0d6f90bff55d7f5933290",
                "sha256": "c369dee7f8626bfa3d966eefaea7b96521d36c61cde8ac234802280d93887383"
            },
            "downloads": -1,
            "filename": "wagtailmeili-0.3.1.tar.gz",
            "has_sig": false,
            "md5_digest": "29e675c237e0d6f90bff55d7f5933290",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.11",
            "size": 6172423,
            "upload_time": "2025-02-14T01:59:59",
            "upload_time_iso_8601": "2025-02-14T01:59:59.116701Z",
            "url": "https://files.pythonhosted.org/packages/50/fc/fb2636e5043ac98a919193c713c33ac8f25d6d3c1959af112bc6b87ecd21/wagtailmeili-0.3.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-02-14 01:59:59",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "softquantum",
    "github_project": "wagtailmeili",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "tox": true,
    "lcname": "wagtailmeili"
}
        
Elapsed time: 0.42666s