Skip to main content

Resource Query Language to ORM

Project description

Quality Gate Status Coverage PyPI - Python Version

ReQueLa

ReQueLa, your data assistant!

What is ReQueLa?

ReQueLa is a Python library that allows you to build complex queries to filter and order data in your database. Query are written using RQL, Resource Query Language, a query language expecially designed for RESTful resources.

Installation

pip install requela

Supported RQL operators

Syntax Explanation
eq(field,value) Equal to
ne(field,value) Not Equal to
gt(field,value) Greater Than
gte(field,value) Greater Than or Equal
lt(field,value) Less Than
lte(field,value) Less Than or Equal
in(field,(value1,value2,...)) In list
out(field,(value1,value2,...)) Not In list
like(field,value) Like
ilike(field,value) Case-insensitive Like
and(expression1,expression2,...) Logical AND
or(expression1,expression2,...) Logical OR
not(expression) Logical NOT
any(relationship,expression) ANY operator for to-many relationships
order_by(field1,field2,...) Order By fields

Examples

  • Filtering: and(eq(name,John),gt(age,30))
  • Navigation through relationships using dot notation: eq(account.name,My Account) to filter on a related field.
  • Filtering with ANY operator: any(users,eq(users.name,John))
  • Ordering: order_by(name,age)
  • To order in descendant order, prefix the property name with a minus sign: order_by(-age)
  • Combining filtering and ordering: and(eq(name,John),gt(age,30))&order_by(name,age)
  • Using logical operators: or(eq(name,John),eq(name,Jane))&order_by(name)
  • Using NOT operator: not(eq(name,John))&order_by(name)
  • Using LIKE operator with wildcard symbol *: like(name,*John*)
  • Using ILIKE operator with wildcard symbol *: ilike(name,*John*)

Usage

Use QueryBuilder directly

SQLAlchemy

from requela import get_builder_for_model

from app.db import get_session
from app.models import MyModel

builder = get_builder_for_model(MyModel)
statement = builder.build_query("and(eq(name,John),gt(age,30))&order_by(name,-age)")

with get_session() as session:
    result = session.execute(statement)
    for model in result:
        print(model)

Django

from requela import get_builder_for_model

from app.models import MyModel

builder = get_builder_for_model(MyModel)
result = builder.build_query("and(eq(name,John),gt(age,30))&order_by(name,-age)")

for model in result:
    print(model)

Create a ModelRQLRules class

You can create a class to specify filtering and ordering rules for a given model like:

from requela import FieldRule, ModelRQLRules, Operator, RelationshipRules
from tests.django.models import Account, User


class AccountRules(ModelRQLRules):
    __model__ = Account

    name = FieldRule()
    description = FieldRule()
    status = FieldRule()
    balance = FieldRule()
    created_at = FieldRule(
        alias="events.created.at",
    )


class UserRules(ModelRQLRules):
    __model__ = User

    name = FieldRule()
    age = FieldRule()
    role = FieldRule(
        allowed_operators=[Operator.IN, Operator.OUT],
    )
    is_active = FieldRule(allow_ordering=False)
    birth_date = FieldRule(
        alias="events.born.at",
    )
    account = RelationshipRules(rules=AccountRules())

    rules = UserRules()
    query = rules.build_query("and(eq(name,John),gt(age,30),eq(events.born.at,2024-01-01))&order_by(name,-age)")

License

ReQueLa is licensed under the Apache 2.0 License and is copyright SoftwareOne AG.

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

requela-0.1.16.tar.gz (158.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

requela-0.1.16-py3-none-any.whl (22.6 kB view details)

Uploaded Python 3

File details

Details for the file requela-0.1.16.tar.gz.

File metadata

  • Download URL: requela-0.1.16.tar.gz
  • Upload date:
  • Size: 158.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for requela-0.1.16.tar.gz
Algorithm Hash digest
SHA256 54be7f2993f7a43a0d57d57da5e9e046ac8e6b0c1ef254939fc0f269e412e2a1
MD5 01c027f95e80865482b664b10b4471de
BLAKE2b-256 1ab5c49e5dd8e27e4fdfc009de4358bc8fa30d304530295da40ec82e9a803fea

See more details on using hashes here.

Provenance

The following attestation bundles were made for requela-0.1.16.tar.gz:

Publisher: on-release-main.yml on softwareone-platform/requela

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file requela-0.1.16-py3-none-any.whl.

File metadata

  • Download URL: requela-0.1.16-py3-none-any.whl
  • Upload date:
  • Size: 22.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for requela-0.1.16-py3-none-any.whl
Algorithm Hash digest
SHA256 05358c1e5e5c7cb8d7b230e5bee67f1c58052e66edacfc1adaa925d2151f1d75
MD5 e15605004824067e5601a8221ee3d82c
BLAKE2b-256 d2f340682c3c585fc9156d6fc54da02b6b21daf543180a6ba61be91b4b5b4965

See more details on using hashes here.

Provenance

The following attestation bundles were made for requela-0.1.16-py3-none-any.whl:

Publisher: on-release-main.yml on softwareone-platform/requela

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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