Skip to main content

Python RQL Filtering

Project description

Python RQL

pyversions PyPi Status PyPI status PyPI Downloads Quality Gate Status Coverage


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 fast and convenient database interaction. RQL was designed for use in URLs to request object-style data structures.

RQL Reference


Python RQL can be installed from using pip:

$ pip install lib-rql


Python RQL documentation is hosted on the Read the Docs service.

Projects using Python RQL

Django RQL is the Django app, that adds RQL filtering to your application.

Visit the Django RQL project repository for more informations.


Parsing is done with Lark (cheatsheet). The current parsing algorithm is LALR(1) with standard lexer.

  1. Values with whitespaces or special characters, like ',' need to have "" or ''
  2. Supported date format is ISO8601: 2019-02-12
  3. Supported datetime format is ISO8601: 2019-02-12T10:02:00 / 2019-02-12T10:02Z / 2019-02-12T10:02:00+03:00

Supported operators

  1. Comparison (eq, ne, gt, ge, lt, le, like, ilike, search)
  2. List (in, out)
  3. Logical (and, or, not)
  4. Constants (null(), empty())
  5. Ordering (ordering)
  6. Select (select)
  7. Tuple (t)


Parsing a RQL query

from py_rql import parse
from py_rql.exceptions import RQLFilterError

    tree = parse('eq(key,value)')
except RQLFilterError:

Filter a list of dictionaries

from py_rql.constants import FilterTypes
from py_rql.filter_cls import FilterClass

class BookFilter(FilterClass):
    FILTERS = [
            'filter': 'title',
            'filter': '',
            'filter': 'status',
            'filter': 'pages',
            'type': FilterTypes.INT,
            'filter': 'featured',
            'type': FilterTypes.BOOLEAN,
            'filter': 'publish_date',
            'type': FilterTypes.DATETIME,

filters = BookFilter()

query = 'eq(title,Practical Modern JavaScript)'
results = list(filters.filter(query, DATA))


query = 'or(eq(pages,472),lt(pages,400))'
results = list(filters.filter(query, DATA))



  1. Python 3.8+
  2. Install dependencies pip install poetry && poetry install


  1. Python 3.8+
  2. Install dependencies pip install poetry && poetry install

Check code style: poetry run flake8 Run tests: poetry run pytest

Tests reports are generated in tests/reports.

  • out.xml - JUnit test results
  • coverage.xml - Coverage xml results

To generate HTML coverage reports use: --cov-report html:tests/reports/cov_html


Python RQL is released under the Apache License Version 2.0.

Project details

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lib_rql-2.0.1.tar.gz (13.6 kB view hashes)

Uploaded Source

Built Distribution

lib_rql-2.0.1-py3-none-any.whl (14.3 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page