summaryrefslogtreecommitdiff
path: root/app/lib
diff options
context:
space:
mode:
Diffstat (limited to 'app/lib')
-rw-r--r--app/lib/templatetags/templatetags/amp.py39
1 files changed, 39 insertions, 0 deletions
diff --git a/app/lib/templatetags/templatetags/amp.py b/app/lib/templatetags/templatetags/amp.py
new file mode 100644
index 0000000..9c6f118
--- /dev/null
+++ b/app/lib/templatetags/templatetags/amp.py
@@ -0,0 +1,39 @@
+from django import template
+from PIL import Image
+from io import BytesIO
+try:
+ import Image
+ import ImageFile
+except ImportError:
+ try:
+ from PIL import Image
+ from PIL import ImageFile
+ except ImportError:
+ raise ImportError("Could not import the Python Imaging Library.")
+
+import requests
+from bs4 import BeautifulSoup
+from builder.sanitizer import Sanitizer
+
+register = template.Library()
+
+
+def remove_img_tags(text):
+ soup = BeautifulSoup(text, 'xml')
+ for img in soup.find_all('img'):
+ r = requests.get(img['src'])
+ i = Image.open(BytesIO(r.content))
+ width, height = i.size
+ try:
+ new_tag = soup.new_tag("amp-img", alt=img["alt"], width=width, height=height, src=img['src'], srcset=img['srcset'])
+ except:
+ new_tag = soup.new_tag("amp-img", alt=img["alt"], width=width, height=height, src=img['src'])
+ img.replace_with(new_tag)
+ return soup.prettify()
+
+
+def do_amp(text):
+ bs = remove_img_tags(text)
+ return Sanitizer().strip(bs)
+
+register.filter('amp', do_amp)