Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def favicon(ext):
""" render a favicon """
logo = publ.image.get_image('images/rawr.jpg', 'tests/content')
img, _ = logo.get_rendition(format=ext, width=128, height=128, resize='fill')
return flask.redirect(img)
def _render_image(self, spec, show, container_args, alt_text=None):
""" Render an image specification into an <img> tag """
try:
path, image_args, title = image.parse_image_spec(spec)
except Exception as err: # pylint: disable=broad-except
LOGGER.exception("Got error on spec %s: %s", spec, err)
return flask.Markup('<span class="error">Couldn\'t parse image spec: ' +
'<code>{}</code> {}</span>'.format(flask.escape(spec),
flask.escape(str(err))))
composite_args = {**container_args, **image_args}
try:
img = image.get_image(path, self._search_path)
return img.get_img_tag(title,
alt_text,
**composite_args,
_show_thumbnail=show,
_mark_rewritten=True)
except Exception as err: # pylint: disable=broad-except
LOGGER.exception("Got error on image %s: %s", path, err)
return flask.Markup('<span class="error">Error loading image {}: {}</span>'.format(
flask.escape(spec), flask.escape(str(err))))
path = val
elif key == 'data-publ-rewritten':
is_rewritten = True
if is_rewritten:
# This img tag was already rewritten by a previous processor, so just
# remove that attribute and return the tag's original attributes
LOGGER.debug("Detected already-rewritten image; %s", attrs)
return [(key, val) for key, val in attrs if key != 'data-publ-rewritten']
if not path:
# this img doesn't have a src attribute, so there's something unconventional going on
return attrs
img_path, img_args, _ = image.parse_image_spec(path)
img = image.get_image(img_path, self._search_path)
for key, val in img_args.items():
if val and key not in config:
config[key] = val
try:
img_attrs = img.get_img_attrs(**config)
except FileNotFoundError as error:
img_attrs = {
'data-publ-error': f'File Not Found: {error.filename}'
}
except Exception as error: # pylint:disable=broad-except
LOGGER.exception("Got exception: %s", error)
img_attrs = {
'data-publ-error': f'Error: {error}'
}
return path
# Resolve static assets
if path.startswith('@'):
return utils.static_url(path[1:], absolute)
path, sep, anchor = path.partition('#')
# Resolve entries
found = find_entry(path, search_path)
if found:
return entry.Entry.load(found).permalink(absolute=absolute) + sep + anchor
# Resolve images and assets
img_path, img_args, _ = image.parse_image_spec(path)
img = image.get_image(img_path, search_path)
if not isinstance(img, image.ImageNotFound):
path, _ = img.get_rendition(**{**img_args, 'absolute': absolute})
# We don't know what this is, so just treat it like a normal URL.
if absolute:
path = urljoin(request.url, path)
return path + sep + anchor
return lambda filename: image.get_image(filename, path)
if not shape:
return None
# Only pull in size-related attributes (e.g. no format, background,
# etc.)
size_args = {k: v for k, v in kwargs.items() if k in (
'width', 'height', 'max_width', 'max_height', 'absolute', 'crop'
)}
if shape is True:
# if the shape is True, just return the base rendition
url, _ = self.get_rendition(1, **size_args)
else:
# otherwise, the usual rules apply
from . import get_image # pylint: disable=cyclic-import
other_image = get_image(shape, self.search_path)
url, _ = other_image.get_rendition(1, **size_args)
return url