Skip to content

feat(object): implémenter ParseObject — CRUD de base (save, fetch, delete) #16

@Ulrich75

Description

@Ulrich75

Contexte

ParseObject est le cœur du SDK. Il représente un enregistrement dans une classe Parse et expose les opérations fondamentales : créer, lire, mettre à jour, supprimer.

⚠️ Dépend de #1 (ParseClient) — attendez que cette issue soit mergée.

Endpoints REST Parse

POST   /classes/{ClassName}              → création
GET    /classes/{ClassName}/{objectId}   → lecture
PUT    /classes/{ClassName}/{objectId}   → mise à jour
DELETE /classes/{ClassName}/{objectId}   → suppression

API Python attendue

from parse_sdk import ParseObject

obj = ParseObject("GameScore")
obj.set("playerName", "Alice")
obj.set("score", 1337)
await obj.save()
print(obj.object_id)    # "Ed1nuqPvcm"
print(obj.created_at)   # datetime(2024, ...)

obj2 = ParseObject("GameScore", object_id="Ed1nuqPvcm")
await obj2.fetch()
print(obj2.get("playerName"))  # "Alice"

obj2.set("score", 9001)
await obj2.save()   # PUT automatique si object_id présent

await obj2.delete()

# Versions synchrones
obj3 = ParseObject("GameScore")
obj3.save_sync()
obj3.fetch_sync()
obj3.delete_sync()

Fichiers à créer / modifier

  • Créer src/parse_sdk/object.py
  • Modifier src/parse_sdk/__init__.py → ajouter ParseObject
  • Créer tests/unit/test_object.py

Ce qui existe déjà (à importer, ne pas recréer)

  • src/parse_sdk/_http.py → couche HTTP
  • src/parse_sdk/_types.pyencode_parse_value, decode_parse_value
  • src/parse_sdk/exceptions.pyParseObjectNotFoundError (code 101)
  • src/parse_sdk/client.pyget_client() (issue #1)

Points techniques

  • save() : POST si pas d'object_id, PUT sinon
  • Après save(), peupler object_id, created_at, updated_at depuis la réponse
  • fetch() lève ParseObjectNotFoundError si le serveur retourne l'erreur 101
  • _data : dict interne des champs, _dirty : champs modifiés depuis le dernier save

Critères d'acceptation

  • save() crée (POST) et peuple object_id, created_at, updated_at
  • save() met à jour (PUT) si object_id est défini
  • fetch() charge les données depuis Parse Server
  • fetch() lève ParseObjectNotFoundError si objet inexistant
  • delete() supprime l'objet
  • save_sync(), fetch_sync(), delete_sync() disponibles
  • Tests mockés avec respx
  • Couverture > 80% sur object.py
  • mypy, black, ruff passent

Ressources

Metadata

Metadata

Assignees

No one assigned

    Labels

    P0 · critiqueBloquant — à traiter immédiatementadvancedArchitecture complexe ou décisions techniquesfeatureNouvelle fonctionnalité à développermodule · objectParseObject — CRUD et types Parse

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions