RQL (Resource query language) is designed for modern application development. It is built for the web, ready for NoSQL, and highly extensible with simple syntax. This is a query language for fast and convenient database interaction. RQL was designed for use in URLs to request object-style data structures.
This library is a Django-Mongoengine specific implementation of RQL filtering.
Django Mongoengine RQL
can be installed from pypi.org using pip:
$ pip install django-mongoengine-rql
This library is fully based on Django RQL, so there are no specific docs for it. Full documentation for Django-RQL is available at https://django-rql.readthedocs.org.
# filters.py
from dj_mongoengine_rql.filter_cls import MongoengineRQLFilterClass
from py_rql.constants import FilterLookups
from your_docs import Document
class DocFilters(MongoengineRQLFilterClass):
MODEL = Document
SELECT = True
FILTERS = (
'filter1',
{
'filter': 'filter2',
'source': 'related_doc__doc_field',
},
{
'namespace': 'ns1',
'filters': ('ns1f',),
},
{
'filter': 'filter3',
'lookups': {FilterLookups.EQ, FilterLookups.IN},
},
)
# views.py
from dj_rql.drf.backend import RQLFilterBackend
from dj_rql.drf.paginations import RQLContentRangeLimitOffsetPagination
from rest_framework import mixins
from rest_framework.viewsets import GenericViewSet
class DRFViewSet(mixins.ListModelMixin, GenericViewSet):
queryset = Document.objects.all()
rql_filter_class = DocFilters
pagination_class = RQLContentRangeLimitOffsetPagination
filter_backends = (RQLFilterBackend,)
Due to implementation and Mongo engine features there may be some limitations in filtering, for example:
distinct
setting is not supported for filters- annotations are not supported, as well
- Python 3.8+
- Install dependencies
pip install poetry && poetry install
- We use
isort
library to order and format our imports, andblack
- to format the code. We check it usingflake8-isort
andflake8-black
libraries (automatically onflake8
run).
For convenience you may rundocker compose run format
to format the code.
- Python 3.8+
- Install dependencies
pip install poetry && poetry install
Check code style: poetry run flake8
Run tests: poetry run pytest
Run integration tests: docker compose run app_test
Tests reports are generated in tests/reports
.
out.xml
- JUnit test resultscoverage.xml
- Coverage xml results
To generate HTML coverage reports use:
--cov-report html:tests/reports/cov_html
Django Mongoengine RQL
is released under the Apache License Version 2.0.