import os
from base64 import b64decode, b64encode
from pathlib import Path
from panel.pane import GIF, ICO, JPG, PDF, PNG, SVG
from panel.pane.markup import escape
from io import BytesIO, StringIO
def test_svg_pane(document, comm):
rect = """
"""
pane = SVG(rect, encode=True)
# Create pane
model = pane.get_root(document, comm=comm)
assert pane._models[model.ref['id']][0] is model
assert model.text.startswith('<img src='data:image/svg+xml;base64')
assert b64encode(rect.encode('utf-8')).decode('utf-8') in model.text
# Replace Pane.object
circle = """
"""
pane.object = circle
assert pane._models[model.ref['id']][0] is model
assert model.text.startswith('<img src='data:image/svg+xml;base64')
assert b64encode(circle.encode('utf-8')).decode('utf-8') in model.text
pane.encode = False
assert model.text == escape(circle)
# Cleanup
pane._cleanup(model)
assert pane._models == {}
twopixel = dict(\
gif = b'R0lGODlhAgABAPAAAEQ6Q2NYYCH5BAAAAAAAIf8LSW1hZ2VNYWdpY2sNZ2FtbWE' + \
b'9MC40NTQ1NQAsAAAAAAIAAQAAAgIMCgA7',
png = b'iVBORw0KGgoAAAANSUhEUgAAAAIAAAABCAYAAAD0In+KAAAAFElEQVQIHQEJAPb' + \
b'/AWNYYP/h4uMAFL0EwlEn99gAAAAASUVORK5CYII=',
jpg = b'/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQE' + \
b'BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQ' + \
b'EBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA' + \
b'QEBAQEBAQEBAQEBAQEBAQH/wAARCAABAAIDAREAAhEBAxEB/8QAFAABAAAAAAAA' + \
b'AAAAAAAAAAAACf/EABoQAAEFAQAAAAAAAAAAAAAAAAYABAU2dbX/xAAVAQEBAAA' + \
b'AAAAAAAAAAAAAAAAFBv/EABkRAAEFAAAAAAAAAAAAAAAAAAEAAjFxsf/aAAwDAQ' + \
b'ACEQMRAD8AA0qs5HvTHQcJdsChioXSbOr/2Q==',
ico = b'AAABAAEAAgEAAAEAIAA0AAAAFgAAACgAAAACAAAAAgAAAAEAIAAAAAAACAAAAHQ' + \
b'SAAB0EgAAAAAAAAAAAAD//////////wAAAAA=')
def test_imgshape():
for t in [PNG, JPG, GIF, ICO]:
w,h = t._imgshape(b64decode(twopixel[t.name.lower()]))
assert w == 2
assert h == 1
def test_load_from_byteio():
"""Testing a loading a image from a ByteIo"""
memory = BytesIO()
path = os.path.dirname(__file__)
with open(os.path.join(path, '../test_data/logo.png'), 'rb') as image_file:
memory.write(image_file.read())
image_pane = PNG(memory)
image_data = image_pane._data()
assert b'PNG' in image_data
def test_load_from_stringio():
"""Testing a loading a image from a StringIO"""
memory = StringIO()
path = os.path.dirname(__file__)
with open(os.path.join(path, '../test_data/logo.png'), 'rb') as image_file:
memory.write(str(image_file.read()))
image_pane = PNG(memory)
image_data = image_pane._data()
assert 'PNG' in image_data
def test_loading_a_image_from_url():
"""Tests the loading of a image from a url"""
url = 'https://raw.githubusercontent.com/holoviz/panel/master/doc/_static/logo.png'
image_pane = PNG(url)
image_data = image_pane._data()
assert b'PNG' in image_data
def test_image_from_bytes():
path = os.path.dirname(__file__)
with open(os.path.join(path, '../test_data/logo.png'), 'rb') as f:
img = f.read()
image_pane = PNG(img)
image_data = image_pane._data()
assert b'PNG' in image_data
def test_loading_a_image_from_pathlib():
"""Tests the loading of a image from a pathlib"""
filepath = Path(__file__).parent.parent / "test_data" / "logo.png"
image_pane = PNG(filepath)
image_data = image_pane._data()
assert b'PNG' in image_data
def test_image_alt_text(document, comm):
"""Tests the loading of a image from a url"""
url = 'https://raw.githubusercontent.com/holoviz/panel/master/doc/_static/logo.png'
image_pane = PNG(url, embed=False, alt_text="Some alt text")
model = image_pane.get_root(document, comm)
assert 'alt="Some alt text"' in model.text
def test_image_link_url(document, comm):
"""Tests the loading of a image from a url"""
url = 'https://raw.githubusercontent.com/holoviz/panel/master/doc/_static/logo.png'
image_pane = PNG(url, embed=False, link_url="http://anaconda.org")
model = image_pane.get_root(document, comm)
assert model.text.startswith('<a href="http://anaconda.org"')
def test_pdf_embed(document, comm):
pdf_pane = PDF('https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf')
model = pdf_pane.get_root(document, comm)
assert model.text.startswith("<embed src="data:application/pdf;base64,")
def test_pdf_no_embed(document, comm):
url = 'https://www.w3.org/WAI/ER/tests/xhtml/testfiles/resources/pdf/dummy.pdf'
pdf_pane = PDF(url, embed=False)
model = pdf_pane.get_root(document, comm)
assert model.text.startswith(f"<embed src="{url}")