Beispiel #1
0
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
Beispiel #3
0
    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,
            )
Beispiel #5
0
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
Beispiel #7
0
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
Beispiel #8
0
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(
Beispiel #10
0
# 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": "******",
Beispiel #11
0
    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
)
Beispiel #12
0
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)
Beispiel #13
0
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")
Beispiel #15
0
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"),
)
Beispiel #16
0
# 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)
Beispiel #18
0
    # 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)
Beispiel #19
0
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
Beispiel #20
0
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):
Beispiel #21
0
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():
Beispiel #22
0
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
Beispiel #23
0
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():
Beispiel #24
0
)


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,
)
Beispiel #25
0
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
Beispiel #26
0
# 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")
Beispiel #28
0
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")

Beispiel #29
0
    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/",
Beispiel #30
0
    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()