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.py → encode_parse_value, decode_parse_value
src/parse_sdk/exceptions.py → ParseObjectNotFoundError (code 101)
src/parse_sdk/client.py → get_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
Ressources
Contexte
ParseObjectest 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.Endpoints REST Parse
API Python attendue
Fichiers à créer / modifier
src/parse_sdk/object.pysrc/parse_sdk/__init__.py→ ajouterParseObjecttests/unit/test_object.pyCe qui existe déjà (à importer, ne pas recréer)
src/parse_sdk/_http.py→ couche HTTPsrc/parse_sdk/_types.py→encode_parse_value,decode_parse_valuesrc/parse_sdk/exceptions.py→ParseObjectNotFoundError(code 101)src/parse_sdk/client.py→get_client()(issue #1)Points techniques
save(): POST si pas d'object_id, PUT sinonsave(), peuplerobject_id,created_at,updated_atdepuis la réponsefetch()lèveParseObjectNotFoundErrorsi le serveur retourne l'erreur 101_data: dict interne des champs,_dirty: champs modifiés depuis le dernier saveCritères d'acceptation
save()crée (POST) et peupleobject_id,created_at,updated_atsave()met à jour (PUT) siobject_idest définifetch()charge les données depuis Parse Serverfetch()lèveParseObjectNotFoundErrorsi objet inexistantdelete()supprime l'objetsave_sync(),fetch_sync(),delete_sync()disponiblesrespxobject.pymypy,black,ruffpassentRessources
src/parse_sdk/_types.py→encode_parse_value/decode_parse_value