IO4IT 4.0.7__tar.gz → 4.0.8__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (108) hide show
  1. {io4it-4.0.7 → io4it-4.0.8}/PKG-INFO +2 -4
  2. {io4it-4.0.7 → io4it-4.0.8}/io4it.egg-info/PKG-INFO +2 -4
  3. io4it-4.0.8/orangecontrib/IO4IT/utils/pptx2jpg.py +102 -0
  4. {io4it-4.0.7 → io4it-4.0.8}/setup.py +1 -1
  5. io4it-4.0.7/orangecontrib/IO4IT/utils/pptx2jpg.py +0 -64
  6. {io4it-4.0.7 → io4it-4.0.8}/io4it.egg-info/SOURCES.txt +0 -0
  7. {io4it-4.0.7 → io4it-4.0.8}/io4it.egg-info/dependency_links.txt +0 -0
  8. {io4it-4.0.7 → io4it-4.0.8}/io4it.egg-info/entry_points.txt +0 -0
  9. {io4it-4.0.7 → io4it-4.0.8}/io4it.egg-info/namespace_packages.txt +0 -0
  10. {io4it-4.0.7 → io4it-4.0.8}/io4it.egg-info/requires.txt +0 -0
  11. {io4it-4.0.7 → io4it-4.0.8}/io4it.egg-info/top_level.txt +0 -0
  12. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/__init__.py +0 -0
  13. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/ocr_function/__init__.py +0 -0
  14. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/ocr_function/word_converter.py +0 -0
  15. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/toolViews/designer/key_manager_ui.ui +0 -0
  16. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/toolViews/designer/link_workflow_manager_ui.ui +0 -0
  17. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/toolViews/key_manager_ui.py +0 -0
  18. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/toolViews/linkHTLMWorkflow_manager_ui.py +0 -0
  19. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/utils/__init__.py +0 -0
  20. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/utils/environment_collector.py +0 -0
  21. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/utils/keys_manager.py +0 -0
  22. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/utils/mail.py +0 -0
  23. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/utils/pool_exec_utils.py +0 -0
  24. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/utils/secret_manager.py +0 -0
  25. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/utils/utils_md.py +0 -0
  26. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/OWChatGpt.py +0 -0
  27. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/OWDeep_Search.py +0 -0
  28. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/OWDoclingToMarkdown.py +0 -0
  29. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/OWExportMarkdown.py +0 -0
  30. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/OWExtractTablesDocxToXlsx.py +0 -0
  31. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/OWInboxMailMonitoring.py +0 -0
  32. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/OWJsonToDataTable.py +0 -0
  33. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/OWMD2HTML.py +0 -0
  34. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/OWMarkdownLoader.py +0 -0
  35. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/OWMarkdownizer.py +0 -0
  36. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/OWOfficeNormalizer.py +0 -0
  37. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/OWPPTX2JPG.py +0 -0
  38. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/OWParserHTML.py +0 -0
  39. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/OWPdfType.py +0 -0
  40. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/OWPipAuditor.py +0 -0
  41. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/OWProcessPoolExecutor.py +0 -0
  42. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/OWS3Uploader.py +0 -0
  43. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/OWS3downloader.py +0 -0
  44. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/OWS3list.py +0 -0
  45. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/OWWebSearch.py +0 -0
  46. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/OWXLSX_insert.py +0 -0
  47. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/OWmailLoader.py +0 -0
  48. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/OWmailSender.py +0 -0
  49. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/OWwordpdf2docx.py +0 -0
  50. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/__init__.py +0 -0
  51. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/designer/__init__.py +0 -0
  52. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/designer/nogui.ui +0 -0
  53. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/designer/ow_extract_tables_docx_to_xlsx.ui +0 -0
  54. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/designer/ow_file_ext_selector.ui +0 -0
  55. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/designer/ow_json_to_data_table.ui +0 -0
  56. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/designer/owchatgpt.ui +0 -0
  57. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/designer/owdeepsearch.ui +0 -0
  58. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/designer/owdoclingasr.ui +0 -0
  59. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/designer/owdoclingtomarkdown.ui +0 -0
  60. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/designer/owexportmarkdown.ui +0 -0
  61. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/designer/owinboxmailmonitoring.ui +0 -0
  62. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/designer/owinsertdatatoexcel.ui +0 -0
  63. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/designer/owmailloader.ui +0 -0
  64. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/designer/owmailsender.ui +0 -0
  65. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/designer/owmarkdownizer.ui +0 -0
  66. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/designer/owmarkdownloader.ui +0 -0
  67. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/designer/owmd2html.ui +0 -0
  68. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/designer/owofficenormalizer.ui +0 -0
  69. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/designer/owparserhtml.ui +0 -0
  70. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/designer/owpdftype.ui +0 -0
  71. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/designer/owpipauditor.ui +0 -0
  72. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/designer/owpptx2jpg.ui +0 -0
  73. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/designer/owprocesspoolexecutor.ui +0 -0
  74. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/designer/owspeechtotext.ui +0 -0
  75. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/designer/owvisualizationer.ui +0 -0
  76. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/designer/owwebsearch.ui +0 -0
  77. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/designer/wordpdf2docx.ui +0 -0
  78. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/icons/__init__.py +0 -0
  79. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/icons/chatgpt.png +0 -0
  80. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/icons/check_pdf.png +0 -0
  81. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/icons/deepsearch.svg +0 -0
  82. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/icons/dep_md_old.png +0 -0
  83. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/icons/download.png +0 -0
  84. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/icons/export_md.png +0 -0
  85. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/icons/extract_table.png +0 -0
  86. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/icons/file_extensor.png +0 -0
  87. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/icons/html.png +0 -0
  88. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/icons/json-file.png +0 -0
  89. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/icons/list_aws.png +0 -0
  90. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/icons/load_md.png +0 -0
  91. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/icons/mail_loader.png +0 -0
  92. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/icons/mail_writer.png +0 -0
  93. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/icons/md.png +0 -0
  94. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/icons/monitor-email.svg +0 -0
  95. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/icons/office_normalizer.png +0 -0
  96. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/icons/owmd2html.svg +0 -0
  97. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/icons/pip_auditor.png +0 -0
  98. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/icons/pptx2jpg.png +0 -0
  99. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/icons/process_pool_executor.png +0 -0
  100. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/icons/speech_to_text.png +0 -0
  101. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/icons/upload.png +0 -0
  102. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/icons/visualizationer.png +0 -0
  103. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/icons/websearch.png +0 -0
  104. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/icons/wordpdf2docx.png +0 -0
  105. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/icons/xlsx_insert.png +0 -0
  106. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/IO4IT/widgets/icons_dev/__init__.py +0 -0
  107. {io4it-4.0.7 → io4it-4.0.8}/orangecontrib/__init__.py +0 -0
  108. {io4it-4.0.7 → io4it-4.0.8}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.1
