Docfile commited on
Commit
c70c5f8
·
verified ·
1 Parent(s): 0d104ce

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +66 -5
app.py CHANGED
@@ -32,12 +32,14 @@ class TaskManager:
32
  'total': 470,
33
  'results_file': f'results_{task_id}.txt',
34
  'start_time': datetime.now(),
35
- 'errors': []
 
36
  }
37
 
38
  def update_progress(self, task_id, progress):
39
  if task_id in self.tasks:
40
  self.tasks[task_id]['progress'] = progress
 
41
 
42
  def add_error(self, task_id, error):
43
  if task_id in self.tasks:
@@ -46,6 +48,7 @@ class TaskManager:
46
  def complete_task(self, task_id):
47
  if task_id in self.tasks:
48
  self.tasks[task_id]['status'] = 'completed'
 
49
 
50
  def get_task(self, task_id):
51
  return self.tasks.get(task_id)
@@ -85,7 +88,7 @@ def generate_synthetic_data(file_path, task_id):
85
  f.write(f"--- Requête {i+1}/470 ---\n")
86
  f.write(response.text)
87
  f.write("\n" + "="*60 + "\n\n")
88
- f.flush() # Forcer l'écriture
89
 
90
  # Mettre à jour le progrès
91
  task_manager.update_progress(task_id, i + 1)
@@ -100,6 +103,7 @@ def generate_synthetic_data(file_path, task_id):
100
  task_manager.add_error(task_id, error_msg)
101
  f.write(f"ERREUR - Requête {i+1}: {str(e)}\n")
102
  f.write("="*60 + "\n\n")
 
103
  print(error_msg)
104
 
105
  task_manager.complete_task(task_id)
@@ -112,7 +116,9 @@ def generate_synthetic_data(file_path, task_id):
112
 
113
  @app.route('/')
114
  def index():
115
- return render_template('index.html')
 
 
116
 
117
  @app.route('/upload', methods=['POST'])
118
  def upload_file():
@@ -160,7 +166,8 @@ def get_status(task_id):
160
  'total': task['total'],
161
  'percentage': round((task['progress'] / task['total']) * 100, 2),
162
  'errors_count': len(task['errors']),
163
- 'start_time': task['start_time'].strftime('%Y-%m-%d %H:%M:%S')
 
164
  })
165
 
166
  @app.route('/download/<task_id>')
@@ -174,10 +181,40 @@ def download_results(task_id):
174
  if not os.path.exists(results_file):
175
  return jsonify({'error': 'Fichier de résultats non trouvé'}), 404
176
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
177
  return send_file(
178
  results_file,
179
  as_attachment=True,
180
- download_name=f'donnees_synthetiques_{task_id}.txt'
181
  )
182
 
183
  @app.route('/tasks')
@@ -192,10 +229,34 @@ def list_tasks():
192
  'total': task_info['total'],
193
  'percentage': round((task_info['progress'] / task_info['total']) * 100, 2),
194
  'start_time': task_info['start_time'].strftime('%Y-%m-%d %H:%M:%S'),
 
195
  'errors_count': len(task_info['errors'])
196
  })
197
 
 
 
 
198
  return jsonify(task_list)
199
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
200
  if __name__ == '__main__':
 
 
 
201
  app.run(debug=True, threaded=True)
 
32
  'total': 470,
33
  'results_file': f'results_{task_id}.txt',
34
  'start_time': datetime.now(),
35
+ 'errors': [],
36
+ 'last_update': datetime.now()
37
  }
38
 
39
  def update_progress(self, task_id, progress):
40
  if task_id in self.tasks:
41
  self.tasks[task_id]['progress'] = progress
42
+ self.tasks[task_id]['last_update'] = datetime.now()
43
 
44
  def add_error(self, task_id, error):
45
  if task_id in self.tasks:
 
48
  def complete_task(self, task_id):
49
  if task_id in self.tasks:
50
  self.tasks[task_id]['status'] = 'completed'
51
+ self.tasks[task_id]['last_update'] = datetime.now()
52
 
53
  def get_task(self, task_id):
54
  return self.tasks.get(task_id)
 
88
  f.write(f"--- Requête {i+1}/470 ---\n")
89
  f.write(response.text)
90
  f.write("\n" + "="*60 + "\n\n")
91
+ f.flush() # Forcer l'écriture immédiate
92
 
93
  # Mettre à jour le progrès
94
  task_manager.update_progress(task_id, i + 1)
 
103
  task_manager.add_error(task_id, error_msg)
104
  f.write(f"ERREUR - Requête {i+1}: {str(e)}\n")
