Voir le flux RSS

danielhagnoul

Python. Exemple utilisant une "dataclass", une "class" et une fonction "main" asynchrone.

Noter ce billet
par , 24/05/2020 à 20h27 (996 Affichages)
L'énoncé d'un exercice m'a donné l'envie de le réaliser en le modifiant légèrement.

Je stocke les données d'un SMS dans une dataclass au lieu d'un tuple et j'utilise asyncio pour différer l'arrivée des SMS et parcourir avec un léger décalage les instructions du programme.

Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#! python3
# coding: utf-8
 
import asyncio
from dataclasses import dataclass
 
# ---------------------------------
 
from termcolor import cprint
from dateutil.tz import gettz
import datetime as dt
import locale
 
locale.setlocale(locale.LC_ALL, ('fr_FR', 'UTF-8'))
 
tzi = gettz('Europe/Brussels')
cprint('{} {}'.format('danielhagnoul', '2020-05-24T19:50:00.998531+02:00'), 'red')
 
# -------------------------------
 
 
@dataclass(init=True, repr=False)
class SMS():
    """ Chaque objet généré par cette dataclass conserve les données d'un SMS """
    has_been_viewed: bool = False
    from_number: str = ''
    time_arrived: str = ''
    text_of_SMS: str = ''
 
    def __repr__(self):
        self.has_been_viewed = True
        return "<SMS time_arrived= {},\n from_number = {},\n text_of_SMS = {}>".format(
            self.time_arrived, self.from_number, self.text_of_SMS)
 
    __str__ = __repr__
 
 
class SMSStore:
    def __init__(self):
        self.__list_sms = []
 
    def add_new_arrival(self, from_number, text_of_SMS):
        self.__list_sms.append(
            SMS(time_arrived=dt.datetime.now(tz=tzi).isoformat(), from_number=from_number, text_of_SMS=text_of_SMS))
 
    def message_count(self):
        return len(self.__list_sms)
 
    def get_unread_indexes(self):
        lst = []
        for i, item in enumerate(self.__list_sms):
            if item.has_been_viewed == False:
                lst.append(i)
        return lst
 
    def get_message(self, index: int = 0):
        if index < len(self.__list_sms) and self.__list_sms[index]:
            return self.__list_sms[index]
        else:
            return None
 
    def delete(self, index: int = 0):
        if index < len(self.__list_sms) and self.__list_sms[index]:
            self.__list_sms.pop(index)  # pop car c'est une valeur d'index !
 
    def clear(self):
        self.__list_sms.clear()
 
    def __repr__(self):
        return "<SMSStore, nombre de messages = {}>".format(self.message_count())
 
    __str__ = __repr__
 
 
async def main():
    store = SMSStore()
    print(store)
    cprint("Patience, il faut attendre 20 secondes l'arrivée des SMS !", "green")
    store.add_new_arrival("024568713", "Bonjour Daniel !")
    await asyncio.sleep(5)
    store.add_new_arrival("024568713", "Tu vas bien !")
    await asyncio.sleep(5)
    store.add_new_arrival("024568713", "Déjà debout !")
    await asyncio.sleep(5)
    store.add_new_arrival("024568713", "Pas encore couché !")
    await asyncio.sleep(5)
    store.add_new_arrival("024568713", "Bonne nuit !")
    store.delete(2)  # index = 2
    print("Nombre de messages = ", store.message_count())
    await asyncio.sleep(1)
    print("Message = ", store.get_message(0))
    # 2 pas 3 car l'ancien message 2 est supprimé
    await asyncio.sleep(3)
    print("Message = ", store.get_message(2))
    await asyncio.sleep(3)
    print("Index des messages non lus = ", store.get_unread_indexes())
    await asyncio.sleep(3)
    store.clear()
    print("Nombre de messages = ", store.message_count())
 
if __name__ == "__main__":
    asyncio.run(main())

Licence Creative Commons Attribution 2.0 Belgique

Envoyer le billet « Python. Exemple utilisant une "dataclass", une "class" et une fonction "main" asynchrone. » dans le blog Viadeo Envoyer le billet « Python. Exemple utilisant une "dataclass", une "class" et une fonction "main" asynchrone. » dans le blog Twitter Envoyer le billet « Python. Exemple utilisant une "dataclass", une "class" et une fonction "main" asynchrone. » dans le blog Google Envoyer le billet « Python. Exemple utilisant une "dataclass", une "class" et une fonction "main" asynchrone. » dans le blog Facebook Envoyer le billet « Python. Exemple utilisant une "dataclass", une "class" et une fonction "main" asynchrone. » dans le blog Digg Envoyer le billet « Python. Exemple utilisant une "dataclass", une "class" et une fonction "main" asynchrone. » dans le blog Delicious Envoyer le billet « Python. Exemple utilisant une "dataclass", une "class" et une fonction "main" asynchrone. » dans le blog MySpace Envoyer le billet « Python. Exemple utilisant une "dataclass", une "class" et une fonction "main" asynchrone. » dans le blog Yahoo

Commentaires