def create_app(testing=False): app = FlaskBase( __name__, "snapcraft.io", favicon_url="https://assets.ubuntu.com/v1/fdc99abe-ico_16px.png", template_404="404.html", template_folder="../templates", static_folder="../static", ) app.config.from_object("webapp.config") app.testing = testing if not testing: init_extensions(app) talisker.requests.configure(webapp.api.sso.api_session) talisker.requests.configure(webapp.helpers.api_session) talisker.requests.configure(webapp.helpers.api_publisher_session) app.config.from_object("webapp.configs." + app.config["WEBAPP"]) set_handlers(app) if app.config["WEBAPP"] == "snapcraft": init_snapcraft(app) else: init_brandstore(app) return app
def create_app(self, debug=False): if debug: os.environ["FLASK_DEBUG"] = "true" else: os.environ.pop("FLASK_DEBUG", None) app = FlaskBase(__name__, "canonicalwebteam.flask-base") return app
def test_adds_redirects(self): def _deleted_callback(context): return "Deleted", 410 p_deleted = prepare_deleted(path="./tests/deleted.yaml", view_callback=_deleted_callback) p_redirects = prepare_redirects(path="./tests/redirects.yaml") app = FlaskBase(__name__, "canonicalwebteam.flask-base", p_deleted, p_redirects) with app.test_client() as client: response = client.get("redirect") self.assertEqual(302, response.status_code) self.assertEqual(response.headers.get("Location"), "https://httpbin.org/") response = client.get("deleted") self.assertEqual(410, response.status_code) self.assertEqual(response.data, b"Deleted")
def test_favicon_redirect(self): """ If `favicon_url` is provided, check requests to `/favicon.ico` receive a redirect """ external_url = "https://example.com/icos/favcon" local_url = "/static/some-image.ico" external_app = FlaskBase(__name__, "canonicalwebteam.flask-base", favicon_url=external_url) local_app = FlaskBase(__name__, "canonicalwebteam.flask-base", favicon_url=local_url) with external_app.test_client() as client: response = client.get("/favicon.ico") self.assertEqual(302, response.status_code) self.assertEqual(response.headers.get("Location"), external_url) with local_app.test_client() as client: response = client.get("/favicon.ico") self.assertEqual(302, response.status_code) self.assertEqual( response.headers.get("Location"), "http://localhost" + local_url, )
def create_app(testing=False): app = FlaskBase( __name__, "jaas.ai", template_folder="../templates", static_folder="../static", ) app.testing = testing app.after_request(add_headers) app.before_request(prepare_redirects()) app.before_request(prepare_deleted()) BlogExtension(app, "JAAS Case Studies", [3513], "lang:en", "/case-studies") talisker.requests.configure(cs.session) init_handler(app) init_blueprint(app) @app.template_filter("pluralize") def pluralize_filter(count): if int(count) > 1: return "s" else: return "" @app.context_processor def inject_utilities(): return { "current_url_with_query": current_url_with_query, "external_urls": external_urls, "static_url": static_url, } @app.context_processor def inject_today_date(): return {"current_year": datetime.date.today().year} app.jinja_env.add_extension("jinja2.ext.do") @app.context_processor def utility_processor(): return {"image": image_template} return app
def create_test_app(): app = FlaskBase( __name__, "test_app", template_folder="../templates", template_404="404.html", template_500="500.html", ) @app.route("/error") def error_route(): flask.abort(500) return app
def create_app(testing=False): app = FlaskBase( __name__, "jaas.ai", template_folder="../templates", static_folder="../static", ) app.testing = testing app.after_request(add_headers) app.before_request(prepare_redirects()) app.before_request(prepare_deleted()) init_handler(app) init_blueprint(app) @app.template_filter("pluralize") def pluralize(count): if count != 1: return "s" return "" @app.context_processor def inject_utilities(): return { "current_url_with_query": current_url_with_query, "external_urls": external_urls, "static_url": static_url, } @app.context_processor def inject_today_date(): return {"current_year": datetime.date.today().year} app.jinja_env.add_extension("jinja2.ext.do") return app
def create_test_app(): app = FlaskBase( __name__, "test_app", template_folder="../templates", template_404="404.html", template_500="500.html", ) @app.route("/") @app.route("/page") def page(): return "page" @app.route("/auth") def auth(): flask.session["test"] = True return "auth", 200 @app.route("/hard-redirect") def hard_redirect(): flask.session["test"] = True return "Moved Permanently", 301 @app.route("/soft-redirect") def soft_redirect(): flask.session["test"] = True return "Found", 302 @app.route("/cache") def cache(): response = flask.make_response() response.cache_control.public = True response.cache_control.max_age = 1000 return response, 200 @app.route("/error") def error_route(): flask.abort(500) return app
import talisker # Packages from canonicalwebteam.flask_base.app import FlaskBase from flask import render_template from canonicalwebteam.discourse import ( DiscourseAPI, Docs, DocParser, ) # Rename your project below app = FlaskBase( __name__, "microstack.run", template_folder="../templates", static_folder="../static", ) session = talisker.requests.get_session() doc_parser = DocParser( api=DiscourseAPI(base_url="https://discourse.ubuntu.com/", session=session), index_topic_id=18212, url_prefix="/docs", ) if app.debug: doc_parser.api.session.adapters["https://"].timeout = 99 discourse_docs = Docs(
# Packages import requests import flask from canonicalwebteam.flask_base.app import FlaskBase from canonicalwebteam.templatefinder import TemplateFinder from canonicalwebteam.search import build_search_view # Constants with open("package.json") as package_json: VANILLA_VERSION = json.load(package_json)["version"] app = FlaskBase( __name__, "vanillaframework.io", template_folder="../templates", static_folder="../templates/static", template_404="404.html", template_500="500.html", ) TEAM_MEMBERS = [ { "login": "******", "role": "Engineering Director" }, { "login": "******", "role": "Web Developer" }, { "login": "******",
cve, delete_cve, bulk_upsert_cve, ) CAPTCHA_TESTING_API_KEY = os.getenv( "CAPTCHA_TESTING_API_KEY", "6LfYBloUAAAAAINm0KzbEv6TP0boLsTEzpdrB8if" ) # Set up application # === app = FlaskBase( __name__, "ubuntu.com", template_folder="../templates", static_folder="../static", ) # Settings app.config["CONTRACTS_API_URL"] = os.getenv( "CONTRACTS_API_URL", "https://contracts.canonical.com" ).rstrip("/") app.config["CANONICAL_LOGIN_URL"] = os.getenv( "CANONICAL_LOGIN_URL", "https://login.ubuntu.com" ).rstrip("/") session = talisker.requests.get_session() discourse_api = DiscourseAPI( base_url="https://discourse.ubuntu.com/", session=session )
import flask from canonicalwebteam.flask_base.app import FlaskBase from webapp.guides import discourse_docs from webapp.team import webteam from webapp.releases import releases app = FlaskBase( __name__, "webteam.canonical.com", template_folder="../templates", static_folder="../static", ) @app.route("/") def index(): return flask.render_template("homepage.html") app.register_blueprint(webteam, url_prefix="/team") app.register_blueprint(releases, url_prefix="/releases") discourse_docs.init_app(app)
from canonicalwebteam.discourse_docs import ( DiscourseDocs, DocParser, DiscourseAPI, ) from canonicalwebteam.flask_base.app import FlaskBase from canonicalwebteam.templatefinder import TemplateFinder from canonicalwebteam.search import build_search_view from canonicalwebteam import image_template from webapp.feeds import get_rss_feed app = FlaskBase( __name__, "maas.io", template_folder="../templates", static_folder="../static", ) template_finder_view = TemplateFinder.as_view("template_finder") app.add_url_rule("/", view_func=template_finder_view) app.add_url_rule("/<path:subpath>", view_func=template_finder_view) doc_parser = DocParser( api=DiscourseAPI(base_url="https://discourse.maas.io/"), index_topic_id=25, url_prefix="/docs", ) if app.debug: doc_parser.api.session.adapters["https://"].timeout = 99 discourse_docs = DiscourseDocs(
from canonicalwebteam.flask_base.app import FlaskBase from flask import render_template # Rename your project below app = FlaskBase( __name__, "pythonoperatorframework.io", template_folder="../templates", static_folder="../static", template_404="404.html", template_500="500.html", ) @app.route("/") def index(): return render_template("index.html")
import flask import talisker import yaml from canonicalwebteam import image_template from canonicalwebteam.blog import BlogAPI, BlogViews, build_blueprint from canonicalwebteam.discourse import DiscourseAPI, EngagePages, EngageParser from canonicalwebteam.flask_base.app import FlaskBase from canonicalwebteam.templatefinder import TemplateFinder from webapp.views import build_engage_index, engage_thank_you app = FlaskBase( __name__, "cn.ubuntu.com", template_folder="../templates", static_folder="../static", template_404="404.html", template_500="500.html", ) # Engage pages and takeovers from Discourse # This section needs to provide takeover data for / session = talisker.requests.get_session() discourse_api = DiscourseAPI( base_url="https://discourse.ubuntu.com/", session=session, api_key=os.getenv("DISCOURSE_API_KEY"), api_username=os.getenv("DISCOURSE_API_USERNAME"), )
# Packages from canonicalwebteam.flask_base.app import FlaskBase from canonicalwebteam.discourse import ( Docs, DiscourseAPI, DocParser, ) from canonicalwebteam.search import build_search_view from flask import render_template # Rename your project below app = FlaskBase( __name__, "dqlite.io", template_folder="../templates", static_folder="../static", template_404="404.html", template_500="500.html", ) session = talisker.requests.get_session() docs_url_prefix = "/docs" discourse_docs = Docs( parser=DocParser( api=DiscourseAPI( base_url="https://discourse.dqlite.io/", session=session, ), index_topic_id=34, url_prefix=docs_url_prefix, ),
# Standard library import os # Packages from canonicalwebteam.flask_base.app import FlaskBase from canonicalwebteam.templatefinder import TemplateFinder dir_path = os.path.dirname(os.path.abspath(__file__)) app_dir = os.path.dirname(dir_path) templates_dir = os.path.join(app_dir, "templates") app = FlaskBase( __name__, "certification.ubuntu.com", template_folder=templates_dir, static_folder="../static", template_404="404.html", template_500="500.html", ) template_finder_view = TemplateFinder.as_view("template_finder") app.add_url_rule("/", view_func=template_finder_view) app.add_url_rule("/<path:subpath>", view_func=template_finder_view)
# api_create_notice, notice, notices, notices_feed, api_create_notice, ) CAPTCHA_TESTING_API_KEY = os.getenv( "CAPTCHA_TESTING_API_KEY", "6LfYBloUAAAAAINm0KzbEv6TP0boLsTEzpdrB8if") # Set up application # === app = FlaskBase( __name__, "ubuntu.com", template_folder="../templates", static_folder="../static", ) app.wsgi_app = ProxyFix(app.wsgi_app, x_for=2, x_host=2, x_prefix=2, x_port=2, x_proto=2) talisker.requests.configure(api_session) # Error pages @app.errorhandler(404)
import os import flask from canonicalwebteam.flask_base.app import FlaskBase from canonicalwebteam.templatefinder import TemplateFinder dir_path = os.path.dirname(os.path.abspath(__file__)) app_dir = os.path.dirname(dir_path) templates_dir = os.path.join(app_dir, "templates") app = FlaskBase( __name__, "canonical.com", template_folder=templates_dir, static_folder="../static", ) template_finder_view = TemplateFinder.as_view("template_finder") app.add_url_rule("/", view_func=template_finder_view) app.add_url_rule("/<path:subpath>", view_func=template_finder_view) @app.errorhandler(404) def not_found_error(error): return flask.render_template("404.html"), 404 @app.errorhandler(500) def internal_error(error): return flask.render_template("500.html"), 500
import datetime import talisker.requests from canonicalwebteam.blog import build_blueprint, BlogViews, BlogAPI from canonicalwebteam.flask_base.app import FlaskBase app = FlaskBase( __name__, "kubeflow-news.com", template_folder="../templates", static_folder="../static", template_404="404.html", template_500="500.html", ) session = talisker.requests.get_session() # Blog blog_views = BlogViews( api=BlogAPI(session=session, api_url="https://ubuntu.com/blog/wp-json/wp/v2"), blog_title="kubeflow-news", tag_ids=[3408], excluded_tags=[3184, 3265], ) app.register_blueprint(build_blueprint(blog_views), url_prefix="/") @app.template_filter("pluralize") def pluralize_filter(total_posts):
import datetime from canonicalwebteam.flask_base.app import FlaskBase from canonicalwebteam.templatefinder import TemplateFinder from canonicalwebteam import image_template from webapp.docs.views import init_docs from webapp.template_utils import current_url_with_query, static_url from webapp.tutorials.views import init_tutorials # Rename your project below app = FlaskBase( __name__, "juju.is", template_folder="../templates", static_folder="../static", template_404="404.html", template_500="500.html", ) template_finder_view = TemplateFinder.as_view("template_finder") app.add_url_rule("/", view_func=template_finder_view) app.add_url_rule("/<path:subpath>", view_func=template_finder_view) init_docs(app, "/docs") init_tutorials(app, "/tutorials") @app.context_processor def utility_processor():
def create_app(testing=False): app = FlaskBase( __name__, "jaas.ai", template_folder="../templates", static_folder="../static", ) app.testing = testing app.after_request(add_headers) app.before_request(prepare_redirects()) app.before_request(prepare_deleted()) blog_views = BlogViews( api=BlogAPI( session=session, thumbnail_width=354, thumbnail_height=180, ), blog_title="JAAS Case Studies", tag_ids=[3513], feed_description="Case Studies from happy JAAS users", ) app.register_blueprint(build_blueprint(blog_views), url_prefix="/case-studies") talisker.requests.configure(cs.session) init_handler(app) init_blueprint(app) init_dashboard(app) @app.template_filter("pluralize") def pluralize_filter(count): if int(count) > 1: return "s" else: return "" @app.context_processor def inject_utilities(): return { "current_url_with_query": current_url_with_query, "external_urls": external_urls, "static_url": static_url, } @app.context_processor def inject_today_date(): return {"current_year": datetime.date.today().year} app.jinja_env.add_extension("jinja2.ext.do") @app.context_processor def utility_processor(): return {"image": image_template} return app
from canonicalwebteam.flask_base.app import FlaskBase from flask import render_template # Rename your project below app = FlaskBase( __name__, "charmed-osm.com", template_folder="../templates", static_folder="../static", template_404="404.html", template_500="500.html", ) @app.route("/") def index(): return render_template("index.html") @app.route("/osm-hackfests") def hackfests(): return render_template("osm-hackfests.html") @app.route("/thank-you") def thank_you(): return render_template("thank-you.html") @app.route("/contact-us") def contact_us():
) CAPTCHA_TESTING_API_KEY = os.getenv( "CAPTCHA_TESTING_API_KEY", "6LfYBloUAAAAAINm0KzbEv6TP0boLsTEzpdrB8if" ) DISCOURSE_API_KEY = os.getenv("DISCOURSE_API_KEY") DISCOURSE_API_USERNAME = os.getenv("DISCOURSE_API_USERNAME") # Set up application # === app = FlaskBase( __name__, "ubuntu.com", template_folder="../templates", template_404="404.html", template_500="500.html", static_folder="../static", ) sentry = app.extensions["sentry"] session = talisker.requests.get_session() discourse_api = DiscourseAPI( base_url="https://discourse.ubuntu.com/", session=session, api_key=DISCOURSE_API_KEY, api_username=DISCOURSE_API_USERNAME, get_topics_query_id=2, )
import talisker.requests # Packages from canonicalwebteam.flask_base.app import FlaskBase from canonicalwebteam.discourse_docs import ( DiscourseDocs, DiscourseAPI, DocParser, ) from flask import render_template # Rename your project below app = FlaskBase( __name__, "dqlite.io", template_folder="../templates", static_folder="../static", template_404="404.html", template_500="500.html", ) session = talisker.requests.get_session() doc_parser = DocParser( api=DiscourseAPI(base_url="https://discourse.dqlite.io/", session=session), index_topic_id=21, category_id=5, url_prefix="/docs", ) if app.debug: doc_parser.api.session.adapters["https://"].timeout = 99
# Packages import flask from canonicalwebteam.flask_base.app import FlaskBase from canonicalwebteam.templatefinder import TemplateFinder # Constants with open("package.json") as package_json: VANILLA_VERSION = json.load(package_json)["version"] app = FlaskBase( __name__, "docs.vanillaframework.io", template_folder="../docs", static_folder="../docs/static", template_404="404.html", template_500="500.html", ) # Helpers # === def _get_title(title): yield title def _get_examples(): example_files = glob.glob("docs/examples/*/**/*.html", recursive=True) examples = {}
from canonicalwebteam.flask_base.app import FlaskBase from flask import render_template # Rename your project below app = FlaskBase( __name__, "{{cookiecutter.project_slug}}", template_folder="../templates", static_folder="../static", template_404="404.html", template_500="500.html", ) @app.route("/") def index(): return render_template("index.html")
import math # Packages import flask import talisker.requests import requests from canonicalwebteam.flask_base.app import FlaskBase # Local from webapp.api import CertificationAPI from webapp.helpers import get_download_url, get_pagination_page_array app = FlaskBase( __name__, "certification.ubuntu.com", template_folder="../templates", static_folder="../static", template_404="404.html", template_500="500.html", ) session = requests.Session() talisker.requests.configure(session) api = CertificationAPI(base_url="https://certification.canonical.com/api/v1", session=session) @app.route("/") def index(): return flask.render_template("index.html")
DocParser, ) from canonicalwebteam.flask_base.app import FlaskBase from flask_openid import OpenID from pymacaroons import Macaroon from webapp.macaroons import MacaroonRequest, MacaroonResponse from posixpath import join as url_join LOGIN_URL = "https://login.ubuntu.com" ANBOXCLOUD_API_BASE = "https://demo-api.anbox-cloud.io" session = requests.Session() app = FlaskBase( __name__, "anbox-cloud.io", template_folder="../templates", static_folder="../static", template_404="404.html", template_500="500.html", ) app.secret_key = os.environ["SECRET_KEY"] open_id = OpenID(stateless=True, safe_roots=[], extension_responses=[MacaroonResponse]) # Discourse docs session = talisker.requests.get_session() discourse_docs = DiscourseDocs( parser=DocParser( api=DiscourseAPI(base_url="https://discourse.ubuntu.com/",
single_cves_sitemap, cves_sitemap, ) CAPTCHA_TESTING_API_KEY = os.getenv( "CAPTCHA_TESTING_API_KEY", "6LfYBloUAAAAAINm0KzbEv6TP0boLsTEzpdrB8if" ) # Set up application # === app = FlaskBase( __name__, "ubuntu.com", template_folder="../templates", template_404="404.html", template_500="500.html", static_folder="../static", ) # Settings app.config["CONTRACTS_LIVE_API_URL"] = os.getenv( "CONTRACTS_LIVE_API_URL", "https://contracts.canonical.com" ).rstrip("/") app.config["CONTRACTS_TEST_API_URL"] = os.getenv( "CONTRACTS_TEST_API_URL", "https://contracts.staging.canonical.com" ).rstrip("/") app.config["CANONICAL_LOGIN_URL"] = os.getenv( "CANONICAL_LOGIN_URL", "https://login.ubuntu.com" ) session = talisker.requests.get_session()