ÿØÿàJFIFÿþ ÿÛC       ÿÛC ÿÀÿÄÿÄ"#QrÿÄÿÄ&1!A"2qQaáÿÚ ?Øy,æ/3JæÝ¹È߲؋5êXw²±ÉyˆR”¾I0ó2—PI¾IÌÚiMö¯–þrìN&"KgX:Šíµ•nTJnLK„…@!‰-ý ùúmë;ºgµŒ&ó±hw’¯Õ@”Ü— 9ñ-ë.²1<yà‚¹ïQÐU„ہ?.’¦èûbß±©Ö«Âw*VŒ) `$‰bØÔŸ’ëXÖ-ËTÜíGÚ3ð«g Ÿ§¯—Jx„–’U/ÂÅv_s(Hÿ@TñJÑãõçn­‚!ÈgfbÓc­:él[ðQe 9ÀPLbÃãCµm[5¿ç'ªjglå‡Ûí_§Úõl-;"PkÞÞÁQâ¼_Ñ^¢SŸx?"¸¦ùY騐ÒOÈ q’`~~ÚtËU¹CڒêV  I1Áß_ÿÙ""" useful context functions, see http://jinja.pocoo.org/docs/dev/api/#jinja2.contextfunction """ import sys from typing import Any, Dict, Optional, Union import jinja2 from aiohttp import web from yarl import URL if sys.version_info >= (3, 8): from typing import TypedDict class _Context(TypedDict, total=False): app: web.Application else: _Context = Dict[str, Any] @jinja2.pass_context def url_for( context: _Context, __route_name: str, query_: Optional[Dict[str, str]] = None, **parts: Union[str, int] ) -> URL: """Filter for generating urls. Usage: {{ url('the-view-name') }} might become "/path/to/view" or {{ url('item-details', id=123, query_={'active': 'true'}) }} might become "/items/1?active=true". """ app = context["app"] parts_clean: Dict[str, str] = {} for key in parts: val = parts[key] if isinstance(val, str): # if type is inherited from str expilict cast to str makes sense # if type is exactly str the operation is very fast val = str(val) elif type(val) is int: # int inherited classes like bool are forbidden val = str(val) else: raise TypeError( "argument value should be str or int, " "got {} -> [{}] {!r}".format(key, type(val), val) ) parts_clean[key] = val url = app.router[__route_name].url_for(**parts_clean) if query_: url = url.with_query(query_) return url @jinja2.pass_context def static_url(context: _Context, static_file_path: str) -> str: """Filter for generating urls for static files. NOTE: you'll need to set app['static_root_url'] to be used as the root for the urls returned. Usage: {{ static('styles.css') }} might become "/static/styles.css" or "http://mycdn.example.com/styles.css" """ app = context["app"] try: static_url = app["static_root_url"] except KeyError: raise RuntimeError( "app does not define a static root url " "'static_root_url', you need to set the url root " "with app['static_root_url'] = ''." ) from None return "{}/{}".format(static_url.rstrip("/"), static_file_path.lstrip("/")) GLOBAL_HELPERS = dict( url=url_for, static=static_url, )