2
2
  Name: io4it
3
- Version: 4.0.7
3
+ Version: 4.0.8
4
4
  Home-page:
5
5
  Author:
6
6
  Author-email:
@@ -26,5 +26,3 @@ Requires-Dist: exchangelib
26
26
  Requires-Dist: html2text
27
27
  Requires-Dist: ddgs
28
28
  Requires-Dist: CATEGORIT
29
- Dynamic: keywords
30
- Dynamic: requires-dist
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.1
2
2
  Name: io4it
3
- Version: 4.0.7
3
+ Version: 4.0.8
4
4
  Home-page:
5
5
  Author:
6
6
  Author-email:
@@ -26,5 +26,3 @@ Requires-Dist: exchangelib
26
26
  Requires-Dist: html2text
27
27
  Requires-Dist: ddgs
28
28
  Requires-Dist: CATEGORIT
29
- Dynamic: keywords
30
- Dynamic: requires-dist
@@ -0,0 +1,102 @@
1
+ import sys
2
+ import time
3
+ import subprocess
4
+ import shutil
5
+ from pathlib import Path
6
+
7
+ def get_conversion_method():
8
+ """Determines the best available conversion method."""
9
+ # 1. Check for MS Office
10
+ if sys.platform.startswith("win"):
11
+ try:
12
+ import win32com.client
13
+ # Try to see if the COM object is registered
14
+ win32com.client.GetActiveObject("PowerPoint.Application")
15
+ return "office"
16
+ except:
17
+ try:
18
+ # If not running, try to see if it's dispatchable
19
+ win32com.client.Dispatch("PowerPoint.Application")
20
+ return "office"
21
+ except: pass
22
+ elif sys.platform == "darwin":
23
+ # Check if PowerPoint app exists on Mac
24
+ if Path("/Applications/Microsoft PowerPoint.app").exists():
25
+ return "office"
26
+
27
+ # 2. Check for LibreOffice (soffice)
28
+ if shutil.which("soffice"):
29
+ return "libreoffice"
30
+
31
+ # 3. Fallback to Aspose
32
+ return "aspose"
33
+
34
+ def convert_via_office(src: Path, pdf_path: Path):
35
+ if sys.platform.startswith("win"):
36
+ import win32com.client
37
+ powerpoint = win32com.client.Dispatch("PowerPoint.Application")
38
+ try:
39
+ presentation = powerpoint.Presentations.Open(str(src), WithWindow=False)
40
+ presentation.SaveAs(str(pdf_path), 32) # 32 = ppSaveAsPDF
41
+ presentation.Close()
42
+ finally:
43
+ # Note: We don't quit() powerpoint here to avoid killing other open docs
44
+ pass
45
+ elif sys.platform == "darwin":
46
+ script = f'tell application "Microsoft PowerPoint" to save (open POSIX file "{src}") in POSIX file "{pdf_path}" as PDF'
47
+ subprocess.run(["osascript", "-e", script], check=True)
48
+
49
+ def convert_via_libreoffice(src: Path, out_dir: Path):
50
+ subprocess.run([
51
+ "soffice", "--headless", "--convert-to", "pdf",
52
+ "--outdir", str(out_dir), str(src)
53
+ ], check=True, capture_output=True)
54
+ return src.with_suffix(".pdf")
55
+
56
+ def process_one_pptx(file_path_str: str, unique_folder: bool = True):
57
+ try:
58
+ import fitz # PyMuPDF
59
+ except ImportError:
60
+ return [file_path_str, "", "nok", "0.0", "Erreur: PyMuPDF non installé"]
61
+
62
+ t0 = time.time()
63
+ src = Path(file_path_str).resolve()
64
+ out_dir = src.parent / (f"images_{src.stem}" if unique_folder else "images")
65
+ out_dir.mkdir(parents=True, exist_ok=True)
66
+
67
+ method = get_conversion_method()
68
+ img_list = []
69
+
70
+ try:
71
+ # --- PHASE 1: GENERATE IMAGES ---
72
+ if method == "aspose":
73
+ # import aspose.slides as slides
74
+ # with slides.Presentation(str(src)) as pres:
75
+ # for i, slide in enumerate(pres.slides, start=1):
76
+ # img_path = out_dir / f"{src.stem}_slide_{i:03d}.jpg"
77
+ # slide.get_thumbnail(1.5, 1.5).save(str(img_path), slides.export.ImageFormat.JPEG)
78
+ # img_list.append(str(img_path))
79
+ print("converting slides without having libre office or office isn't possible for the moment")
80
+ else:
81
+ # Office or LibreOffice both generate a PDF first
82
+ pdf_path = out_dir / f"{src.stem}.pdf"
83
+ if method == "office":
84
+ convert_via_office(src, pdf_path)
85
+ else: # libreoffice
86
+ convert_via_libreoffice(src, out_dir)
87
+
88
+ # Convert PDF pages to JPG using PyMuPDF
89
+ doc = fitz.open(str(pdf_path))
90
+ for i, page in enumerate(doc, start=1):
91
+ pix = page.get_pixmap(dpi=150)
92
+ img_path = out_dir / f"{src.stem}_slide_{i:03d}.jpg"
93
+ pix.save(str(img_path))
94
+ img_list.append(str(img_path))
95
+ doc.close()
96
+ if pdf_path.exists(): pdf_path.unlink()
97
+
98
+ duration = time.time() - t0
99
+ return [str(src), "|".join(img_list), "ok", f"{duration:.2f}", f"{len(img_list)} slides ({method})"]
100
+
101
+ except Exception as e:
102
+ return [str(src), "", "nok", f"{time.time()-t0:.2f}", f"Method {method} failed: {str(e)}"]
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
2
2
 
3
3
  # Configuration
4
4
  NAME = "io4it"
5
- VERSION = "4.0.7"
5
+ VERSION = "4.0.8"
6
6
 
7
7
  INSTALL_REQUIRES = [
8
8
  "torchvision",
@@ -1,64 +0,0 @@
1
- import sys
2
- import time
3
- import subprocess
4
- from pathlib import Path
5
-
6
- def pptx_to_pdf(pptx_path: Path) -> Path:
7
- pdf_path = pptx_path.with_suffix(".pdf")
8
- if sys.platform.startswith("win"):
9
- import win32com.client
10
- powerpoint = win32com.client.Dispatch("PowerPoint.Application")
11
- try:
12
- presentation = powerpoint.Presentations.Open(str(pptx_path), WithWindow=False)
13
- presentation.SaveAs(str(pdf_path), 32)
14
- presentation.Close()
15
- except Exception as e:
16
- raise RuntimeError(f"Erreur PowerPoint : {e}")
17
- elif sys.platform == "darwin":
18
- script = f'tell application "Microsoft PowerPoint" to save (open POSIX file "{pptx_path}") in POSIX file "{pdf_path}" as PDF'
19
- subprocess.run(["osascript", "-e", script], check=True)
20
- else:
21
- raise RuntimeError("Système d'exploitation non supporté.")
22
- return pdf_path
23
-
24
- def process_one_pptx(file_path_str: str, unique_folder: bool = True):
25
- try:
26
- import fitz
27
- except ImportError:
28
- return [file_path_str, "", "nok", "0.0", "Erreur: PyMuPDF (fitz) non installé"]
29
-
30
- t0 = time.time()
31
- src = Path(file_path_str).resolve()
32
-
33
- # ✅ unique_folder=True → un dossier par pptx : images_monFichier/
34
- # ✅ unique_folder=False → tout dans un dossier commun : images/ (à côté des pptx)
35
- if unique_folder:
36
- out_dir = src.parent / f"images_{src.stem}"
37
- else:
38
- out_dir = src.parent / "images"
39
-
40
- try:
41
- out_dir.mkdir(parents=True, exist_ok=True)
42
-
43
- pdf_path = pptx_to_pdf(src)
44
-
45
- doc = fitz.open(str(pdf_path))
46
- img_list = []
47
- for i, page in enumerate(doc, start=1):
48
- pix = page.get_pixmap(dpi=150)
49
- # ✅ Préfixe avec le nom du pptx pour éviter les collisions en mode commun
50
- img_path = out_dir / f"{src.stem}_slide_{i:03d}.jpg"
51
- pix.save(str(img_path))
52
- img_list.append(str(img_path))
53
- doc.close()
54
-
55
- if pdf_path.exists():
56
- pdf_path.unlink()
57
-
58
- duration = time.time() - t0
59
- return [str(src), "|".join(img_list), "ok", f"{duration:.2f}", f"{len(img_list)} slides"]
60
-
61
- except Exception as e:
62
- duration = time.time() - t0
63
- import traceback
64
- return [str(src), "", "nok", f"{duration:.2f}", f"{str(e)}\n{traceback.format_exc()}"]
File without changes
File without changes
File without changes
File without changes