Docfile commited on
Commit
cd62ab6
·
verified ·
1 Parent(s): 2c7857f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +47 -3
app.py CHANGED
@@ -58,25 +58,69 @@ class Texte(db.Model):
58
 
59
  # --- Fonctions utilitaires ---
60
 
 
 
 
 
 
 
 
 
 
 
 
61
  def sanitize_html(html_content):
62
- """Assainit le contenu HTML (comme dans ton admin.py)."""
63
  allowed_tags = [
64
  'a', 'abbr', 'acronym', 'b', 'blockquote', 'br', 'code', 'div', 'em',
65
  'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p',
66
  'pre', 'span', 'strong', 'table', 'tbody', 'td', 'th', 'thead', 'tr', 'ul'
67
  ]
 
68
  allowed_attributes = {
69
  '*': ['class', 'id', 'style'],
70
  'a': ['href', 'rel', 'target', 'title'],
71
  'img': ['alt', 'src', 'width', 'height'],
72
  'table': ['border', 'cellpadding', 'cellspacing']
73
  }
74
- cleaned_html = clean(html_content, tags=allowed_tags, attributes=allowed_attributes, strip=True)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
75
  soup = BeautifulSoup(cleaned_html, 'html.parser')
76
  for tag in soup.find_all():
77
- if not tag.contents and tag.name not in ['br', 'hr', 'img']:
 
78
  tag.decompose()
79
  return str(soup)
 
 
80
  def generate_content_from_youtube(youtube_url, prompt, model_name):
81
  """Génère du contenu à partir d'une vidéo YouTube en utilisant l'API Gemini."""
82
  try:
 
58
 
59
  # --- Fonctions utilitaires ---
60
 
61
+ # Nécessite d'installer cssutils: pip install cssutils
62
+ try:
63
+ from bleach.css_sanitizer import CSSSanitizer
64
+ except ImportError:
65
+ print("Attention : cssutils n'est pas installé. L'assainissement CSS ne sera pas appliqué.")
66
+ print("Installez-le avec : pip install cssutils")
67
+ CSSSanitizer = None # Pour éviter une erreur si l'import échoue
68
+
69
+ from bleach import clean
70
+ from bs4 import BeautifulSoup
71
+
72
  def sanitize_html(html_content):
73
+ """Assainit le contenu HTML en autorisant certains styles CSS via CSSSanitizer."""
74
  allowed_tags = [
75
  'a', 'abbr', 'acronym', 'b', 'blockquote', 'br', 'code', 'div', 'em',
76
  'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'li', 'ol', 'p',
77
  'pre', 'span', 'strong', 'table', 'tbody', 'td', 'th', 'thead', 'tr', 'ul'
78
  ]
79
+ # On garde 'style' ici
80
  allowed_attributes = {
81
  '*': ['class', 'id', 'style'],
82
  'a': ['href', 'rel', 'target', 'title'],
83
  'img': ['alt', 'src', 'width', 'height'],
84
  'table': ['border', 'cellpadding', 'cellspacing']
85
  }
86
+
87
+ # Configurez ici les propriétés CSS que vous souhaitez autoriser.
88
+ # SOYEZ RESTRICTIF ! N'autorisez que ce qui est absolument nécessaire.
89
+ # Exemples : 'color', 'background-color', 'font-weight', 'text-align', etc.
90
+ # Évitez les propriétés comme 'position', 'display', 'float', 'behavior', etc.
91
+ allowed_css_properties = [
92
+ 'color', 'background-color', 'font-weight', 'font-style',
93
+ 'text-align', 'text-decoration',
94
+ 'padding', 'padding-left', 'padding-right', 'padding-top', 'padding-bottom',
95
+ 'margin', 'margin-left', 'margin-right', 'margin-top', 'margin-bottom',
96
+ 'border', 'border-color', 'border-style', 'border-width', # Soyez prudent avec les bordures
97
+ 'list-style-type'
98
+ # Ajoutez d'autres propriétés sûres si nécessaire
99
+ ]
100
+
101
+ # Créez l'instance de CSSSanitizer SEULEMENT si cssutils est disponible
102
+ css_sanitizer = None
103
+ if CSSSanitizer:
104
+ css_sanitizer = CSSSanitizer(allowed_css_properties=allowed_css_properties)
105
+
106
+ # Passez l'assainisseur CSS à clean
107
+ cleaned_html = clean(
108
+ html_content,
109
+ tags=allowed_tags,
110
+ attributes=allowed_attributes,
111
+ css_sanitizer=css_sanitizer, # Utilise l'assainisseur CSS configuré
112
+ strip=True
113
+ )
114
+
115
+ # Optionnel : Nettoyer les balises potentiellement vides
116
  soup = BeautifulSoup(cleaned_html, 'html.parser')
117
  for tag in soup.find_all():
118
+ is_empty_tag = not tag.contents and not tag.get_text(strip=True)
119
+ if is_empty_tag and tag.name not in ['br', 'hr', 'img']:
120
  tag.decompose()
121
  return str(soup)
122
+
123
+
124
  def generate_content_from_youtube(youtube_url, prompt, model_name):
125
  """Génère du contenu à partir d'une vidéo YouTube en utilisant l'API Gemini."""
126
  try: