Browse Source

Check attribute in a not case sensitive way

Guénaël Muller 6 years ago
parent
commit
42fc285fe5
1 changed files with 19 additions and 3 deletions
  1. 19 3
      tracim/tracim/lib/email_processing/checkers.py

+ 19 - 3
tracim/tracim/lib/email_processing/checkers.py View File

@@ -37,10 +37,26 @@ class HtmlChecker(object):
37 37
             attribute_name: str,
38 38
             attribute_value: str,
39 39
     )-> bool:
40
+        """
41
+        Check if elem contains attribute named attribute_name with
42
+        attribute_value : example <a id="ident"> elem contain attribute
43
+        with id as attribute_name and ident as attribute_value.
44
+        Checking is not case_sensitive.
45
+
46
+        :param elem: Tag or String Html Element
47
+        :param attribute_name: Html attribute name
48
+        :param attribute_value: Html attribute value
49
+        :return: True only if Element contain this attribute.
50
+        """
40 51
         if isinstance(elem, Tag) and \
41
-                        attribute_name in elem.attrs and \
42
-                        attribute_value in elem.attrs[attribute_name]:
43
-            return True
52
+              attribute_name in elem.attrs:
53
+              # INFO - G.M - 2017-12-01 - attrs[value}] can be string or list
54
+              # use get_attribute_list to always check in a list
55
+              # see https://www.crummy.com/software/BeautifulSoup/bs4/doc/#multi-valued-attributes # nopep8
56
+            values_lower=[value.lower()
57
+                            for value
58
+                            in elem.get_attribute_list(attribute_name) ]
59
+            return attribute_value.lower() in values_lower
44 60
         return False
45 61
 
46 62