import json import logging import os from pathlib import Path from urllib.parse import quote_plus import cachecontrol import flask import jinja2 import requests import tableschema from cachetools.func import ttl_cache import opendataschema from . import config log = logging.getLogger(__name__) @ttl_cache(maxsize=24, ttl=5*60) def schema_from_url(url): return tableschema.Schema(url) # And load schema catalogs which urls are found in config.json schema_catalog_map = {} if config.HOMEPAGE_CONFIG: log.info("Initializing homepage sections...") caching_session = cachecontrol.CacheControl(requests.Session()) for section in config.HOMEPAGE_CONFIG['sections']: if isinstance(section['catalog'], str) and section['catalog'].startswith('http'): code = section['code'] url = section['catalog'] schema_catalog_map[code] = opendataschema.SchemaCatalog(url, session=caching_session) # Flask things app = flask.Flask(__name__) app.secret_key = config.SECRET_KEY # Jinja2 url_quote_plus custom filter # https://stackoverflow.com/questions/12288454/how-to-import-custom-jinja2-filters-from-another-file-and-using-flask blueprint = flask.Blueprint('filters', __name__) @jinja2.contextfilter @blueprint.app_template_filter() def urlencode(context, value): return quote_plus(value) # Keep this import after app initialisation (to avoid cyclic imports) from . import views # noqa isort:skip