Files changed (1) hide show
  1. app.py +29 -73
app.py CHANGED
@@ -2,94 +2,50 @@ import gradio as gr
2
  import os
3
  from datetime import datetime
4
  from huggingface_hub import HfApi, CommitOperationAdd
5
- from docx import Document
6
- from reportlab.pdfgen import canvas
7
- import pandas as pd
8
 
9
- # --- [1] بروتوكول العناوين المثبت ---
10
  REPO_ID = "Asem75/AiOCR_asistant"
11
  TOKEN_NAME = "AIOCR_KEY"
12
  HF_TOKEN = os.environ.get(TOKEN_NAME)
13
- RAW_PATH = "raw_under_score_files"
14
- COMM_VAULT = "communication_vault"
15
  api = HfApi()
16
 
17
- # --- [2] المحركات الموفرة للرصيد (Optimized) ---
18
-
19
- def upload_and_log_optimized(key_name, file_obj, manual_text):
20
- """يرسل الملف والتقرير في 'صندوق واحد' لتوفير الرصيد"""
21
- if not key_name: return "⚠️ المفتاح مطلوب!"
22
  ts = datetime.now().strftime("%Y%m%d_%H%M%S")
23
- safe_key = "".join(x for x in key_name if x.isalnum() or x in ['_', '-'])
 
 
 
24
 
25
  try:
26
- operations = []
27
- # تجهيز الملف الخام
28
- content = manual_text.encode("utf-8") if manual_text else b"Empty Content"
29
- operations.append(CommitOperationAdd(
30
- path_in_repo=f"{RAW_PATH}/{safe_key}_{ts}.txt",
31
- path_or_fileobj=content
32
- ))
33
- # تجهيز اللوج (في نفس العملية)
34
- log_data = f"Action: Upload\nUser: {key_name}\nTime: {ts}".encode("utf-8")
35
- operations.append(CommitOperationAdd(
36
- path_in_repo=f"{COMM_VAULT}/LOG_{safe_key}_{ts}.txt",
37
- path_or_fileobj=log_data
38
- ))
39
-
40
- # تنفيذ الرفع الرسمي (يستهلك 1 فقط من الرصيد)
41
  api.create_commit(
42
  repo_id=REPO_ID,
43
  operations=operations,
44
- commit_message=f"Smart upload by {key_name}",
45
  repo_type="dataset",
46
  token=HF_TOKEN
47
  )
48
- return "🚀 تم الرفع بنجاح! تم استخدام عملية واحدة فقط (توفير للرصيد)."
49
  except Exception as e:
50
- return f"❌ خطأ: {str(e)}"
51
-
52
- def get_file_list(key_name):
53
- """رادار يدوي: لا يفحص إلا عند الطلب"""
54
- if not key_name: return gr.update(choices=[]), "⚠️ أدخل المفتاح أولاً"
55
- try:
56
- files = api.list_repo_files(repo_id=REPO_ID, repo_type="dataset", token=HF_TOKEN)
57
- # فلترة الملفات الخاصة بالمستخدم فقط
58
- user_files = [f for f in files if key_name in f]
59
- return gr.update(choices=user_files), "🔄 تم تحديث القائمة بنجاح."
60
- except:
61
- return gr.update(choices=[]), "❌ فشل الاتصال بالخزنة."
62
-
63
- # --- [3] الواجهة (UI) الموفرة للطاقة ---
64
-
65
- with gr.Blocks(theme=gr.themes.Soft()) as demo:
66
- gr.Markdown("# 🛡️ AiOCR Assistant V1 Pro (Smart Mode)")
67
-
68
- with gr.Tabs():
69
- # التبويب 1: الرفع
70
- with gr.TabItem("📥 بوابة الرفع", id=0):
71
- with gr.Row():
72
- key_in = gr.Textbox(label="🔑 المفتاح الخاص")
73
- file_in = gr.File(label="📄 المستند")
74
- manual_in = gr.Textbox(label="✍️ نص يدوي", lines=4)
75
- up_btn = gr.Button("🚀 إرسال للخزنة", variant="primary")
76
- up_stat = gr.Textbox(label="📡 الحالة")
77
- up_btn.click(upload_and_log_optimized, inputs=[key_in, file_in, manual_in], outputs=up_stat)
78
-
79
- # التبويب 2: الرادار اليدوي
80
- with gr.TabItem("📂 ملفاتي", id=1):
81
- with gr.Row():
82
- file_list = gr.Dropdown(label="🔍 رادار الملفات (اضغط تحديث للرؤية)")
83
- ref_btn = gr.Button("🔄 تحديث يدوي", scale=0)
84
- editor = gr.Textbox(label="📝 المحرر", lines=12)
85
- ref_btn.click(get_file_list, inputs=key_in, outputs=[file_list, up_stat])
86
-
87
- # التبويب 3: التحويل
88
- with gr.TabItem("📚 مكتبة التحويل", id=2):
89
- fmt_choice = gr.Radio(["PDF", "DOCX", "XLSX", "TXT"], label="الصيغة", value="PDF")
90
- go_btn = gr.Button("📩 تحميل للجهاز", variant="primary")
91
- out_f = gr.File(label="الملف الجاهز")
92
- # محرك تحويل بسيط للعرض
93
- go_btn.click(lambda x: None, inputs=editor, outputs=out_f)
94
 
