PasteDeploy is a library used by WSGI Middlewares which makes it possible to configure WSGI components together declaratively within an .ini file. It was developed by Ian Bicking.
Entry Points and Paste Deploy .ini files:
# app configuration
use = egg:MyProject
paste.app_factory = configured:app_factory
name = Joy
greeting = ZeroVM
# wsgi server configuration
use = egg:waitress#main
host = 0.0.0.0
port = 6543
At a minimum, the configuration file defines an application instance and the server which runs it. In the First form of the configuration, The line in [app:main] above that says
use = egg:MyProject is actually shorthand for a longer spelling:
use = egg:MyProject#main. The #main part is omitted for brevity, as #main is a default defined by PasteDeploy.
egg:MyProject#main is a string which has meaning to PasteDeploy. It points at a setuptools entry point named main defined in the MyProject project.
In the Second Form of the configuration,
– Line 1 begins a section with the app: prefix, used to define a WSGI application endpoint. The name
main makes this application the default for this file.
– Line 2 tells
PasteDeploy to look up the function
app_factory in the module
configured, and call it to get the application.
– Lines 3-4 provide configuration values to be are passed to the factory.
Take a look at the generated setup.py file for this project.
from setuptools import setup, find_packages
here = os.path.abspath(os.path.dirname(__file__))
with open(os.path.join(here, 'README.txt')) as f:
README = f.read()
with open(os.path.join(here, 'CHANGES.txt')) as f:
CHANGES = f.read()
requires = [
long_description=README + '\n\n' + CHANGES,
&quot;Programming Language :: Python&quot;,
&quot;Framework :: Pyramid&quot;,
&quot;Topic :: Internet :: WWW/HTTP&quot;,
&quot;Topic :: Internet :: WWW/HTTP :: WSGI :: Application&quot;,
keywords='web pyramid pylons',
main = myproject:main
in the section named
[paste.app_factory], there is a key named main (the entry point name) which has a value myproject:main. The key main is what our egg:MyProject#main value of the use section in our config file is pointing at, although it is actually shortened to egg:MyProject there. The value represents a dotted Python name path, which refers to a callable in our myproject package’s
The egg: prefix in egg:MyProject indicates that this is an entry point URI specifier, where the “scheme” is “egg”. An “egg” is created when you run setup.py install or setup.py develop within your project.
In English, this entry point can thus be referred to as a “PasteDeploy application factory in the MyProject project which has the entry point named main where the entry point refers to a main function in the mypackage module”. Indeed, if you open up the init.py module generated within any scaffold-generated package, you’ll see a main function. This is the function called by PasteDeploy when the pserve command is invoked against our application. It accepts a global configuration object and returns an instance of our application.
[DEFAULT] Section of a PasteDeploy .ini File
You can add a [DEFAULT] section to your PasteDeploy .ini file. Such a section should consists of global parameters that are shared by all the applications, servers and middleware defined within the configuration file. The values in a [DEFAULT] section will be passed to your application’s main function as global_config (see the reference to the main function in init.py).