105
  f.write("="*60 + "\n\n")
106
+ f.flush() # Forcer l'écriture même en cas d'erreur
107
  print(error_msg)
108
 
109
  task_manager.complete_task(task_id)
 
116
 
117
  @app.route('/')
118
  def index():
119
+ # Servir directement le HTML depuis le même dossier
120
+ with open('index.html', 'r', encoding='utf-8') as f:
121
+ return f.read()
122
 
123
  @app.route('/upload', methods=['POST'])
124
  def upload_file():
 
166
  'total': task['total'],
167
  'percentage': round((task['progress'] / task['total']) * 100, 2),
168
  'errors_count': len(task['errors']),
169
+ 'start_time': task['start_time'].strftime('%Y-%m-%d %H:%M:%S'),
170
+ 'last_update': task['last_update'].strftime('%Y-%m-%d %H:%M:%S')
171
  })
172
 
173
  @app.route('/download/<task_id>')
 
181
  if not os.path.exists(results_file):
182
  return jsonify({'error': 'Fichier de résultats non trouvé'}), 404
183
 
184
+ # Vérifier si c'est un téléchargement partiel
185
+ is_partial = request.args.get('partial', 'false').lower() == 'true'
186
+
187
+ if is_partial and task['status'] == 'running':
188
+ # Créer un fichier temporaire avec les données actuelles
189
+ temp_file = os.path.join(RESULTS_FOLDER, f'temp_results_{task_id}.txt')
190
+
191
+ # Copier le contenu actuel vers le fichier temporaire
192
+ try:
193
+ with open(results_file, 'r', encoding='utf-8') as original:
194
+ content = original.read()
195
+
196
+ with open(temp_file, 'w', encoding='utf-8') as temp:
197
+ temp.write(content)
198
+ temp.write(f"\n\n--- TÉLÉCHARGEMENT PARTIEL ---\n")
199
+ temp.write(f"Téléchargé le: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n")
200
+ temp.write(f"Progrès: {task['progress']}/{task['total']} ({round((task['progress'] / task['total']) * 100, 2)}%)\n")
201
+ temp.write("Génération en cours... Ce fichier contient les données générées jusqu'à présent.\n")
202
+
203
+ return send_file(
204
+ temp_file,
205
+ as_attachment=True,
206
+ download_name=f'donnees_synthetiques_partiel_{task_id}.txt'
207
+ )
208
+ except Exception as e:
209
+ return jsonify({'error': f'Erreur lors de la création du fichier partiel: {str(e)}'}), 500
210
+
211
+ # Téléchargement normal (complet)
212
+ download_name = f'donnees_synthetiques_{"complet" if task["status"] == "completed" else "actuel"}_{task_id}.txt'
213
+
214
  return send_file(
215
  results_file,
216
  as_attachment=True,
217
+ download_name=download_name
218
  )
219
 
220
  @app.route('/tasks')
 
229
  'total': task_info['total'],
230
  'percentage': round((task_info['progress'] / task_info['total']) * 100, 2),
231
  'start_time': task_info['start_time'].strftime('%Y-%m-%d %H:%M:%S'),
232
+ 'last_update': task_info['last_update'].strftime('%Y-%m-%d %H:%M:%S'),
233
  'errors_count': len(task_info['errors'])
234
  })
235
 
236
+ # Trier par heure de début (plus récent en premier)
237
+ task_list.sort(key=lambda x: x['start_time'], reverse=True)
238
+
239
  return jsonify(task_list)
240
 
241
+ @app.route('/cleanup')
242
+ def cleanup_temp_files():
243
+ """Nettoyer les fichiers temporaires (optionnel)"""
244
+ try:
245
+ temp_files_deleted = 0
246
+ for filename in os.listdir(RESULTS_FOLDER):
247
+ if filename.startswith('temp_results_'):
248
+ file_path = os.path.join(RESULTS_FOLDER, filename)
249
+ os.remove(file_path)
250
+ temp_files_deleted += 1
251
+
252
+ return jsonify({
253
+ 'message': f'{temp_files_deleted} fichiers temporaires supprimés'
254
+ })
255
+ except Exception as e:
256
+ return jsonify({'error': f'Erreur lors du nettoyage: {str(e)}'}), 500
257
+
258
  if __name__ == '__main__':
259
+ print("🚀 Démarrage du serveur...")
260
+ print("📂 Dossiers créés:", UPLOAD_FOLDER, RESULTS_FOLDER)
261
+ print("🌐 Application disponible sur: http://localhost:5000")
262
  app.run(debug=True, threaded=True)