Bonjour, j'ai écrit un code dont voici une fonction j'aimerais attendre la fin de l'envois du fichier pour vérifier que celui-ci soit bien présent sur le bucket S3.

j'ai essayé en utilisant .join() a la fin de mon thread mais cela fait planter mon code ...

Merci d'avance pour vos retours

Code : 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
 
 
def rename (filename,new_file_name,label,progress_lock,progress_bar,label_progress_lock,label_percent):
 
    if retour_fonction['chemin'] != 'chemin' and retour_fonction['Jour'] != 'Jour' and retour_fonction['Hote'] != 'Hote' and retour_fonction['Visiteur'] != 'Visiteur' and retour_fonction['Plan'] != 'Plan' and retour_fonction['Hote'] != retour_fonction['Visiteur']:
 
        chemin = os.path.dirname(filename)
        os.chdir(chemin)
        os.rename(f'{filename}', f'{new_file_name}') 
 
        def progress_callback(bytes_amount):
            with progress_lock:
                progress_bar["value"] += bytes_amount
            label_progress_callback()
 
        def label_progress_callback():
            with label_progress_lock:
                global send_finished
                progress_bar_value = round(progress_bar["value"]/(1024*1000),2)
                file_size = round(progress_bar["maximum"]/(1024*1000), 2)
                percentage = (progress_bar_value / file_size) * 100
                label_percent.configure(text = f"{progress_bar_value} Mo / {file_size} Mo  ({percentage:.2f}%)")
 
 
        s3 = boto3.client(
        service_name='s3',
        aws_access_key_id=f'{key_id_bucket}',
        aws_secret_access_key=f'{key_secret_bucket}',
        )
 
        new_filename = os.path.basename(new_file_name)
        file_size = os.path.getsize(new_file_name)
 
        progress_bar["value"] = 0
        progress_bar["maximum"] = file_size
 
        thread1 = threading.Thread(target=lambda: s3.upload_file(
            new_file_name, 'testbein', f'video/{new_filename}',
            Callback=progress_callback))
 
        thread1.start()
        thread1.join()
 
        def check (bucket,file_key,label):
            s3_client = boto3.client('s3',
                                      aws_access_key_id=f'{key_id_bucket}',
                                      aws_secret_access_key=f'{key_secret_bucket}')
 
            result = s3_client.list_objects_v2(Bucket= bucket, Prefix= file_key)
            if 'Contents' in result:
                label.configure(text='Fichier présent sur le serveur')
            else:
                label.configure(text="Erreur lors de l'envois sur le serveur : Fichier introuvable")
 
 
 
        check('testbein',f"video/{new_file_name}",label)
 
 
 
        jour = retour_fonction['Jour']
        nom_court_hote = retour_fonction['Hote']
        nom_court_visiteur = retour_fonction['Visiteur']
        plan = retour_fonction['Plan']
        new_file_name = f'lfp_{compet}_{saison}_{jour}_{nom_court_hote}_{nom_court_visiteur}_si_{plan}.mp4'
 
 
 
    else : 
 
        def open_up():
            global popup
            if popup is None or not popup.win_2.winfo_exists():
                popup = new_window()
            else:
                popup.win_2.lift(root)
 
        class new_window:
 
            def __init__(self):
                self.win_2 = Toplevel()
                self.win_2.geometry("700x100")
                self.win_2.title('Popup')
                self.win_2.resizable(False, False)
                self.win_2.label_msg = Label(self.win_2 , text='Merci de choisir des valeurs dans chaque catégories et de choisir un fichier à envoyer', font=('Verdana',10))
                self.win_2.label_msg.pack()
 
                self.win_2.bout2 = Button(self.win_2, text='OK',width=10, command=self.win_2.destroy )
                self.win_2.bout2.pack(pady=20)
 
        open_up()