95
  demo.launch()
 
2
  import os
3
  from datetime import datetime
4
  from huggingface_hub import HfApi, CommitOperationAdd
 
 
 
5
 
6
+ # --- الإعدادات (تأكد من مطابقة الاسم الجديد) ---
7
  REPO_ID = "Asem75/AiOCR_asistant"
8
  TOKEN_NAME = "AIOCR_KEY"
9
  HF_TOKEN = os.environ.get(TOKEN_NAME)
 
 
10
  api = HfApi()
11
 
12
+ def fresh_start_upload(key_name, manual_text):
13
+ if not key_name: return "⚠️ أدخل المفتاح"
14
+
15
+ clean_key = "".join(filter(str.isalnum, key_name))
 
16
  ts = datetime.now().strftime("%Y%m%d_%H%M%S")
17
+
18
+ # بناء المسار النظيف للمستودع الجديد
19
+ raw_path = f"raw_under_score_files/{clean_key}_{ts}.txt"
20
+ log_path = f"communication_vault/LOG_{clean_key}_{ts}.txt"
21
 
22
  try:
23
+ content = manual_text.encode("utf-8") if manual_text else b"New Start Content"
24
+
25
+ operations = [
26
+ CommitOperationAdd(path_in_repo=raw_path, path_or_fileobj=content),
27
+ CommitOperationAdd(path_in_repo=log_path, path_or_fileobj=f"Init: {ts}".encode("utf-8"))
28
+ ]
29
+
 
 
 
 
 
 
 
 
30
  api.create_commit(
31
  repo_id=REPO_ID,
32
  operations=operations,
33
+ commit_message="Fresh start - New structure",
34
  repo_type="dataset",
35
  token=HF_TOKEN
36
  )
37
+ return f" مبروك! الخزنة الجديدة استقبلت أول ملف في المجلد الصحيح."
38
  except Exception as e:
39
+ return f"❌ خطأ في الخزنة الجديدة: {str(e)}"
40
+
41
+ # واجهة بسيطة للتأكد من نجاح "البداية الجديدة"
42
+ with gr.Blocks() as demo:
43
+ gr.Markdown("# 🔄 نظام إعادة التأسيس | AiOCR")
44
+ with gr.Row():
45
+ k = gr.Textbox(label="المفتاح")
46
+ t = gr.Textbox(label="نص التجربة الأولى")
47
+ btn = gr.Button("🚀 تدشين الخزنة الجديدة", variant="primary")
48
+ out = gr.Textbox(label="الحالة")
49
+ btn.click(fresh_start_upload, inputs=[k, t], outputs=out)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
50
 
51
  demo.launch()