Coverage for docs_src / tutorial / transaction / tutorial000.py: 86%

44 statements  

« prev     ^ index     » next       coverage.py v7.12.0, created at 2025-12-07 08:37 +0000

1import os 1abcdef

2from typing import Optional 1abcdef

3 

4from mongodb_odm import Document, connect 1abcdef

5from pymongo.errors import OperationFailure 1abcdef

6 

7 

8class Player(Document): 1abcdef

9 name: str 1abcdef

10 country_code: str 1abcdef

11 rating: Optional[int] = None 1abcdef

12 

13 

14def create_documents(): 1abcdef

15 with Document.start_session() as session: 1abcdef

16 with session.start_transaction(): 1abcdef

17 try: 1abcdef

18 Player( 1abcdef

19 name="Pelé", 

20 country_code="BRA", 

21 ).create(session=session) 

22 

23 maradona = Player(name="Diego Maradona", country_code="ARG") 1abcdef

24 maradona.create(session=session) 1abcdef

25 except OperationFailure: 

26 session.abort_transaction() 

27 

28 

29def update_documents(): 1abcdef

30 with Document.start_session() as session: 1abcdef

31 with session.start_transaction(): 1abcdef

32 try: 1abcdef

33 pele = Player.get({Player.name: "Pelé"}) 1abcdef

34 pele.rating = 98 1abcdef

35 pele.update(session=session) 1abcdef

36 

37 maradona = Player.get({Player.name: "Diego Maradona"}) 1abcdef

38 pele.rating = 97 1abcdef

39 maradona.update(session=session) 1abcdef

40 except OperationFailure: 

41 session.abort_transaction() 

42 

43 

44def delete_documents(): 1abcdef

45 with Document.start_session() as session: 1abcdef

46 with session.start_transaction(): 1abcdef

47 try: 1abcdef

48 pele = Player.get({Player.name: "Pelé"}) 1abcdef

49 pele.delete(session=session) 1abcdef

50 

51 maradona = Player.get({Player.name: "Diego Maradona"}) 1abcdef

52 maradona.delete(session=session) 1abcdef

53 except OperationFailure: 

54 session.abort_transaction() 

55 

56 

57def main(): 1abcdef

58 # Use a database that has a replica set. 

59 connect(os.environ.get("MONGO_URL", "mongodb://localhost:27017/testdb")) 1abcdef

60 

61 create_documents() 1abcdef

62 update_documents() 1abcdef

63 delete_documents() 1abcdef

64 

65 

66if __name__ == "__main__": 1abcdef

67 main()