├── MANIFEST.in
├── docs
├── _static
│ ├── logo.png
│ └── index.html
├── _themes
│ ├── flask
│ │ ├── theme.conf
│ │ ├── relations.html
│ │ ├── layout.html
│ │ └── static
│ │ │ └── flasky.css_t
│ ├── flask_small
│ │ ├── theme.conf
│ │ ├── layout.html
│ │ └── static
│ │ │ └── flasky.css_t
│ ├── README
│ ├── LICENSE
│ └── flask_theme_support.py
├── index.rst
├── Makefile
├── make.bat
└── conf.py
├── examples
├── requirements.txt
├── runner.py
└── manager.py
├── .gitignore
├── setup.py
├── LICENSE
├── README.md
└── flask_runner.py
/MANIFEST.in:
--------------------------------------------------------------------------------
1 | include README.md LICENSE
2 |
--------------------------------------------------------------------------------
/docs/_static/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/miguelgrinberg/Flask-Runner/HEAD/docs/_static/logo.png
--------------------------------------------------------------------------------
/examples/requirements.txt:
--------------------------------------------------------------------------------
1 | Flask==0.10.1
2 | Flask-Runner==2.1.1
3 | Flask-Script==0.6.6
4 | Jinja2==2.7.2
5 | MarkupSafe==0.18
6 | Werkzeug==0.9.4
7 | itsdangerous==0.23
8 |
--------------------------------------------------------------------------------
/docs/_themes/flask/theme.conf:
--------------------------------------------------------------------------------
1 | [theme]
2 | inherit = basic
3 | stylesheet = flasky.css
4 | pygments_style = flask_theme_support.FlaskyStyle
5 |
6 | [options]
7 | index_logo = ''
8 | index_logo_height = 120px
9 | touch_icon =
10 |
--------------------------------------------------------------------------------
/docs/_themes/flask_small/theme.conf:
--------------------------------------------------------------------------------
1 | [theme]
2 | inherit = basic
3 | stylesheet = flasky.css
4 | nosidebar = true
5 | pygments_style = flask_theme_support.FlaskyStyle
6 |
7 | [options]
8 | index_logo = ''
9 | index_logo_height = 120px
10 | github_fork = ''
11 |
--------------------------------------------------------------------------------
/examples/runner.py:
--------------------------------------------------------------------------------
1 | from flask import Flask
2 | from flask.ext.runner import Runner
3 |
4 | app = Flask(__name__)
5 | runner = Runner(app)
6 |
7 | @app.route('/')
8 | def index():
9 | return "Hello, world!"
10 |
11 | if __name__ == '__main__':
12 | runner.run()
13 |
14 |
--------------------------------------------------------------------------------
/examples/manager.py:
--------------------------------------------------------------------------------
1 | from flask import Flask
2 | from flask.ext.runner import Manager
3 |
4 | app = Flask(__name__)
5 | manager = Manager(app)
6 |
7 | @app.route('/')
8 | def index():
9 | return "Hello, world!"
10 |
11 | if __name__ == '__main__':
12 | manager.run()
13 |
14 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.py[cod]
2 |
3 | # C extensions
4 | *.so
5 |
6 | # Packages
7 | *.egg
8 | *.egg-info
9 | dist
10 | build
11 | eggs
12 | parts
13 | bin
14 | var
15 | sdist
16 | develop-eggs
17 | .installed.cfg
18 | lib
19 | lib64
20 |
21 | # Installer logs
22 | pip-log.txt
23 |
24 | # Unit test / coverage reports
25 | .coverage
26 | .tox
27 | nosetests.xml
28 |
29 | # Translations
30 | *.mo
31 |
32 | # Mr Developer
33 | .mr.developer.cfg
34 | .project
35 | .pydevproject
36 |
--------------------------------------------------------------------------------
/docs/_static/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Flask-Runner documentation
5 |
6 |
7 |
8 |
9 | The Flask-Runner documentation is available at Read the Docs .
10 | If your browser does not automatically redirect you, please click here .
11 |
12 |
--------------------------------------------------------------------------------
/docs/_themes/flask/relations.html:
--------------------------------------------------------------------------------
1 | Related Topics
2 |
20 |
--------------------------------------------------------------------------------
/docs/_themes/flask_small/layout.html:
--------------------------------------------------------------------------------
1 | {% extends "basic/layout.html" %}
2 | {% block header %}
3 | {{ super() }}
4 | {% if pagename == 'index' %}
5 |
6 | {% endif %}
7 | {% endblock %}
8 | {% block footer %}
9 | {% if pagename == 'index' %}
10 |
11 | {% endif %}
12 | {% endblock %}
13 | {# do not display relbars #}
14 | {% block relbar1 %}{% endblock %}
15 | {% block relbar2 %}
16 | {% if theme_github_fork %}
17 |
19 | {% endif %}
20 | {% endblock %}
21 | {% block sidebar1 %}{% endblock %}
22 | {% block sidebar2 %}{% endblock %}
23 |
--------------------------------------------------------------------------------
/docs/_themes/flask/layout.html:
--------------------------------------------------------------------------------
1 | {%- extends "basic/layout.html" %}
2 | {%- block extrahead %}
3 | {{ super() }}
4 | {% if theme_touch_icon %}
5 |
6 | {% endif %}
7 |
8 | {% endblock %}
9 | {%- block relbar2 %}{% endblock %}
10 | {% block header %}
11 | {{ super() }}
12 | {% if pagename == 'index' %}
13 |
14 | {% endif %}
15 | {% endblock %}
16 | {%- block footer %}
17 |
21 | {% if pagename == 'index' %}
22 |
23 | {% endif %}
24 | {%- endblock %}
25 |
--------------------------------------------------------------------------------
/docs/_themes/README:
--------------------------------------------------------------------------------
1 | Flask Sphinx Styles
2 | ===================
3 |
4 | This repository contains sphinx styles for Flask and Flask related
5 | projects. To use this style in your Sphinx documentation, follow
6 | this guide:
7 |
8 | 1. put this folder as _themes into your docs folder. Alternatively
9 | you can also use git submodules to check out the contents there.
10 | 2. add this to your conf.py:
11 |
12 | sys.path.append(os.path.abspath('_themes'))
13 | html_theme_path = ['_themes']
14 | html_theme = 'flask'
15 |
16 | The following themes exist:
17 |
18 | - 'flask' - the standard flask documentation theme for large
19 | projects
20 | - 'flask_small' - small one-page theme. Intended to be used by
21 | very small addon libraries for flask.
22 |
23 | The following options exist for the flask_small theme:
24 |
25 | [options]
26 | index_logo = '' filename of a picture in _static
27 | to be used as replacement for the
28 | h1 in the index.rst file.
29 | index_logo_height = 120px height of the index logo
30 | github_fork = '' repository name on github for the
31 | "fork me" badge
32 |
--------------------------------------------------------------------------------
/setup.py:
--------------------------------------------------------------------------------
1 | """
2 | Flask-Runner
3 | ------------
4 |
5 | A set of standard command line arguments for Flask applications
6 | """
7 | from setuptools import setup
8 |
9 |
10 | setup(
11 | name='Flask-Runner',
12 | version='2.1.1',
13 | url='http://github.com/miguelgrinberg/flask-runner/',
14 | license='BSD',
15 | author='Miguel Grinberg',
16 | author_email='miguelgrinberg50@gmail.com',
17 | description='A set of standard command line arguments for Flask applications built on top of Flask-Script',
18 | long_description=__doc__,
19 | py_modules=['flask_runner'],
20 | zip_safe=False,
21 | data_files=[('', ['README.md', 'LICENSE'])],
22 | include_package_data=True,
23 | platforms='any',
24 | install_requires=[
25 | 'Flask>=0.9,<0.11',
26 | 'Flask-Script>=0.6,<0.7',
27 | 'argparse',
28 | 'nose'
29 | ],
30 | classifiers=[
31 | 'Environment :: Web Environment',
32 | 'Intended Audience :: Developers',
33 | 'License :: OSI Approved :: BSD License',
34 | 'Operating System :: OS Independent',
35 | 'Programming Language :: Python',
36 | 'Topic :: Internet :: WWW/HTTP :: Dynamic Content',
37 | 'Topic :: Software Development :: Libraries :: Python Modules'
38 | ]
39 | )
40 |
41 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2013, Miguel Grinberg All rights reserved.
2 |
3 | Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
4 |
5 | Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
6 | Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
7 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
8 |
9 | The views and conclusions contained in the software and documentation are those of the authors and should not be interpreted as representing official policies, either expressed or implied, of the Flask-Runner Project.
10 |
11 |
--------------------------------------------------------------------------------
/docs/_themes/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2010 by Armin Ronacher.
2 |
3 | Some rights reserved.
4 |
5 | Redistribution and use in source and binary forms of the theme, with or
6 | without modification, are permitted provided that the following conditions
7 | are met:
8 |
9 | * Redistributions of source code must retain the above copyright
10 | notice, this list of conditions and the following disclaimer.
11 |
12 | * Redistributions in binary form must reproduce the above
13 | copyright notice, this list of conditions and the following
14 | disclaimer in the documentation and/or other materials provided
15 | with the distribution.
16 |
17 | * The names of the contributors may not be used to endorse or
18 | promote products derived from this software without specific
19 | prior written permission.
20 |
21 | We kindly ask you to only use these themes in an unmodified manner just
22 | for Flask and Flask-related products, not for unrelated projects. If you
23 | like the visual style and want to use it for your own projects, please
24 | consider making some larger changes to the themes (such as changing
25 | font faces, sizes, colors or margins).
26 |
27 | THIS THEME IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
28 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
29 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
30 | ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
31 | LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
32 | CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
33 | SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
34 | INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
35 | CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
36 | ARISING IN ANY WAY OUT OF THE USE OF THIS THEME, EVEN IF ADVISED OF THE
37 | POSSIBILITY OF SUCH DAMAGE.
38 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | Flask-Runner
2 | ============
3 |
4 | A set of standard command line arguments for Flask applications built on top of Flask-Script.
5 |
6 | Example code
7 | ------------
8 |
9 | In its simplest usage, an application can create and initialize a `Runner` object as follows:
10 |
11 | from flask import Flask
12 | from flask.ext.runner import Runner
13 | app = Flask(__name__)
14 | runner = Runner(app)
15 |
16 | @app.route('/')
17 | def hello_world():
18 | return 'Hello World!'
19 |
20 | if __name__ == '__main__':
21 | runner.run()
22 |
23 | This application now has command line options that expose many of the configuration options that can be sent as arguments to `app.run()`:
24 |
25 | $ python hello.py --help
26 | usage: hello.py [-h] [-t HOST] [-p PORT] [--threaded] [--processes PROCESSES]
27 | [--passthrough-errors] [-d] [-r] [--noeval] [--extra FILE]
28 | [--profile] [--profile-count COUNT]
29 | [--profile-percent PERCENT] [--profile-regex REGEX]
30 | [--profile-dir DIR] [--lint]
31 |
32 | Runs the Flask development server i.e. app.run()
33 |
34 | optional arguments:
35 | -h, --help show this help message and exit
36 | -t HOST, --host HOST
37 | -p PORT, --port PORT
38 | --threaded
39 | --processes PROCESSES
40 | --passthrough-errors
41 | -d, --no-debug
42 | -r, --no-reload
43 | --noeval disable exception evaluation in the debugger
44 | --reload-extra FILE additional file for the reloader to watch for changes
45 | --profile run the profiler for each request
46 | --profile-count COUNT
47 | restrict profiler output to the top COUNT lines
48 | --profile-percent PERCENT
49 | restrict profiler output to the top PERCENT lines
50 | --profile-regex REGEX
51 | filter profiler output with REGEX
52 | --profile-dir DIR write profiler results one file per request in folder
53 | DIR
54 | --lint run the lint validation middleware
55 |
56 | Resources
57 | ---------
58 |
59 | - [Documentation](http://pythonhosted.org/Flask-Runner)
60 | - [pypi](https://pypi.python.org/pypi/Flask-Runner)
61 |
62 |
--------------------------------------------------------------------------------
/docs/_themes/flask_theme_support.py:
--------------------------------------------------------------------------------
1 | # flasky extensions. flasky pygments style based on tango style
2 | from pygments.style import Style
3 | from pygments.token import Keyword, Name, Comment, String, Error, \
4 | Number, Operator, Generic, Whitespace, Punctuation, Other, Literal
5 |
6 |
7 | class FlaskyStyle(Style):
8 | background_color = "#f8f8f8"
9 | default_style = ""
10 |
11 | styles = {
12 | # No corresponding class for the following:
13 | #Text: "", # class: ''
14 | Whitespace: "underline #f8f8f8", # class: 'w'
15 | Error: "#a40000 border:#ef2929", # class: 'err'
16 | Other: "#000000", # class 'x'
17 |
18 | Comment: "italic #8f5902", # class: 'c'
19 | Comment.Preproc: "noitalic", # class: 'cp'
20 |
21 | Keyword: "bold #004461", # class: 'k'
22 | Keyword.Constant: "bold #004461", # class: 'kc'
23 | Keyword.Declaration: "bold #004461", # class: 'kd'
24 | Keyword.Namespace: "bold #004461", # class: 'kn'
25 | Keyword.Pseudo: "bold #004461", # class: 'kp'
26 | Keyword.Reserved: "bold #004461", # class: 'kr'
27 | Keyword.Type: "bold #004461", # class: 'kt'
28 |
29 | Operator: "#582800", # class: 'o'
30 | Operator.Word: "bold #004461", # class: 'ow' - like keywords
31 |
32 | Punctuation: "bold #000000", # class: 'p'
33 |
34 | # because special names such as Name.Class, Name.Function, etc.
35 | # are not recognized as such later in the parsing, we choose them
36 | # to look the same as ordinary variables.
37 | Name: "#000000", # class: 'n'
38 | Name.Attribute: "#c4a000", # class: 'na' - to be revised
39 | Name.Builtin: "#004461", # class: 'nb'
40 | Name.Builtin.Pseudo: "#3465a4", # class: 'bp'
41 | Name.Class: "#000000", # class: 'nc' - to be revised
42 | Name.Constant: "#000000", # class: 'no' - to be revised
43 | Name.Decorator: "#888", # class: 'nd' - to be revised
44 | Name.Entity: "#ce5c00", # class: 'ni'
45 | Name.Exception: "bold #cc0000", # class: 'ne'
46 | Name.Function: "#000000", # class: 'nf'
47 | Name.Property: "#000000", # class: 'py'
48 | Name.Label: "#f57900", # class: 'nl'
49 | Name.Namespace: "#000000", # class: 'nn' - to be revised
50 | Name.Other: "#000000", # class: 'nx'
51 | Name.Tag: "bold #004461", # class: 'nt' - like a keyword
52 | Name.Variable: "#000000", # class: 'nv' - to be revised
53 | Name.Variable.Class: "#000000", # class: 'vc' - to be revised
54 | Name.Variable.Global: "#000000", # class: 'vg' - to be revised
55 | Name.Variable.Instance: "#000000", # class: 'vi' - to be revised
56 |
57 | Number: "#990000", # class: 'm'
58 |
59 | Literal: "#000000", # class: 'l'
60 | Literal.Date: "#000000", # class: 'ld'
61 |
62 | String: "#4e9a06", # class: 's'
63 | String.Backtick: "#4e9a06", # class: 'sb'
64 | String.Char: "#4e9a06", # class: 'sc'
65 | String.Doc: "italic #8f5902", # class: 'sd' - like a comment
66 | String.Double: "#4e9a06", # class: 's2'
67 | String.Escape: "#4e9a06", # class: 'se'
68 | String.Heredoc: "#4e9a06", # class: 'sh'
69 | String.Interpol: "#4e9a06", # class: 'si'
70 | String.Other: "#4e9a06", # class: 'sx'
71 | String.Regex: "#4e9a06", # class: 'sr'
72 | String.Single: "#4e9a06", # class: 's1'
73 | String.Symbol: "#4e9a06", # class: 'ss'
74 |
75 | Generic: "#000000", # class: 'g'
76 | Generic.Deleted: "#a40000", # class: 'gd'
77 | Generic.Emph: "italic #000000", # class: 'ge'
78 | Generic.Error: "#ef2929", # class: 'gr'
79 | Generic.Heading: "bold #000080", # class: 'gh'
80 | Generic.Inserted: "#00A000", # class: 'gi'
81 | Generic.Output: "#888", # class: 'go'
82 | Generic.Prompt: "#745334", # class: 'gp'
83 | Generic.Strong: "bold #000000", # class: 'gs'
84 | Generic.Subheading: "bold #800080", # class: 'gu'
85 | Generic.Traceback: "bold #a40000", # class: 'gt'
86 | }
87 |
--------------------------------------------------------------------------------
/docs/index.rst:
--------------------------------------------------------------------------------
1 | .. Flask-Runner documentation master file, created by
2 | sphinx-quickstart on Fri Aug 30 23:28:10 2013.
3 | You can adapt this file completely to your liking, but it should at least
4 | contain the root `toctree` directive.
5 |
6 | Welcome to Flask-Runner's documentation!
7 | ========================================
8 |
9 | Flask-Runner provides a set of standard command line arguments for Flask applications built on top of Flask-Script.
10 |
11 | Example code
12 | ------------
13 |
14 | In its simplest usage, an application can create and initialize a `Runner` object as follows::
15 |
16 | from flask import Flask
17 | from flask.ext.runner import Runner
18 | app = Flask(__name__)
19 | runner = Runner(app)
20 |
21 | @app.route('/')
22 | def hello_world():
23 | return 'Hello World!'
24 |
25 | if __name__ == '__main__':
26 | runner.run()
27 |
28 | This application now has command line options that expose many of the configuration options that can be sent as arguments to `app.run()`::
29 |
30 | $ python hello.py --help
31 | usage: hello.py [-h] [-t HOST] [-p PORT] [--threaded] [--processes PROCESSES]
32 | [--passthrough-errors] [-d] [-r] [--noeval] [--extra FILE]
33 | [--profile] [--profile-count COUNT]
34 | [--profile-percent PERCENT] [--profile-regex REGEX]
35 | [--profile-dir DIR] [--lint]
36 |
37 | Runs the Flask development server i.e. app.run()
38 |
39 | optional arguments:
40 | -h, --help show this help message and exit
41 | -t HOST, --host HOST
42 | -p PORT, --port PORT
43 | --threaded
44 | --processes PROCESSES
45 | --passthrough-errors
46 | -d, --no-debug
47 | -r, --no-reload
48 | --noeval disable exception evaluation in the debugger
49 | --reload-extra FILE additional file for the reloader to watch for changes
50 | --profile run the profiler for each request
51 | --profile-count COUNT
52 | restrict profiler output to the top COUNT lines
53 | --profile-percent PERCENT
54 | restrict profiler output to the top PERCENT lines
55 | --profile-regex REGEX
56 | filter profiler output with REGEX
57 | --profile-dir DIR write profiler results one file per request in folder
58 | DIR
59 | --lint run the lint validation middleware
60 |
61 | Below are some example ways in which the application can be invoked.
62 |
63 | To start server with all defaults (listen on http://127.0.0.1:5000 with debugger and reloader)::
64 |
65 | $ python hello.py
66 |
67 | To listen on the public IP addresses::
68 |
69 | $ python hello.py --host 0.0.0.0
70 |
71 | To listen on port 8080::
72 |
73 | $ python hello.py --port 8080
74 |
75 | To disable the interactive debugger::
76 |
77 | $ python hello.py --no-debug
78 |
79 | To disable evaluation of expressions on the debugger::
80 |
81 | $ python hello.py --noeval
82 |
83 | To disable the interactive debugger and the reloader::
84 |
85 | $ python hello.py --no-debug --no-reload
86 |
87 | To enable the interactive reloader and make it watch config.txt and babel.cfg in addition to the application source files::
88 |
89 | $ python hello.py --reload-extra config.txt --reload-extra babel.cfg
90 |
91 | To run the Werkzeug profiler on each request showing the top 30 lines::
92 |
93 | $ python hello.py --profile --profile-count 30
94 |
95 | To run the Werkzeug lint middleware::
96 |
97 | $ python hello.py --lint
98 |
99 | Advanced Usage
100 | --------------
101 |
102 | Flask-Runner is built on top of `Flask-Script `_ and it exposes all the classes and functions of that extension with some minor additions. The following example creates a ``manage.py`` script::
103 |
104 | from flask import Flask
105 | from flask.ext.runner import Manager
106 | app = Flask(__name__)
107 | manager = Manager(app)
108 |
109 | @app.route('/')
110 | def hello_world():
111 | return 'Hello World!'
112 |
113 | if __name__ == '__main__':
114 | manager.run()
115 |
116 | Note that the ``Manager`` class is imported from ``flask.ext.runner`` instead of ``flask.ext.script``. This enhanced version of the `Manager` class provides three default commands::
117 |
118 | $ python manage.py
119 | Please provide a command:
120 | runserver Runs the Flask development server i.e. app.run()
121 | shell Runs a Python shell inside Flask application context.
122 | test Runs unit tests.
123 |
124 | The ``runserver`` command exposes the same options available when using the ``Runner`` wrapper described above. The ``shell`` option is the same as in Flask-Script. The ``test`` command will run unit tests using ``nose``.
125 |
126 | Refer to the `Flask-Script documentation `_ for information on adding custom commands.
127 |
--------------------------------------------------------------------------------
/flask_runner.py:
--------------------------------------------------------------------------------
1 | import sys
2 | import os
3 | import argparse
4 | from flask.ext.script import Manager as BaseManager, Server as BaseServer, Shell, Command, Option
5 |
6 | class Server(BaseServer):
7 | def get_options(self):
8 | options = super(Server, self).get_options()
9 | options += (
10 | Option('--noeval',
11 | dest = 'use_evalex',
12 | action = 'store_false',
13 | default = True,
14 | help = 'disable exception evaluation in the debugger'),
15 | Option('--extra',
16 | metavar = 'FILE',
17 | type = str,
18 | dest = 'extra_files',
19 | action = 'append',
20 | help = 'additional file for the reloader to watch for changes'),
21 | Option('--profile',
22 | action = 'store_true',
23 | default = False,
24 | help = 'run the profiler for each request'),
25 | Option('--profile-count',
26 | metavar = 'COUNT',
27 | type = int,
28 | dest = 'profile_restrictions',
29 | action = 'append',
30 | help = 'restrict profiler output to the top COUNT lines'),
31 | Option('--profile-percent',
32 | metavar = 'PERCENT',
33 | type = float,
34 | dest = 'profile_restrictions',
35 | action = 'append',
36 | help = 'restrict profiler output to the top PERCENT lines'),
37 | Option('--profile-regex',
38 | metavar = 'REGEX',
39 | type = str,
40 | dest = 'profile_restrictions',
41 | action = 'append',
42 | help = 'filter profiler output with REGEX'),
43 | Option('--profile-dir',
44 | metavar = 'DIR',
45 | default = None,
46 | help = 'write profiler results one file per request in folder DIR'),
47 | Option('--lint',
48 | action = 'store_true',
49 | default = False,
50 | help = 'run the lint validation middleware'),
51 | )
52 | return options
53 |
54 | def handle(self, app, *args, **kwargs):
55 | #host, port, use_debugger, use_reloader,
56 | #threaded, processes, passthrough_errors, use_evalex,
57 | #extra_files, profile, profile_restrictions, profile_dir, lint):
58 | # we don't need to run the server in request context
59 | # so just run it directly
60 |
61 | profile = kwargs['profile']
62 | profile_restrictions = kwargs['profile_restrictions'] or ()
63 | profile_dir = kwargs['profile_dir']
64 | lint = kwargs['lint']
65 |
66 | if profile:
67 | from werkzeug.contrib.profiler import ProfilerMiddleware
68 | app.wsgi_app = ProfilerMiddleware(app.wsgi_app,
69 | restrictions = profile_restrictions, profile_dir = profile_dir)
70 |
71 | if lint:
72 | from werkzeug.contrib.lint import LintMiddleware
73 | app.wsgi_app = LintMiddleware(app.wsgi_app)
74 |
75 | app.run(host = kwargs['host'],
76 | port = kwargs['port'],
77 | debug = kwargs['use_debugger'],
78 | use_debugger = kwargs['use_debugger'],
79 | use_reloader = kwargs['use_reloader'],
80 | threaded = kwargs['threaded'],
81 | processes = kwargs['processes'],
82 | passthrough_errors = kwargs['passthrough_errors'],
83 | use_evalex = kwargs['use_evalex'],
84 | extra_files = kwargs['extra_files'])
85 |
86 | class Test(Command):
87 | description = 'Runs unit tests.'
88 |
89 | def get_options(self):
90 | return (Option('-c', '--with-coverage',
91 | dest = 'coverage',
92 | action = 'store_true',
93 | help = 'Include coverage report'),)
94 |
95 | def run(self, coverage):
96 | options = ""
97 | if coverage:
98 | options += ' --with-coverage --cover-package=app'
99 | os.system('nosetests' + options)
100 |
101 | class Manager(BaseManager):
102 | def __init__(self, app=None, with_default_commands=None, usage=None):
103 | super(Manager, self).__init__(app, with_default_commands = False, usage = usage)
104 | if with_default_commands or (app and with_default_commands is None):
105 | self.add_default_commands()
106 |
107 | def make_shell_context(self):
108 | d = dict(app = self.app)
109 | try:
110 | from app import db
111 | d['db'] = db
112 | except:
113 | pass
114 | try:
115 | from app import models
116 | d['models'] = models
117 | except:
118 | pass
119 | return d
120 |
121 | def add_default_commands(self):
122 | self.add_command("runserver", Server())
123 | self.add_command("shell", Shell(make_context = self.make_shell_context))
124 | self.add_command("test", Test())
125 |
126 | class Runner(object):
127 | def __init__(self, app):
128 | self.app = app
129 |
130 | def handle(self, prog, args = None):
131 | server = Server()
132 | arg_parser = server.create_parser(prog)
133 |
134 | args = arg_parser.parse_args(args)
135 | server.handle(self.app, **args.__dict__)
136 |
137 | def run(self):
138 | self.handle(sys.argv[0], sys.argv[1:])
139 |
--------------------------------------------------------------------------------
/docs/_themes/flask_small/static/flasky.css_t:
--------------------------------------------------------------------------------
1 | /*
2 | * flasky.css_t
3 | * ~~~~~~~~~~~~
4 | *
5 | * Sphinx stylesheet -- flasky theme based on nature theme.
6 | *
7 | * :copyright: Copyright 2007-2010 by the Sphinx team, see AUTHORS.
8 | * :license: BSD, see LICENSE for details.
9 | *
10 | */
11 |
12 | @import url("basic.css");
13 |
14 | /* -- page layout ----------------------------------------------------------- */
15 |
16 | body {
17 | font-family: 'Georgia', serif;
18 | font-size: 17px;
19 | color: #000;
20 | background: white;
21 | margin: 0;
22 | padding: 0;
23 | }
24 |
25 | div.documentwrapper {
26 | float: left;
27 | width: 100%;
28 | }
29 |
30 | div.bodywrapper {
31 | margin: 40px auto 0 auto;
32 | width: 700px;
33 | }
34 |
35 | hr {
36 | border: 1px solid #B1B4B6;
37 | }
38 |
39 | div.body {
40 | background-color: #ffffff;
41 | color: #3E4349;
42 | padding: 0 30px 30px 30px;
43 | }
44 |
45 | img.floatingflask {
46 | padding: 0 0 10px 10px;
47 | float: right;
48 | }
49 |
50 | div.footer {
51 | text-align: right;
52 | color: #888;
53 | padding: 10px;
54 | font-size: 14px;
55 | width: 650px;
56 | margin: 0 auto 40px auto;
57 | }
58 |
59 | div.footer a {
60 | color: #888;
61 | text-decoration: underline;
62 | }
63 |
64 | div.related {
65 | line-height: 32px;
66 | color: #888;
67 | }
68 |
69 | div.related ul {
70 | padding: 0 0 0 10px;
71 | }
72 |
73 | div.related a {
74 | color: #444;
75 | }
76 |
77 | /* -- body styles ----------------------------------------------------------- */
78 |
79 | a {
80 | color: #004B6B;
81 | text-decoration: underline;
82 | }
83 |
84 | a:hover {
85 | color: #6D4100;
86 | text-decoration: underline;
87 | }
88 |
89 | div.body {
90 | padding-bottom: 40px; /* saved for footer */
91 | }
92 |
93 | div.body h1,
94 | div.body h2,
95 | div.body h3,
96 | div.body h4,
97 | div.body h5,
98 | div.body h6 {
99 | font-family: 'Garamond', 'Georgia', serif;
100 | font-weight: normal;
101 | margin: 30px 0px 10px 0px;
102 | padding: 0;
103 | }
104 |
105 | {% if theme_index_logo %}
106 | div.indexwrapper h1 {
107 | text-indent: -999999px;
108 | background: url({{ theme_index_logo }}) no-repeat center center;
109 | height: {{ theme_index_logo_height }};
110 | }
111 | {% endif %}
112 |
113 | div.body h2 { font-size: 180%; }
114 | div.body h3 { font-size: 150%; }
115 | div.body h4 { font-size: 130%; }
116 | div.body h5 { font-size: 100%; }
117 | div.body h6 { font-size: 100%; }
118 |
119 | a.headerlink {
120 | color: white;
121 | padding: 0 4px;
122 | text-decoration: none;
123 | }
124 |
125 | a.headerlink:hover {
126 | color: #444;
127 | background: #eaeaea;
128 | }
129 |
130 | div.body p, div.body dd, div.body li {
131 | line-height: 1.4em;
132 | }
133 |
134 | div.admonition {
135 | background: #fafafa;
136 | margin: 20px -30px;
137 | padding: 10px 30px;
138 | border-top: 1px solid #ccc;
139 | border-bottom: 1px solid #ccc;
140 | }
141 |
142 | div.admonition p.admonition-title {
143 | font-family: 'Garamond', 'Georgia', serif;
144 | font-weight: normal;
145 | font-size: 24px;
146 | margin: 0 0 10px 0;
147 | padding: 0;
148 | line-height: 1;
149 | }
150 |
151 | div.admonition p.last {
152 | margin-bottom: 0;
153 | }
154 |
155 | div.highlight{
156 | background-color: white;
157 | }
158 |
159 | dt:target, .highlight {
160 | background: #FAF3E8;
161 | }
162 |
163 | div.note {
164 | background-color: #eee;
165 | border: 1px solid #ccc;
166 | }
167 |
168 | div.seealso {
169 | background-color: #ffc;
170 | border: 1px solid #ff6;
171 | }
172 |
173 | div.topic {
174 | background-color: #eee;
175 | }
176 |
177 | div.warning {
178 | background-color: #ffe4e4;
179 | border: 1px solid #f66;
180 | }
181 |
182 | p.admonition-title {
183 | display: inline;
184 | }
185 |
186 | p.admonition-title:after {
187 | content: ":";
188 | }
189 |
190 | pre, tt {
191 | font-family: 'Consolas', 'Menlo', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
192 | font-size: 0.85em;
193 | }
194 |
195 | img.screenshot {
196 | }
197 |
198 | tt.descname, tt.descclassname {
199 | font-size: 0.95em;
200 | }
201 |
202 | tt.descname {
203 | padding-right: 0.08em;
204 | }
205 |
206 | img.screenshot {
207 | -moz-box-shadow: 2px 2px 4px #eee;
208 | -webkit-box-shadow: 2px 2px 4px #eee;
209 | box-shadow: 2px 2px 4px #eee;
210 | }
211 |
212 | table.docutils {
213 | border: 1px solid #888;
214 | -moz-box-shadow: 2px 2px 4px #eee;
215 | -webkit-box-shadow: 2px 2px 4px #eee;
216 | box-shadow: 2px 2px 4px #eee;
217 | }
218 |
219 | table.docutils td, table.docutils th {
220 | border: 1px solid #888;
221 | padding: 0.25em 0.7em;
222 | }
223 |
224 | table.field-list, table.footnote {
225 | border: none;
226 | -moz-box-shadow: none;
227 | -webkit-box-shadow: none;
228 | box-shadow: none;
229 | }
230 |
231 | table.footnote {
232 | margin: 15px 0;
233 | width: 100%;
234 | border: 1px solid #eee;
235 | }
236 |
237 | table.field-list th {
238 | padding: 0 0.8em 0 0;
239 | }
240 |
241 | table.field-list td {
242 | padding: 0;
243 | }
244 |
245 | table.footnote td {
246 | padding: 0.5em;
247 | }
248 |
249 | dl {
250 | margin: 0;
251 | padding: 0;
252 | }
253 |
254 | dl dd {
255 | margin-left: 30px;
256 | }
257 |
258 | pre {
259 | padding: 0;
260 | margin: 15px -30px;
261 | padding: 8px;
262 | line-height: 1.3em;
263 | padding: 7px 30px;
264 | background: #eee;
265 | border-radius: 2px;
266 | -moz-border-radius: 2px;
267 | -webkit-border-radius: 2px;
268 | }
269 |
270 | dl pre {
271 | margin-left: -60px;
272 | padding-left: 60px;
273 | }
274 |
275 | tt {
276 | background-color: #ecf0f3;
277 | color: #222;
278 | /* padding: 1px 2px; */
279 | }
280 |
281 | tt.xref, a tt {
282 | background-color: #FBFBFB;
283 | }
284 |
285 | a:hover tt {
286 | background: #EEE;
287 | }
288 |
--------------------------------------------------------------------------------
/docs/Makefile:
--------------------------------------------------------------------------------
1 | # Makefile for Sphinx documentation
2 | #
3 |
4 | # You can set these variables from the command line.
5 | SPHINXOPTS =
6 | SPHINXBUILD = sphinx-build
7 | PAPER =
8 | BUILDDIR = _build
9 |
10 | # User-friendly check for sphinx-build
11 | ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)
12 | $(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/)
13 | endif
14 |
15 | # Internal variables.
16 | PAPEROPT_a4 = -D latex_paper_size=a4
17 | PAPEROPT_letter = -D latex_paper_size=letter
18 | ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
19 | # the i18n builder cannot share the environment and doctrees with the others
20 | I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
21 |
22 | .PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext
23 |
24 | help:
25 | @echo "Please use \`make ' where is one of"
26 | @echo " html to make standalone HTML files"
27 | @echo " dirhtml to make HTML files named index.html in directories"
28 | @echo " singlehtml to make a single large HTML file"
29 | @echo " pickle to make pickle files"
30 | @echo " json to make JSON files"
31 | @echo " htmlhelp to make HTML files and a HTML help project"
32 | @echo " qthelp to make HTML files and a qthelp project"
33 | @echo " devhelp to make HTML files and a Devhelp project"
34 | @echo " epub to make an epub"
35 | @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
36 | @echo " latexpdf to make LaTeX files and run them through pdflatex"
37 | @echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
38 | @echo " text to make text files"
39 | @echo " man to make manual pages"
40 | @echo " texinfo to make Texinfo files"
41 | @echo " info to make Texinfo files and run them through makeinfo"
42 | @echo " gettext to make PO message catalogs"
43 | @echo " changes to make an overview of all changed/added/deprecated items"
44 | @echo " xml to make Docutils-native XML files"
45 | @echo " pseudoxml to make pseudoxml-XML files for display purposes"
46 | @echo " linkcheck to check all external links for integrity"
47 | @echo " doctest to run all doctests embedded in the documentation (if enabled)"
48 |
49 | clean:
50 | rm -rf $(BUILDDIR)/*
51 |
52 | html:
53 | $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
54 | @echo
55 | @echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
56 |
57 | dirhtml:
58 | $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
59 | @echo
60 | @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
61 |
62 | singlehtml:
63 | $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
64 | @echo
65 | @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
66 |
67 | pickle:
68 | $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
69 | @echo
70 | @echo "Build finished; now you can process the pickle files."
71 |
72 | json:
73 | $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
74 | @echo
75 | @echo "Build finished; now you can process the JSON files."
76 |
77 | htmlhelp:
78 | $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
79 | @echo
80 | @echo "Build finished; now you can run HTML Help Workshop with the" \
81 | ".hhp project file in $(BUILDDIR)/htmlhelp."
82 |
83 | qthelp:
84 | $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
85 | @echo
86 | @echo "Build finished; now you can run "qcollectiongenerator" with the" \
87 | ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
88 | @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/Flask-Runner.qhcp"
89 | @echo "To view the help file:"
90 | @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/Flask-Runner.qhc"
91 |
92 | devhelp:
93 | $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
94 | @echo
95 | @echo "Build finished."
96 | @echo "To view the help file:"
97 | @echo "# mkdir -p $$HOME/.local/share/devhelp/Flask-Runner"
98 | @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/Flask-Runner"
99 | @echo "# devhelp"
100 |
101 | epub:
102 | $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
103 | @echo
104 | @echo "Build finished. The epub file is in $(BUILDDIR)/epub."
105 |
106 | latex:
107 | $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
108 | @echo
109 | @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
110 | @echo "Run \`make' in that directory to run these through (pdf)latex" \
111 | "(use \`make latexpdf' here to do that automatically)."
112 |
113 | latexpdf:
114 | $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
115 | @echo "Running LaTeX files through pdflatex..."
116 | $(MAKE) -C $(BUILDDIR)/latex all-pdf
117 | @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
118 |
119 | latexpdfja:
120 | $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
121 | @echo "Running LaTeX files through platex and dvipdfmx..."
122 | $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
123 | @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
124 |
125 | text:
126 | $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
127 | @echo
128 | @echo "Build finished. The text files are in $(BUILDDIR)/text."
129 |
130 | man:
131 | $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
132 | @echo
133 | @echo "Build finished. The manual pages are in $(BUILDDIR)/man."
134 |
135 | texinfo:
136 | $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
137 | @echo
138 | @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
139 | @echo "Run \`make' in that directory to run these through makeinfo" \
140 | "(use \`make info' here to do that automatically)."
141 |
142 | info:
143 | $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
144 | @echo "Running Texinfo files through makeinfo..."
145 | make -C $(BUILDDIR)/texinfo info
146 | @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
147 |
148 | gettext:
149 | $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
150 | @echo
151 | @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
152 |
153 | changes:
154 | $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
155 | @echo
156 | @echo "The overview file is in $(BUILDDIR)/changes."
157 |
158 | linkcheck:
159 | $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
160 | @echo
161 | @echo "Link check complete; look for any errors in the above output " \
162 | "or in $(BUILDDIR)/linkcheck/output.txt."
163 |
164 | doctest:
165 | $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
166 | @echo "Testing of doctests in the sources finished, look at the " \
167 | "results in $(BUILDDIR)/doctest/output.txt."
168 |
169 | xml:
170 | $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
171 | @echo
172 | @echo "Build finished. The XML files are in $(BUILDDIR)/xml."
173 |
174 | pseudoxml:
175 | $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
176 | @echo
177 | @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."
178 |
--------------------------------------------------------------------------------
/docs/make.bat:
--------------------------------------------------------------------------------
1 | @ECHO OFF
2 |
3 | REM Command file for Sphinx documentation
4 |
5 | if "%SPHINXBUILD%" == "" (
6 | set SPHINXBUILD=sphinx-build
7 | )
8 | set BUILDDIR=_build
9 | set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% .
10 | set I18NSPHINXOPTS=%SPHINXOPTS% .
11 | if NOT "%PAPER%" == "" (
12 | set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS%
13 | set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS%
14 | )
15 |
16 | if "%1" == "" goto help
17 |
18 | if "%1" == "help" (
19 | :help
20 | echo.Please use `make ^` where ^ is one of
21 | echo. html to make standalone HTML files
22 | echo. dirhtml to make HTML files named index.html in directories
23 | echo. singlehtml to make a single large HTML file
24 | echo. pickle to make pickle files
25 | echo. json to make JSON files
26 | echo. htmlhelp to make HTML files and a HTML help project
27 | echo. qthelp to make HTML files and a qthelp project
28 | echo. devhelp to make HTML files and a Devhelp project
29 | echo. epub to make an epub
30 | echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter
31 | echo. text to make text files
32 | echo. man to make manual pages
33 | echo. texinfo to make Texinfo files
34 | echo. gettext to make PO message catalogs
35 | echo. changes to make an overview over all changed/added/deprecated items
36 | echo. xml to make Docutils-native XML files
37 | echo. pseudoxml to make pseudoxml-XML files for display purposes
38 | echo. linkcheck to check all external links for integrity
39 | echo. doctest to run all doctests embedded in the documentation if enabled
40 | goto end
41 | )
42 |
43 | if "%1" == "clean" (
44 | for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i
45 | del /q /s %BUILDDIR%\*
46 | goto end
47 | )
48 |
49 |
50 | %SPHINXBUILD% 2> nul
51 | if errorlevel 9009 (
52 | echo.
53 | echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
54 | echo.installed, then set the SPHINXBUILD environment variable to point
55 | echo.to the full path of the 'sphinx-build' executable. Alternatively you
56 | echo.may add the Sphinx directory to PATH.
57 | echo.
58 | echo.If you don't have Sphinx installed, grab it from
59 | echo.http://sphinx-doc.org/
60 | exit /b 1
61 | )
62 |
63 | if "%1" == "html" (
64 | %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html
65 | if errorlevel 1 exit /b 1
66 | echo.
67 | echo.Build finished. The HTML pages are in %BUILDDIR%/html.
68 | goto end
69 | )
70 |
71 | if "%1" == "dirhtml" (
72 | %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml
73 | if errorlevel 1 exit /b 1
74 | echo.
75 | echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml.
76 | goto end
77 | )
78 |
79 | if "%1" == "singlehtml" (
80 | %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml
81 | if errorlevel 1 exit /b 1
82 | echo.
83 | echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml.
84 | goto end
85 | )
86 |
87 | if "%1" == "pickle" (
88 | %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle
89 | if errorlevel 1 exit /b 1
90 | echo.
91 | echo.Build finished; now you can process the pickle files.
92 | goto end
93 | )
94 |
95 | if "%1" == "json" (
96 | %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json
97 | if errorlevel 1 exit /b 1
98 | echo.
99 | echo.Build finished; now you can process the JSON files.
100 | goto end
101 | )
102 |
103 | if "%1" == "htmlhelp" (
104 | %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp
105 | if errorlevel 1 exit /b 1
106 | echo.
107 | echo.Build finished; now you can run HTML Help Workshop with the ^
108 | .hhp project file in %BUILDDIR%/htmlhelp.
109 | goto end
110 | )
111 |
112 | if "%1" == "qthelp" (
113 | %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp
114 | if errorlevel 1 exit /b 1
115 | echo.
116 | echo.Build finished; now you can run "qcollectiongenerator" with the ^
117 | .qhcp project file in %BUILDDIR%/qthelp, like this:
118 | echo.^> qcollectiongenerator %BUILDDIR%\qthelp\Flask-Runner.qhcp
119 | echo.To view the help file:
120 | echo.^> assistant -collectionFile %BUILDDIR%\qthelp\Flask-Runner.ghc
121 | goto end
122 | )
123 |
124 | if "%1" == "devhelp" (
125 | %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp
126 | if errorlevel 1 exit /b 1
127 | echo.
128 | echo.Build finished.
129 | goto end
130 | )
131 |
132 | if "%1" == "epub" (
133 | %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub
134 | if errorlevel 1 exit /b 1
135 | echo.
136 | echo.Build finished. The epub file is in %BUILDDIR%/epub.
137 | goto end
138 | )
139 |
140 | if "%1" == "latex" (
141 | %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
142 | if errorlevel 1 exit /b 1
143 | echo.
144 | echo.Build finished; the LaTeX files are in %BUILDDIR%/latex.
145 | goto end
146 | )
147 |
148 | if "%1" == "latexpdf" (
149 | %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
150 | cd %BUILDDIR%/latex
151 | make all-pdf
152 | cd %BUILDDIR%/..
153 | echo.
154 | echo.Build finished; the PDF files are in %BUILDDIR%/latex.
155 | goto end
156 | )
157 |
158 | if "%1" == "latexpdfja" (
159 | %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
160 | cd %BUILDDIR%/latex
161 | make all-pdf-ja
162 | cd %BUILDDIR%/..
163 | echo.
164 | echo.Build finished; the PDF files are in %BUILDDIR%/latex.
165 | goto end
166 | )
167 |
168 | if "%1" == "text" (
169 | %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text
170 | if errorlevel 1 exit /b 1
171 | echo.
172 | echo.Build finished. The text files are in %BUILDDIR%/text.
173 | goto end
174 | )
175 |
176 | if "%1" == "man" (
177 | %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man
178 | if errorlevel 1 exit /b 1
179 | echo.
180 | echo.Build finished. The manual pages are in %BUILDDIR%/man.
181 | goto end
182 | )
183 |
184 | if "%1" == "texinfo" (
185 | %SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo
186 | if errorlevel 1 exit /b 1
187 | echo.
188 | echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo.
189 | goto end
190 | )
191 |
192 | if "%1" == "gettext" (
193 | %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale
194 | if errorlevel 1 exit /b 1
195 | echo.
196 | echo.Build finished. The message catalogs are in %BUILDDIR%/locale.
197 | goto end
198 | )
199 |
200 | if "%1" == "changes" (
201 | %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes
202 | if errorlevel 1 exit /b 1
203 | echo.
204 | echo.The overview file is in %BUILDDIR%/changes.
205 | goto end
206 | )
207 |
208 | if "%1" == "linkcheck" (
209 | %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck
210 | if errorlevel 1 exit /b 1
211 | echo.
212 | echo.Link check complete; look for any errors in the above output ^
213 | or in %BUILDDIR%/linkcheck/output.txt.
214 | goto end
215 | )
216 |
217 | if "%1" == "doctest" (
218 | %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest
219 | if errorlevel 1 exit /b 1
220 | echo.
221 | echo.Testing of doctests in the sources finished, look at the ^
222 | results in %BUILDDIR%/doctest/output.txt.
223 | goto end
224 | )
225 |
226 | if "%1" == "xml" (
227 | %SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml
228 | if errorlevel 1 exit /b 1
229 | echo.
230 | echo.Build finished. The XML files are in %BUILDDIR%/xml.
231 | goto end
232 | )
233 |
234 | if "%1" == "pseudoxml" (
235 | %SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml
236 | if errorlevel 1 exit /b 1
237 | echo.
238 | echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml.
239 | goto end
240 | )
241 |
242 | :end
243 |
--------------------------------------------------------------------------------
/docs/conf.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | #
3 | # Flask-Runner documentation build configuration file, created by
4 | # sphinx-quickstart on Fri Aug 30 23:28:10 2013.
5 | #
6 | # This file is execfile()d with the current directory set to its containing dir.
7 | #
8 | # Note that not all possible configuration values are present in this
9 | # autogenerated file.
10 | #
11 | # All configuration values have a default; values that are commented out
12 | # serve to show the default.
13 |
14 | import sys, os
15 |
16 | # If extensions (or modules to document with autodoc) are in another directory,
17 | # add these directories to sys.path here. If the directory is relative to the
18 | # documentation root, use os.path.abspath to make it absolute, like shown here.
19 | sys.path.insert(0, os.path.abspath('..'))
20 | sys.path.append(os.path.abspath('_themes'))
21 |
22 | # -- General configuration -----------------------------------------------------
23 |
24 | # If your documentation needs a minimal Sphinx version, state it here.
25 | #needs_sphinx = '1.0'
26 |
27 | # Add any Sphinx extension module names here, as strings. They can be extensions
28 | # coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
29 | extensions = []
30 |
31 | # Add any paths that contain templates here, relative to this directory.
32 | templates_path = ['_templates']
33 |
34 | # The suffix of source filenames.
35 | source_suffix = '.rst'
36 |
37 | # The encoding of source files.
38 | #source_encoding = 'utf-8-sig'
39 |
40 | # The master toctree document.
41 | master_doc = 'index'
42 |
43 | # General information about the project.
44 | project = u'Flask-Runner'
45 | copyright = u'2013, Miguel Grinberg'
46 |
47 | # The version info for the project you're documenting, acts as replacement for
48 | # |version| and |release|, also used in various other places throughout the
49 | # built documents.
50 | #
51 | # The short X.Y version.
52 | #version = '2.1.0'
53 | # The full version, including alpha/beta/rc tags.
54 | #release = '2.1.0'
55 |
56 | # The language for content autogenerated by Sphinx. Refer to documentation
57 | # for a list of supported languages.
58 | #language = None
59 |
60 | # There are two options for replacing |today|: either, you set today to some
61 | # non-false value, then it is used:
62 | #today = ''
63 | # Else, today_fmt is used as the format for a strftime call.
64 | #today_fmt = '%B %d, %Y'
65 |
66 | # List of patterns, relative to source directory, that match files and
67 | # directories to ignore when looking for source files.
68 | exclude_patterns = ['_build']
69 |
70 | # The reST default role (used for this markup: `text`) to use for all documents.
71 | #default_role = None
72 |
73 | # If true, '()' will be appended to :func: etc. cross-reference text.
74 | #add_function_parentheses = True
75 |
76 | # If true, the current module name will be prepended to all description
77 | # unit titles (such as .. function::).
78 | #add_module_names = True
79 |
80 | # If true, sectionauthor and moduleauthor directives will be shown in the
81 | # output. They are ignored by default.
82 | #show_authors = False
83 |
84 | # The name of the Pygments (syntax highlighting) style to use.
85 | pygments_style = 'sphinx'
86 |
87 | # A list of ignored prefixes for module index sorting.
88 | #modindex_common_prefix = []
89 |
90 | # If true, keep warnings as "system message" paragraphs in the built documents.
91 | #keep_warnings = False
92 |
93 |
94 | # -- Options for HTML output ---------------------------------------------------
95 |
96 | # The theme to use for HTML and HTML Help pages. See the documentation for
97 | # a list of builtin themes.
98 | html_theme = 'flask_small'
99 |
100 | # Theme options are theme-specific and customize the look and feel of a theme
101 | # further. For a list of options available for each theme, see the
102 | # documentation.
103 | html_theme_options = {
104 | 'index_logo': 'logo.png',
105 | 'github_fork': 'miguelgrinberg/Flask-Runner'
106 | }
107 |
108 | # Add any paths that contain custom themes here, relative to this directory.
109 | html_theme_path = ['_themes']
110 |
111 | # The name for this set of Sphinx documents. If None, it defaults to
112 | # " v documentation".
113 | #html_title = None
114 |
115 | # A shorter title for the navigation bar. Default is the same as html_title.
116 | #html_short_title = None
117 |
118 | # The name of an image file (relative to this directory) to place at the top
119 | # of the sidebar.
120 | #html_logo = None
121 |
122 | # The name of an image file (within the static path) to use as favicon of the
123 | # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
124 | # pixels large.
125 | #html_favicon = None
126 |
127 | # Add any paths that contain custom static files (such as style sheets) here,
128 | # relative to this directory. They are copied after the builtin static files,
129 | # so a file named "default.css" will overwrite the builtin "default.css".
130 | html_static_path = ['_static']
131 |
132 | # If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
133 | # using the given strftime format.
134 | #html_last_updated_fmt = '%b %d, %Y'
135 |
136 | # If true, SmartyPants will be used to convert quotes and dashes to
137 | # typographically correct entities.
138 | #html_use_smartypants = True
139 |
140 | # Custom sidebar templates, maps document names to template names.
141 | #html_sidebars = {}
142 |
143 | # Additional templates that should be rendered to pages, maps page names to
144 | # template names.
145 | #html_additional_pages = {}
146 |
147 | # If false, no module index is generated.
148 | #html_domain_indices = True
149 |
150 | # If false, no index is generated.
151 | #html_use_index = True
152 |
153 | # If true, the index is split into individual pages for each letter.
154 | #html_split_index = False
155 |
156 | # If true, links to the reST sources are added to the pages.
157 | #html_show_sourcelink = True
158 |
159 | # If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
160 | #html_show_sphinx = True
161 |
162 | # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
163 | #html_show_copyright = True
164 |
165 | # If true, an OpenSearch description file will be output, and all pages will
166 | # contain a tag referring to it. The value of this option must be the
167 | # base URL from which the finished HTML is served.
168 | #html_use_opensearch = ''
169 |
170 | # This is the file name suffix for HTML files (e.g. ".xhtml").
171 | #html_file_suffix = None
172 |
173 | # Output file base name for HTML help builder.
174 | htmlhelp_basename = 'Flask-Runnerdoc'
175 |
176 |
177 | # -- Options for LaTeX output --------------------------------------------------
178 |
179 | latex_elements = {
180 | # The paper size ('letterpaper' or 'a4paper').
181 | #'papersize': 'letterpaper',
182 |
183 | # The font size ('10pt', '11pt' or '12pt').
184 | #'pointsize': '10pt',
185 |
186 | # Additional stuff for the LaTeX preamble.
187 | #'preamble': '',
188 | }
189 |
190 | # Grouping the document tree into LaTeX files. List of tuples
191 | # (source start file, target name, title, author, documentclass [howto/manual]).
192 | latex_documents = [
193 | ('index', 'Flask-Runner.tex', u'Flask-Runner Documentation',
194 | u'Miguel Grinberg', 'manual'),
195 | ]
196 |
197 | # The name of an image file (relative to this directory) to place at the top of
198 | # the title page.
199 | #latex_logo = None
200 |
201 | # For "manual" documents, if this is true, then toplevel headings are parts,
202 | # not chapters.
203 | #latex_use_parts = False
204 |
205 | # If true, show page references after internal links.
206 | #latex_show_pagerefs = False
207 |
208 | # If true, show URL addresses after external links.
209 | #latex_show_urls = False
210 |
211 | # Documents to append as an appendix to all manuals.
212 | #latex_appendices = []
213 |
214 | # If false, no module index is generated.
215 | #latex_domain_indices = True
216 |
217 |
218 | # -- Options for manual page output --------------------------------------------
219 |
220 | # One entry per manual page. List of tuples
221 | # (source start file, name, description, authors, manual section).
222 | man_pages = [
223 | ('index', 'flask-runner', u'Flask-Runner Documentation',
224 | [u'Miguel Grinberg'], 1)
225 | ]
226 |
227 | # If true, show URL addresses after external links.
228 | #man_show_urls = False
229 |
230 |
231 | # -- Options for Texinfo output ------------------------------------------------
232 |
233 | # Grouping the document tree into Texinfo files. List of tuples
234 | # (source start file, target name, title, author,
235 | # dir menu entry, description, category)
236 | texinfo_documents = [
237 | ('index', 'Flask-Runner', u'Flask-Runner Documentation',
238 | u'Miguel Grinberg', 'Flask-Runner', 'One line description of project.',
239 | 'Miscellaneous'),
240 | ]
241 |
242 | # Documents to append as an appendix to all manuals.
243 | #texinfo_appendices = []
244 |
245 | # If false, no module index is generated.
246 | #texinfo_domain_indices = True
247 |
248 | # How to display URL addresses: 'footnote', 'no', or 'inline'.
249 | #texinfo_show_urls = 'footnote'
250 |
251 | # If true, do not generate a @detailmenu in the "Top" node's menu.
252 | #texinfo_no_detailmenu = False
253 |
--------------------------------------------------------------------------------
/docs/_themes/flask/static/flasky.css_t:
--------------------------------------------------------------------------------
1 | /*
2 | * flasky.css_t
3 | * ~~~~~~~~~~~~
4 | *
5 | * :copyright: Copyright 2010 by Armin Ronacher.
6 | * :license: Flask Design License, see LICENSE for details.
7 | */
8 |
9 | {% set page_width = '940px' %}
10 | {% set sidebar_width = '220px' %}
11 |
12 | @import url("basic.css");
13 |
14 | /* -- page layout ----------------------------------------------------------- */
15 |
16 | body {
17 | font-family: 'Georgia', serif;
18 | font-size: 17px;
19 | background-color: white;
20 | color: #000;
21 | margin: 0;
22 | padding: 0;
23 | }
24 |
25 | div.document {
26 | width: {{ page_width }};
27 | margin: 30px auto 0 auto;
28 | }
29 |
30 | div.documentwrapper {
31 | float: left;
32 | width: 100%;
33 | }
34 |
35 | div.bodywrapper {
36 | margin: 0 0 0 {{ sidebar_width }};
37 | }
38 |
39 | div.sphinxsidebar {
40 | width: {{ sidebar_width }};
41 | }
42 |
43 | hr {
44 | border: 1px solid #B1B4B6;
45 | }
46 |
47 | div.body {
48 | background-color: #ffffff;
49 | color: #3E4349;
50 | padding: 0 30px 0 30px;
51 | }
52 |
53 | img.floatingflask {
54 | padding: 0 0 10px 10px;
55 | float: right;
56 | }
57 |
58 | div.footer {
59 | width: {{ page_width }};
60 | margin: 20px auto 30px auto;
61 | font-size: 14px;
62 | color: #888;
63 | text-align: right;
64 | }
65 |
66 | div.footer a {
67 | color: #888;
68 | }
69 |
70 | div.related {
71 | display: none;
72 | }
73 |
74 | div.sphinxsidebar a {
75 | color: #444;
76 | text-decoration: none;
77 | border-bottom: 1px dotted #999;
78 | }
79 |
80 | div.sphinxsidebar a:hover {
81 | border-bottom: 1px solid #999;
82 | }
83 |
84 | div.sphinxsidebar {
85 | font-size: 14px;
86 | line-height: 1.5;
87 | }
88 |
89 | div.sphinxsidebarwrapper {
90 | padding: 18px 10px;
91 | }
92 |
93 | div.sphinxsidebarwrapper p.logo {
94 | padding: 0 0 20px 0;
95 | margin: 0;
96 | text-align: center;
97 | }
98 |
99 | div.sphinxsidebar h3,
100 | div.sphinxsidebar h4 {
101 | font-family: 'Garamond', 'Georgia', serif;
102 | color: #444;
103 | font-size: 24px;
104 | font-weight: normal;
105 | margin: 0 0 5px 0;
106 | padding: 0;
107 | }
108 |
109 | div.sphinxsidebar h4 {
110 | font-size: 20px;
111 | }
112 |
113 | div.sphinxsidebar h3 a {
114 | color: #444;
115 | }
116 |
117 | div.sphinxsidebar p.logo a,
118 | div.sphinxsidebar h3 a,
119 | div.sphinxsidebar p.logo a:hover,
120 | div.sphinxsidebar h3 a:hover {
121 | border: none;
122 | }
123 |
124 | div.sphinxsidebar p {
125 | color: #555;
126 | margin: 10px 0;
127 | }
128 |
129 | div.sphinxsidebar ul {
130 | margin: 10px 0;
131 | padding: 0;
132 | color: #000;
133 | }
134 |
135 | div.sphinxsidebar input {
136 | border: 1px solid #ccc;
137 | font-family: 'Georgia', serif;
138 | font-size: 1em;
139 | }
140 |
141 | /* -- body styles ----------------------------------------------------------- */
142 |
143 | a {
144 | color: #004B6B;
145 | text-decoration: underline;
146 | }
147 |
148 | a:hover {
149 | color: #6D4100;
150 | text-decoration: underline;
151 | }
152 |
153 | div.body h1,
154 | div.body h2,
155 | div.body h3,
156 | div.body h4,
157 | div.body h5,
158 | div.body h6 {
159 | font-family: 'Garamond', 'Georgia', serif;
160 | font-weight: normal;
161 | margin: 30px 0px 10px 0px;
162 | padding: 0;
163 | }
164 |
165 | {% if theme_index_logo %}
166 | div.indexwrapper h1 {
167 | text-indent: -999999px;
168 | background: url({{ theme_index_logo }}) no-repeat center center;
169 | height: {{ theme_index_logo_height }};
170 | }
171 | {% endif %}
172 | div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; }
173 | div.body h2 { font-size: 180%; }
174 | div.body h3 { font-size: 150%; }
175 | div.body h4 { font-size: 130%; }
176 | div.body h5 { font-size: 100%; }
177 | div.body h6 { font-size: 100%; }
178 |
179 | a.headerlink {
180 | color: #ddd;
181 | padding: 0 4px;
182 | text-decoration: none;
183 | }
184 |
185 | a.headerlink:hover {
186 | color: #444;
187 | background: #eaeaea;
188 | }
189 |
190 | div.body p, div.body dd, div.body li {
191 | line-height: 1.4em;
192 | }
193 |
194 | div.admonition {
195 | background: #fafafa;
196 | margin: 20px -30px;
197 | padding: 10px 30px;
198 | border-top: 1px solid #ccc;
199 | border-bottom: 1px solid #ccc;
200 | }
201 |
202 | div.admonition tt.xref, div.admonition a tt {
203 | border-bottom: 1px solid #fafafa;
204 | }
205 |
206 | dd div.admonition {
207 | margin-left: -60px;
208 | padding-left: 60px;
209 | }
210 |
211 | div.admonition p.admonition-title {
212 | font-family: 'Garamond', 'Georgia', serif;
213 | font-weight: normal;
214 | font-size: 24px;
215 | margin: 0 0 10px 0;
216 | padding: 0;
217 | line-height: 1;
218 | }
219 |
220 | div.admonition p.last {
221 | margin-bottom: 0;
222 | }
223 |
224 | div.highlight {
225 | background-color: white;
226 | }
227 |
228 | dt:target, .highlight {
229 | background: #FAF3E8;
230 | }
231 |
232 | div.note {
233 | background-color: #eee;
234 | border: 1px solid #ccc;
235 | }
236 |
237 | div.seealso {
238 | background-color: #ffc;
239 | border: 1px solid #ff6;
240 | }
241 |
242 | div.topic {
243 | background-color: #eee;
244 | }
245 |
246 | p.admonition-title {
247 | display: inline;
248 | }
249 |
250 | p.admonition-title:after {
251 | content: ":";
252 | }
253 |
254 | pre, tt {
255 | font-family: 'Consolas', 'Menlo', 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
256 | font-size: 0.9em;
257 | }
258 |
259 | img.screenshot {
260 | }
261 |
262 | tt.descname, tt.descclassname {
263 | font-size: 0.95em;
264 | }
265 |
266 | tt.descname {
267 | padding-right: 0.08em;
268 | }
269 |
270 | img.screenshot {
271 | -moz-box-shadow: 2px 2px 4px #eee;
272 | -webkit-box-shadow: 2px 2px 4px #eee;
273 | box-shadow: 2px 2px 4px #eee;
274 | }
275 |
276 | table.docutils {
277 | border: 1px solid #888;
278 | -moz-box-shadow: 2px 2px 4px #eee;
279 | -webkit-box-shadow: 2px 2px 4px #eee;
280 | box-shadow: 2px 2px 4px #eee;
281 | }
282 |
283 | table.docutils td, table.docutils th {
284 | border: 1px solid #888;
285 | padding: 0.25em 0.7em;
286 | }
287 |
288 | table.field-list, table.footnote {
289 | border: none;
290 | -moz-box-shadow: none;
291 | -webkit-box-shadow: none;
292 | box-shadow: none;
293 | }
294 |
295 | table.footnote {
296 | margin: 15px 0;
297 | width: 100%;
298 | border: 1px solid #eee;
299 | background: #fdfdfd;
300 | font-size: 0.9em;
301 | }
302 |
303 | table.footnote + table.footnote {
304 | margin-top: -15px;
305 | border-top: none;
306 | }
307 |
308 | table.field-list th {
309 | padding: 0 0.8em 0 0;
310 | }
311 |
312 | table.field-list td {
313 | padding: 0;
314 | }
315 |
316 | table.footnote td.label {
317 | width: 0px;
318 | padding: 0.3em 0 0.3em 0.5em;
319 | }
320 |
321 | table.footnote td {
322 | padding: 0.3em 0.5em;
323 | }
324 |
325 | dl {
326 | margin: 0;
327 | padding: 0;
328 | }
329 |
330 | dl dd {
331 | margin-left: 30px;
332 | }
333 |
334 | blockquote {
335 | margin: 0 0 0 30px;
336 | padding: 0;
337 | }
338 |
339 | ul, ol {
340 | margin: 10px 0 10px 30px;
341 | padding: 0;
342 | }
343 |
344 | pre {
345 | background: #eee;
346 | padding: 7px 30px;
347 | margin: 15px -30px;
348 | line-height: 1.3em;
349 | }
350 |
351 | dl pre, blockquote pre, li pre {
352 | margin-left: -60px;
353 | padding-left: 60px;
354 | }
355 |
356 | dl dl pre {
357 | margin-left: -90px;
358 | padding-left: 90px;
359 | }
360 |
361 | tt {
362 | background-color: #ecf0f3;
363 | color: #222;
364 | /* padding: 1px 2px; */
365 | }
366 |
367 | tt.xref, a tt {
368 | background-color: #FBFBFB;
369 | border-bottom: 1px solid white;
370 | }
371 |
372 | a.reference {
373 | text-decoration: none;
374 | border-bottom: 1px dotted #004B6B;
375 | }
376 |
377 | a.reference:hover {
378 | border-bottom: 1px solid #6D4100;
379 | }
380 |
381 | a.footnote-reference {
382 | text-decoration: none;
383 | font-size: 0.7em;
384 | vertical-align: top;
385 | border-bottom: 1px dotted #004B6B;
386 | }
387 |
388 | a.footnote-reference:hover {
389 | border-bottom: 1px solid #6D4100;
390 | }
391 |
392 | a:hover tt {
393 | background: #EEE;
394 | }
395 |
396 |
397 | @media screen and (max-width: 870px) {
398 |
399 | div.sphinxsidebar {
400 | display: none;
401 | }
402 |
403 | div.document {
404 | width: 100%;
405 |
406 | }
407 |
408 | div.documentwrapper {
409 | margin-left: 0;
410 | margin-top: 0;
411 | margin-right: 0;
412 | margin-bottom: 0;
413 | }
414 |
415 | div.bodywrapper {
416 | margin-top: 0;
417 | margin-right: 0;
418 | margin-bottom: 0;
419 | margin-left: 0;
420 | }
421 |
422 | ul {
423 | margin-left: 0;
424 | }
425 |
426 | .document {
427 | width: auto;
428 | }
429 |
430 | .footer {
431 | width: auto;
432 | }
433 |
434 | .bodywrapper {
435 | margin: 0;
436 | }
437 |
438 | .footer {
439 | width: auto;
440 | }
441 |
442 | .github {
443 | display: none;
444 | }
445 |
446 |
447 |
448 | }
449 |
450 |
451 |
452 | @media screen and (max-width: 875px) {
453 |
454 | body {
455 | margin: 0;
456 | padding: 20px 30px;
457 | }
458 |
459 | div.documentwrapper {
460 | float: none;
461 | background: white;
462 | }
463 |
464 | div.sphinxsidebar {
465 | display: block;
466 | float: none;
467 | width: 102.5%;
468 | margin: 50px -30px -20px -30px;
469 | padding: 10px 20px;
470 | background: #333;
471 | color: white;
472 | }
473 |
474 | div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p,
475 | div.sphinxsidebar h3 a {
476 | color: white;
477 | }
478 |
479 | div.sphinxsidebar a {
480 | color: #aaa;
481 | }
482 |
483 | div.sphinxsidebar p.logo {
484 | display: none;
485 | }
486 |
487 | div.document {
488 | width: 100%;
489 | margin: 0;
490 | }
491 |
492 | div.related {
493 | display: block;
494 | margin: 0;
495 | padding: 10px 0 20px 0;
496 | }
497 |
498 | div.related ul,
499 | div.related ul li {
500 | margin: 0;
501 | padding: 0;
502 | }
503 |
504 | div.footer {
505 | display: none;
506 | }
507 |
508 | div.bodywrapper {
509 | margin: 0;
510 | }
511 |
512 | div.body {
513 | min-height: 0;
514 | padding: 0;
515 | }
516 |
517 | .rtd_doc_footer {
518 | display: none;
519 | }
520 |
521 | .document {
522 | width: auto;
523 | }
524 |
525 | .footer {
526 | width: auto;
527 | }
528 |
529 | .footer {
530 | width: auto;
531 | }
532 |
533 | .github {
534 | display: none;
535 | }
536 | }
537 |
538 |
539 | /* scrollbars */
540 |
541 | ::-webkit-scrollbar {
542 | width: 6px;
543 | height: 6px;
544 | }
545 |
546 | ::-webkit-scrollbar-button:start:decrement,
547 | ::-webkit-scrollbar-button:end:increment {
548 | display: block;
549 | height: 10px;
550 | }
551 |
552 | ::-webkit-scrollbar-button:vertical:increment {
553 | background-color: #fff;
554 | }
555 |
556 | ::-webkit-scrollbar-track-piece {
557 | background-color: #eee;
558 | -webkit-border-radius: 3px;
559 | }
560 |
561 | ::-webkit-scrollbar-thumb:vertical {
562 | height: 50px;
563 | background-color: #ccc;
564 | -webkit-border-radius: 3px;
565 | }
566 |
567 | ::-webkit-scrollbar-thumb:horizontal {
568 | width: 50px;
569 | background-color: #ccc;
570 | -webkit-border-radius: 3px;
571 | }
572 |
573 | /* misc. */
574 |
575 | .revsys-inline {
576 | display: none!important;
577 | }
--------------------------------------------------------------------------------