Added extension registry

This commit is contained in:
Armin Ronacher 2010-05-09 14:08:02 +02:00
parent aeb3d32132
commit a2fe635dd8
8 changed files with 148 additions and 1 deletions

View file

@ -23,8 +23,10 @@ def remove_db_session(response):
from flask_website.views.general import general from flask_website.views.general import general
from flask_website.views.mailinglist import mailinglist from flask_website.views.mailinglist import mailinglist
from flask_website.views.snippets import snippets from flask_website.views.snippets import snippets
from flask_website.views.extensions import extensions
app.register_module(general) app.register_module(general)
app.register_module(mailinglist) app.register_module(mailinglist)
app.register_module(snippets) app.register_module(snippets)
app.register_module(extensions)
from flask_website.database import User, db_session from flask_website.database import User, db_session

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

View file

@ -16,6 +16,7 @@ pre { padding: 7px 30px; margin: 15px -30px; line-height: 1.3; }
p { line-height: 1.4; } p { line-height: 1.4; }
ul { margin: 15px 0 15px 0; padding: 0; list-style: none; 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; } 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; } blockquote { margin: 0; font-style: italic; color: #444; }
.footer { font-size: 13px; color: #888; text-align: right; margin-top: 25px; } .footer { font-size: 13px; color: #888; text-align: right; margin-top: 25px; }
.nav { text-align: center; } .nav { text-align: center; }
@ -70,6 +71,12 @@ input.openid { background: url(openid.png) no-repeat 4px center;
.mail .quote { color: #004B6B; } .mail .quote { color: #004B6B; }
.mail .sig { color: #888; } .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 */ /* pygments style, same as flaskystyle */
.hll { background-color: #ffffcc } .hll { background-color: #ffffcc }
.c { color: #8f5902; font-style: italic } /* Comment */ .c { color: #8f5902; font-style: italic } /* Comment */

View file

@ -0,0 +1,38 @@
{% extends "extensions/layout.html" %}
{% block title %}Creating Extensions{% endblock %}
{% block body %}
<h2>Creating Extensions</h2>
<p>
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:
<ol>
<li>
Your extension must be placed in a <code>flaskext.</code>
namespace package. This makes it easier for others to locate
your extension and does not clutter the PyPI index with generic
toplevel packages.
<li>
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.
<li>
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 <a href="http://github.com/mitsuhiko/flask-sphinx-themes">Flask
Sphinx Themes</a> or a modified version of one of them.
<li>
Extensions should have proper dependencies in the <em>setup.py</em>
file specified so that installation with pip/easy_install works.
<li>
Ideally your extension has at least one example in the repository
or tarball so that it's easier to understand how it works.
</ol>
<p>
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 <a
href="mailto:armin.ronacher@active-4.com">me a mail</a>.
{% endblock %}

View file

@ -0,0 +1,36 @@
{% extends "extensions/layout.html" %}
{% block title %}Extensions Registry{% endblock %}
{% block body %}
<p>
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 <a href="{{ url_for('creating') }}">guide on creating
extensions</a>.
{% for extension in extensions %}
<div class=extension>
<h2>{{ extension.name }}</h2>
<div class=description>
{{ extension.description }}
</div>
<dl>
<dt>Author:
<dd>{{ extension.author }}
<dt>PyPI Page:
<dd><a href="{{ extension.pypi }}">{{ extension.name }}</a>
{% if extension.website %}
<dt>Website:
<dd>{{ extension.website|urlize }}
{% endif %}
{% if extension.docs %}
<dt>Documentation:
<dd><a href="{{ extension.docs }}">Read docs @ {{ extension.docserver }}</a>
{% endif %}
{% if extension.github %}
<dt>On Github:
<dd><a href="http://github.com/{{ extension.github }}">{{ extension.github }}</a>
{% endif %}
</dl>
</div>
{% endfor %}
{% endblock %}

View file

@ -0,0 +1,10 @@
{% extends "layout.html" %}
{% block head %}
{{ super() }}
<style type=text/css>
h1 { background-image: url(/static/extensions.png); }
</style>
{% endblock %}
{% block body_title %}
<h1><span>Flask Extensions</span></h1>
{% endblock %}

View file

@ -14,7 +14,8 @@
<a href=/>overview</a> // <a href=/>overview</a> //
<a href=/docs/>documentation</a> // <a href=/docs/>documentation</a> //
<a href=/mailinglist/>mailinglist</a> // <a href=/mailinglist/>mailinglist</a> //
<a href=/snippets/>snippets</a> <a href=/snippets/>snippets</a> //
<a href=/extensions/>extensions</a>
{% for message in get_flashed_messages() %} {% for message in get_flashed_messages() %}
<p class=message>{{ message }} <p class=message>{{ message }}
{% endfor %} {% endfor %}

View file

@ -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='''
<p>Adds <a href="http://oauth.net/">OAuth</a> support to Flask.
''',
github='mitsuhiko/flask-oauth',
docs='http://packages.python.org/Flask-OAuth'
),
Extension('Flask-OpenID', 'Armin Ronacher',
description='''
<p>Adds <a href="http://openid.net/">OpenID</a> 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')