Skip to content

feat(query): implémenter ParseQuery — filtres de base et pagination #18

@Ulrich75

Description

@Ulrich75

Contexte

ParseQuery permet de rechercher des objets dans une classe Parse avec des filtres, du tri et de la pagination.

⚠️ Dépend de #2 (ParseObject) — find() retourne des instances ParseObject.

Endpoint REST Parse

GET /classes/{ClassName}?where={...}&limit=N&skip=N&order=field

Correspondances filtres → opérateurs JSON Parse

Méthode Python Opérateur JSON
equal_to("k", v) {"k": v}
not_equal_to("k", v) {"k": {"$ne": v}}
greater_than("k", v) {"k": {"$gt": v}}
less_than("k", v) {"k": {"$lt": v}}
greater_than_or_equal_to("k", v) {"k": {"$gte": v}}
less_than_or_equal_to("k", v) {"k": {"$lte": v}}

API Python attendue

from parse_sdk import ParseQuery

results = await (
    ParseQuery("GameScore")
    .equal_to("playerName", "Alice")
    .greater_than("score", 1000)
    .limit(25)
    .order_by_descending("score")
    .find()
)

first = await ParseQuery("GameScore").equal_to("active", True).first()
count = await ParseQuery("GameScore").greater_than("score", 500).count()

results = query.find_sync()

Fichiers à créer / modifier

  • Créer src/parse_sdk/query.py
  • Modifier src/parse_sdk/__init__.py → ajouter ParseQuery
  • Créer tests/unit/test_query_basic.py

Points techniques

  • _constraints : dict interne pour les filtres where
  • _options : dict pour limit, skip, order
  • count() ajoute count=1&limit=0 aux paramètres
  • first() appelle find() avec limit=1 et retourne le premier ou None
  • Utiliser encode_parse_value() pour sérialiser les valeurs des filtres

Critères d'acceptation

  • Chaque filtre génère le bon opérateur JSON
  • equal_to gère le cas sans opérateur
  • Toutes les méthodes retournent self (chaînage)
  • find()list[ParseObject]
  • first()ParseObject | None
  • count()int
  • Versions _sync disponibles
  • Tests mockés avec respx
  • mypy, black, ruff passent

Ressources

Metadata

Metadata

Assignees

No one assigned

    Labels

    P0 · critiqueBloquant — à traiter immédiatementfeatureNouvelle fonctionnalité à développerintermediateRequiert de l'expérience Python / asyncmodule · queryParseQuery — filtres et pagination

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions