Skip to content

feat(parsepy): implémenter les opérations atomiques (Issue #17)Feature/parsepy/atomic operations#27

Open
0yenga wants to merge 20 commits intodevelopfrom
feature/parsepy/atomic-operations
Open

feat(parsepy): implémenter les opérations atomiques (Issue #17)Feature/parsepy/atomic operations#27
0yenga wants to merge 20 commits intodevelopfrom
feature/parsepy/atomic-operations

Conversation

@0yenga
Copy link
Copy Markdown

@0yenga 0yenga commented Apr 5, 2026

Résumé

Cette PR implémente les opérations atomiques (increment, add_to_array, add_unique, remove_from_array, unset) sur la classe ParseObject et ajoute le support de sérialisation pour les types spéciaux (GeoPoint). Le but est de permettre la manipulation avancée des données côté serveur sans écraser les données distantes. De plus, les opérations CRUD synchrones manquantes ont été ajoutées pour complétude.

Issue liée

Closes #17


Type de changement

  • feat — Nouvelle fonctionnalité
  • fix — Correction de bug
  • docs — Documentation uniquement
  • test — Ajout ou modification de tests
  • refactor — Refactoring sans changement de comportement
  • chore — Maintenance, CI/CD, dépendances
  • breaking change — Modifie l'API publique (nécessite un bump majeur)

Changements apportés

  • Ajout des 5 méthodes de modification atomique dans ParseObject
  • Ajout de la sérialisation automatique des types spéciaux (ex: GeoPoint) dans encode_parse_value()
  • Ajout des méthodes CRUD synchrones (save_sync, delete_sync, fetch_sync)
  • Ajout des tests unitaires complets pour ces nouvelles méthodes

Comment tester

# Exemple de code pour tester manuellement
import asyncio
from parse_sdk import ParseClient, ParseObject
from parse_sdk._types import GeoPoint

ParseClient(app_id="app_id", rest_key="rest_key", server_url="https://api.parse.com/1")

async def test_feature():
    obj = ParseObject("Player")
    # Test GeoPoint et Set standard
    obj.set("location", GeoPoint(48.8, 2.3))
    
    # Test opérations atomiques chaînées
    obj.increment("score", 10).add_unique("badges", ["novice"]).unset("old_status")
    
    await obj.save()
    print("Objet sauvegardé avec succès.")

asyncio.run(test_feature())

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant