From a2fe635dd813eeaae80768ddc2a1534d59b2a8d0 Mon Sep 17 00:00:00 2001 From: Armin Ronacher Date: Sun, 9 May 2010 14:08:02 +0200 Subject: [PATCH] Added extension registry --- flask_website/__init__.py | 2 + flask_website/static/extensions.png | Bin 0 -> 24229 bytes flask_website/static/style.css | 7 +++ .../templates/extensions/creating.html | 38 +++++++++++++ flask_website/templates/extensions/index.html | 36 ++++++++++++ .../templates/extensions/layout.html | 10 ++++ flask_website/templates/layout.html | 3 +- flask_website/views/extensions.py | 53 ++++++++++++++++++ 8 files changed, 148 insertions(+), 1 deletion(-) create mode 100644 flask_website/static/extensions.png create mode 100644 flask_website/templates/extensions/creating.html create mode 100644 flask_website/templates/extensions/index.html create mode 100644 flask_website/templates/extensions/layout.html create mode 100644 flask_website/views/extensions.py diff --git a/flask_website/__init__.py b/flask_website/__init__.py index 882877c6..8ba8a261 100644 --- a/flask_website/__init__.py +++ b/flask_website/__init__.py @@ -23,8 +23,10 @@ def remove_db_session(response): from flask_website.views.general import general from flask_website.views.mailinglist import mailinglist from flask_website.views.snippets import snippets +from flask_website.views.extensions import extensions app.register_module(general) app.register_module(mailinglist) app.register_module(snippets) +app.register_module(extensions) from flask_website.database import User, db_session diff --git a/flask_website/static/extensions.png b/flask_website/static/extensions.png new file mode 100644 index 0000000000000000000000000000000000000000..7302aed133d36734444e8051308553533da1ab4c GIT binary patch literal 24229 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 literal 0 HcmV?d00001 diff --git a/flask_website/static/style.css b/flask_website/static/style.css index e2997630..22929486 100644 --- a/flask_website/static/style.css +++ b/flask_website/static/style.css @@ -16,6 +16,7 @@ pre { padding: 7px 30px; margin: 15px -30px; line-height: 1.3; } p { line-height: 1.4; } ul { margin: 15px 0 15px 0; padding: 0; list-style: none; line-height: 1.4; } ul li:before { content: "\00BB \0020"; color: #888; position: absolute; margin-left: -19px; } +ol { line-height: 1.4; margin: 15px 0 15px 30px; padding: 0; } blockquote { margin: 0; font-style: italic; color: #444; } .footer { font-size: 13px; color: #888; text-align: right; margin-top: 25px; } .nav { text-align: center; } @@ -70,6 +71,12 @@ input.openid { background: url(openid.png) no-repeat 4px center; .mail .quote { color: #004B6B; } .mail .sig { color: #888; } +/* extensions */ +.extension div.description p { margin: 10px 0; } +.extension dl { margin: 0; font-size: 0.9em; } +.extension dl dt { width: 130px; float: left; height: 22px; } +.extension dl dd { height: 22px; } + /* pygments style, same as flaskystyle */ .hll { background-color: #ffffcc } .c { color: #8f5902; font-style: italic } /* Comment */ diff --git a/flask_website/templates/extensions/creating.html b/flask_website/templates/extensions/creating.html new file mode 100644 index 00000000..0ff73ced --- /dev/null +++ b/flask_website/templates/extensions/creating.html @@ -0,0 +1,38 @@ +{% extends "extensions/layout.html" %} +{% block title %}Creating Extensions{% endblock %} +{% block body %} +

Creating Extensions

+

+ Extensions to Flask are regular Python packages. But there are some + rules you should/must follow so that we can enlist your extension on + the Flask extension registry: +

    +
  1. + Your extension must be placed in a flaskext. + namespace package. This makes it easier for others to locate + your extension and does not clutter the PyPI index with generic + toplevel packages. +
  2. + Your extension should have the word “Flask” in the name. This + makes it easier to locate all the packages that go well with + Flask. This is also how the moderators of the extension registry + spot your extension. +
  3. + The extension should be documented with Sphinx and it's recommended + to use intersphinx to interlink the documentation with Flask itself + and other extensions it might depend on. It's also recommended to use + the Flask + Sphinx Themes or a modified version of one of them. +
  4. + Extensions should have proper dependencies in the setup.py + file specified so that installation with pip/easy_install works. +
  5. + Ideally your extension has at least one example in the repository + or tarball so that it's easier to understand how it works. +
+

+ We scan the PyPI index in regular intervals for new Flask packages + so your extension should sooner or later end up here. If this is + not quick enough for you, send me a mail. +{% endblock %} diff --git a/flask_website/templates/extensions/index.html b/flask_website/templates/extensions/index.html new file mode 100644 index 00000000..c8169d51 --- /dev/null +++ b/flask_website/templates/extensions/index.html @@ -0,0 +1,36 @@ +{% extends "extensions/layout.html" %} +{% block title %}Extensions Registry{% endblock %} +{% block body %} +

+ Welcome to the Flask extensions registry. Here you can find a list + of packages that extend Flask. This list is moderated and updated + on a regular basis. If you want your package to show up here, + follow the guide on creating + extensions. + {% for extension in extensions %} +

+

{{ extension.name }}

+
+ {{ extension.description }} +
+
+
Author: +
{{ extension.author }} +
PyPI Page: +
{{ extension.name }} + {% if extension.website %} +
Website: +
{{ extension.website|urlize }} + {% endif %} + {% if extension.docs %} +
Documentation: +
Read docs @ {{ extension.docserver }} + {% endif %} + {% if extension.github %} +
On Github: +
{{ extension.github }} + {% endif %} +
+
+ {% endfor %} +{% endblock %} diff --git a/flask_website/templates/extensions/layout.html b/flask_website/templates/extensions/layout.html new file mode 100644 index 00000000..bf9a95d1 --- /dev/null +++ b/flask_website/templates/extensions/layout.html @@ -0,0 +1,10 @@ +{% extends "layout.html" %} +{% block head %} + {{ super() }} + +{% endblock %} +{% block body_title %} +

Flask Extensions

+{% endblock %} diff --git a/flask_website/templates/layout.html b/flask_website/templates/layout.html index 9225d4ed..668470b9 100644 --- a/flask_website/templates/layout.html +++ b/flask_website/templates/layout.html @@ -14,7 +14,8 @@ overview // documentation // mailinglist // - snippets + snippets // + extensions {% for message in get_flashed_messages() %}

{{ message }} {% endfor %} diff --git a/flask_website/views/extensions.py b/flask_website/views/extensions.py new file mode 100644 index 00000000..aacfc887 --- /dev/null +++ b/flask_website/views/extensions.py @@ -0,0 +1,53 @@ +from urlparse import urlparse +from flask import Module, render_template, Markup +from werkzeug import url_quote + +extensions = Module(__name__, url_prefix='/extensions') + +class Extension(object): + + def __init__(self, name, author, description, + github=None, docs=None, website=None): + self.name = name + self.author = author + self.description = Markup(description) + self.github = github + self.docs = docs + self.website = website + + @property + def pypi(self): + return 'http://pypi.python.org/pypi/%s' % url_quote(self.name) + + @property + def docserver(self): + if self.docs: + return urlparse(self.docs)[1] + +database = [ + Extension('Flask-OAuth', 'Armin Ronacher', + description=''' +

Adds OAuth support to Flask. + ''', + github='mitsuhiko/flask-oauth', + docs='http://packages.python.org/Flask-OAuth' + ), + Extension('Flask-OpenID', 'Armin Ronacher', + description=''' +

Adds OpenID support to Flask. + ''', + github='mitsuhiko/flask-openid', + docs='http://packages.python.org/Flask-OpenID' + ) +] +database.sort(key=lambda x: x.name.lower()) + + +@extensions.route('/') +def index(): + return render_template('extensions/index.html', extensions=database) + + +@extensions.route('/creating/') +def creating(): + return render_template('extensions/creating.html')