summaryrefslogtreecommitdiff
path: root/docs/narr
diff options
context:
space:
mode:
Diffstat (limited to 'docs/narr')
-rw-r--r--docs/narr/MyProject/development.ini22
-rw-r--r--docs/narr/MyProject/myproject/static/favicon.icobin1406 -> 0 bytes
-rw-r--r--docs/narr/MyProject/myproject/static/footerbg.pngbin333 -> 0 bytes
-rw-r--r--docs/narr/MyProject/myproject/static/headerbg.pngbin203 -> 0 bytes
-rw-r--r--docs/narr/MyProject/myproject/static/ie6.css8
-rw-r--r--docs/narr/MyProject/myproject/static/middlebg.pngbin2797 -> 0 bytes
-rw-r--r--docs/narr/MyProject/myproject/static/pylons.css372
-rw-r--r--docs/narr/MyProject/myproject/static/pyramid-16x16.pngbin0 -> 1319 bytes
-rw-r--r--docs/narr/MyProject/myproject/static/pyramid-small.pngbin7044 -> 0 bytes
-rw-r--r--docs/narr/MyProject/myproject/static/pyramid.pngbin33055 -> 12901 bytes
-rw-r--r--docs/narr/MyProject/myproject/static/theme.css152
-rw-r--r--docs/narr/MyProject/myproject/static/theme.min.css1
-rw-r--r--docs/narr/MyProject/myproject/static/transparent.gifbin49 -> 0 bytes
-rw-r--r--docs/narr/MyProject/myproject/templates/mytemplate.pt132
-rw-r--r--docs/narr/MyProject/production.ini16
-rw-r--r--docs/narr/MyProject/setup.cfg27
-rw-r--r--docs/narr/MyProject/setup.py1
-rw-r--r--docs/narr/advconfig.rst8
-rw-r--r--docs/narr/configuration.rst1
-rw-r--r--docs/narr/environment.rst38
-rw-r--r--docs/narr/events.rst6
-rw-r--r--docs/narr/hellotraversal.rst10
-rw-r--r--docs/narr/hooks.rst8
-rw-r--r--docs/narr/i18n.rst184
-rw-r--r--docs/narr/install.rst28
-rw-r--r--docs/narr/introduction.rst29
-rw-r--r--docs/narr/project-debug.pngbin153807 -> 106878 bytes
-rw-r--r--docs/narr/project.pngbin128727 -> 91662 bytes
-rw-r--r--docs/narr/project.rst67
-rw-r--r--docs/narr/resources.rst7
-rw-r--r--docs/narr/security.rst18
-rw-r--r--docs/narr/sessions.rst22
-rw-r--r--docs/narr/startup.rst2
-rw-r--r--docs/narr/templates.rst33
-rw-r--r--docs/narr/testing.rst6
-rw-r--r--docs/narr/urldispatch.rst5
-rw-r--r--docs/narr/viewconfig.rst34
-rw-r--r--docs/narr/webob.rst11
38 files changed, 503 insertions, 745 deletions
diff --git a/docs/narr/MyProject/development.ini b/docs/narr/MyProject/development.ini
index 84e08c2d0..a9a26e56b 100644
--- a/docs/narr/MyProject/development.ini
+++ b/docs/narr/MyProject/development.ini
@@ -1,3 +1,8 @@
+###
+# app configuration
+# http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/environment.html
+###
+
[app:main]
use = egg:MyProject
@@ -6,15 +11,26 @@ pyramid.debug_authorization = false
pyramid.debug_notfound = false
pyramid.debug_routematch = false
pyramid.default_locale_name = en
-pyramid.includes =
+pyramid.includes =
pyramid_debugtoolbar
+# By default, the toolbar only appears for clients from IP addresses
+# '127.0.0.1' and '::1'.
+# debugtoolbar.hosts = 127.0.0.1 ::1
+
+###
+# wsgi server configuration
+###
+
[server:main]
use = egg:waitress#main
host = 0.0.0.0
port = 6543
-# Begin logging configuration
+###
+# logging configuration
+# http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/logging.html
+###
[loggers]
keys = root, myproject
@@ -42,5 +58,3 @@ formatter = generic
[formatter_generic]
format = %(asctime)s %(levelname)-5.5s [%(name)s][%(threadName)s] %(message)s
-
-# End logging configuration
diff --git a/docs/narr/MyProject/myproject/static/favicon.ico b/docs/narr/MyProject/myproject/static/favicon.ico
deleted file mode 100644
index 71f837c9e..000000000
--- a/docs/narr/MyProject/myproject/static/favicon.ico
+++ /dev/null
Binary files differ
diff --git a/docs/narr/MyProject/myproject/static/footerbg.png b/docs/narr/MyProject/myproject/static/footerbg.png
deleted file mode 100644
index 1fbc873da..000000000
--- a/docs/narr/MyProject/myproject/static/footerbg.png
+++ /dev/null
Binary files differ
diff --git a/docs/narr/MyProject/myproject/static/headerbg.png b/docs/narr/MyProject/myproject/static/headerbg.png
deleted file mode 100644
index 0596f2020..000000000
--- a/docs/narr/MyProject/myproject/static/headerbg.png
+++ /dev/null
Binary files differ
diff --git a/docs/narr/MyProject/myproject/static/ie6.css b/docs/narr/MyProject/myproject/static/ie6.css
deleted file mode 100644
index b7c8493d8..000000000
--- a/docs/narr/MyProject/myproject/static/ie6.css
+++ /dev/null
@@ -1,8 +0,0 @@
-* html img,
-* html .png{position:relative;behavior:expression((this.runtimeStyle.behavior="none")&&(this.pngSet?this.pngSet=true:(this.nodeName == "IMG" && this.src.toLowerCase().indexOf('.png')>-1?(this.runtimeStyle.backgroundImage = "none",
-this.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + this.src + "',sizingMethod='image')",
-this.src = "static/transparent.gif"):(this.origBg = this.origBg? this.origBg :this.currentStyle.backgroundImage.toString().replace('url("','').replace('")',''),
-this.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + this.origBg + "',sizingMethod='crop')",
-this.runtimeStyle.backgroundImage = "none")),this.pngSet=true)
-);}
-#wrap{display:table;height:100%}
diff --git a/docs/narr/MyProject/myproject/static/middlebg.png b/docs/narr/MyProject/myproject/static/middlebg.png
deleted file mode 100644
index 2369cfb7d..000000000
--- a/docs/narr/MyProject/myproject/static/middlebg.png
+++ /dev/null
Binary files differ
diff --git a/docs/narr/MyProject/myproject/static/pylons.css b/docs/narr/MyProject/myproject/static/pylons.css
deleted file mode 100644
index 4b1c017cd..000000000
--- a/docs/narr/MyProject/myproject/static/pylons.css
+++ /dev/null
@@ -1,372 +0,0 @@
-html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, font, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td
-{
- margin: 0;
- padding: 0;
- border: 0;
- outline: 0;
- font-size: 100%; /* 16px */
- vertical-align: baseline;
- background: transparent;
-}
-
-body
-{
- line-height: 1;
-}
-
-ol, ul
-{
- list-style: none;
-}
-
-blockquote, q
-{
- quotes: none;
-}
-
-blockquote:before, blockquote:after, q:before, q:after
-{
- content: '';
- content: none;
-}
-
-:focus
-{
- outline: 0;
-}
-
-ins
-{
- text-decoration: none;
-}
-
-del
-{
- text-decoration: line-through;
-}
-
-table
-{
- border-collapse: collapse;
- border-spacing: 0;
-}
-
-sub
-{
- vertical-align: sub;
- font-size: smaller;
- line-height: normal;
-}
-
-sup
-{
- vertical-align: super;
- font-size: smaller;
- line-height: normal;
-}
-
-ul, menu, dir
-{
- display: block;
- list-style-type: disc;
- margin: 1em 0;
- padding-left: 40px;
-}
-
-ol
-{
- display: block;
- list-style-type: decimal-leading-zero;
- margin: 1em 0;
- padding-left: 40px;
-}
-
-li
-{
- display: list-item;
-}
-
-ul ul, ul ol, ul dir, ul menu, ul dl, ol ul, ol ol, ol dir, ol menu, ol dl, dir ul, dir ol, dir dir, dir menu, dir dl, menu ul, menu ol, menu dir, menu menu, menu dl, dl ul, dl ol, dl dir, dl menu, dl dl
-{
- margin-top: 0;
- margin-bottom: 0;
-}
-
-ol ul, ul ul, menu ul, dir ul, ol menu, ul menu, menu menu, dir menu, ol dir, ul dir, menu dir, dir dir
-{
- list-style-type: circle;
-}
-
-ol ol ul, ol ul ul, ol menu ul, ol dir ul, ol ol menu, ol ul menu, ol menu menu, ol dir menu, ol ol dir, ol ul dir, ol menu dir, ol dir dir, ul ol ul, ul ul ul, ul menu ul, ul dir ul, ul ol menu, ul ul menu, ul menu menu, ul dir menu, ul ol dir, ul ul dir, ul menu dir, ul dir dir, menu ol ul, menu ul ul, menu menu ul, menu dir ul, menu ol menu, menu ul menu, menu menu menu, menu dir menu, menu ol dir, menu ul dir, menu menu dir, menu dir dir, dir ol ul, dir ul ul, dir menu ul, dir dir ul, dir ol menu, dir ul menu, dir menu menu, dir dir menu, dir ol dir, dir ul dir, dir menu dir, dir dir dir
-{
- list-style-type: square;
-}
-
-.hidden
-{
- display: none;
-}
-
-p
-{
- line-height: 1.5em;
-}
-
-h1
-{
- font-size: 1.75em;
- line-height: 1.7em;
- font-family: helvetica, verdana;
-}
-
-h2
-{
- font-size: 1.5em;
- line-height: 1.7em;
- font-family: helvetica, verdana;
-}
-
-h3
-{
- font-size: 1.25em;
- line-height: 1.7em;
- font-family: helvetica, verdana;
-}
-
-h4
-{
- font-size: 1em;
- line-height: 1.7em;
- font-family: helvetica, verdana;
-}
-
-html, body
-{
- width: 100%;
- height: 100%;
-}
-
-body
-{
- margin: 0;
- padding: 0;
- background-color: #fff;
- position: relative;
- font: 16px/24px NobileRegular, "Lucida Grande", Lucida, Verdana, sans-serif;
-}
-
-a
-{
- color: #1b61d6;
- text-decoration: none;
-}
-
-a:hover
-{
- color: #e88f00;
- text-decoration: underline;
-}
-
-body h1, body h2, body h3, body h4, body h5, body h6
-{
- font-family: NeutonRegular, "Lucida Grande", Lucida, Verdana, sans-serif;
- font-weight: 400;
- color: #373839;
- font-style: normal;
-}
-
-#wrap
-{
- min-height: 100%;
-}
-
-#header, #footer
-{
- width: 100%;
- color: #fff;
- height: 40px;
- position: absolute;
- text-align: center;
- line-height: 40px;
- overflow: hidden;
- font-size: 12px;
- vertical-align: middle;
-}
-
-#header
-{
- background: #000;
- top: 0;
- font-size: 14px;
-}
-
-#footer
-{
- bottom: 0;
- background: #000 url(footerbg.png) repeat-x 0 top;
- position: relative;
- margin-top: -40px;
- clear: both;
-}
-
-.header, .footer
-{
- width: 750px;
- margin-right: auto;
- margin-left: auto;
-}
-
-.wrapper
-{
- width: 100%;
-}
-
-#top, #top-small, #bottom
-{
- width: 100%;
-}
-
-#top
-{
- color: #000;
- height: 230px;
- background: #fff url(headerbg.png) repeat-x 0 top;
- position: relative;
-}
-
-#top-small
-{
- color: #000;
- height: 60px;
- background: #fff url(headerbg.png) repeat-x 0 top;
- position: relative;
-}
-
-#bottom
-{
- color: #222;
- background-color: #fff;
-}
-
-.top, .top-small, .middle, .bottom
-{
- width: 750px;
- margin-right: auto;
- margin-left: auto;
-}
-
-.top
-{
- padding-top: 40px;
-}
-
-.top-small
-{
- padding-top: 10px;
-}
-
-#middle
-{
- width: 100%;
- height: 100px;
- background: url(middlebg.png) repeat-x;
- border-top: 2px solid #fff;
- border-bottom: 2px solid #b2b2b2;
-}
-
-.app-welcome
-{
- margin-top: 25px;
-}
-
-.app-name
-{
- color: #000;
- font-weight: 700;
-}
-
-.bottom
-{
- padding-top: 50px;
-}
-
-#left
-{
- width: 350px;
- float: left;
- padding-right: 25px;
-}
-
-#right
-{
- width: 350px;
- float: right;
- padding-left: 25px;
-}
-
-.align-left
-{
- text-align: left;
-}
-
-.align-right
-{
- text-align: right;
-}
-
-.align-center
-{
- text-align: center;
-}
-
-ul.links
-{
- margin: 0;
- padding: 0;
-}
-
-ul.links li
-{
- list-style-type: none;
- font-size: 14px;
-}
-
-form
-{
- border-style: none;
-}
-
-fieldset
-{
- border-style: none;
-}
-
-input
-{
- color: #222;
- border: 1px solid #ccc;
- font-family: sans-serif;
- font-size: 12px;
- line-height: 16px;
-}
-
-input[type=text], input[type=password]
-{
- width: 205px;
-}
-
-input[type=submit]
-{
- background-color: #ddd;
- font-weight: 700;
-}
-
-/*Opera Fix*/
-body:before
-{
- content: "";
- height: 100%;
- float: left;
- width: 0;
- margin-top: -32767px;
-}
diff --git a/docs/narr/MyProject/myproject/static/pyramid-16x16.png b/docs/narr/MyProject/myproject/static/pyramid-16x16.png
new file mode 100644
index 000000000..979203112
--- /dev/null
+++ b/docs/narr/MyProject/myproject/static/pyramid-16x16.png
Binary files differ
diff --git a/docs/narr/MyProject/myproject/static/pyramid-small.png b/docs/narr/MyProject/myproject/static/pyramid-small.png
deleted file mode 100644
index a5bc0ade7..000000000
--- a/docs/narr/MyProject/myproject/static/pyramid-small.png
+++ /dev/null
Binary files differ
diff --git a/docs/narr/MyProject/myproject/static/pyramid.png b/docs/narr/MyProject/myproject/static/pyramid.png
index 347e05549..4ab837be9 100644
--- a/docs/narr/MyProject/myproject/static/pyramid.png
+++ b/docs/narr/MyProject/myproject/static/pyramid.png
Binary files differ
diff --git a/docs/narr/MyProject/myproject/static/theme.css b/docs/narr/MyProject/myproject/static/theme.css
new file mode 100644
index 000000000..be50ad420
--- /dev/null
+++ b/docs/narr/MyProject/myproject/static/theme.css
@@ -0,0 +1,152 @@
+@import url(//fonts.googleapis.com/css?family=Open+Sans:300,400,600,700);
+body {
+ font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-weight: 300;
+ color: #ffffff;
+ background: #bc2131;
+}
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+ font-family: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-weight: 300;
+}
+p {
+ font-weight: 300;
+}
+.font-normal {
+ font-weight: 400;
+}
+.font-semi-bold {
+ font-weight: 600;
+}
+.font-bold {
+ font-weight: 700;
+}
+.starter-template {
+ margin-top: 250px;
+}
+.starter-template .content {
+ margin-left: 10px;
+}
+.starter-template .content h1 {
+ margin-top: 10px;
+ font-size: 60px;
+}
+.starter-template .content h1 .smaller {
+ font-size: 40px;
+ color: #f2b7bd;
+}
+.starter-template .content .lead {
+ font-size: 25px;
+ color: #f2b7bd;
+}
+.starter-template .content .lead .font-normal {
+ color: #ffffff;
+}
+.starter-template .links {
+ float: right;
+ right: 0;
+ margin-top: 125px;
+}
+.starter-template .links ul {
+ display: block;
+ padding: 0;
+ margin: 0;
+}
+.starter-template .links ul li {
+ list-style: none;
+ display: inline;
+ margin: 0 10px;
+}
+.starter-template .links ul li:first-child {
+ margin-left: 0;
+}
+.starter-template .links ul li:last-child {
+ margin-right: 0;
+}
+.starter-template .links ul li.current-version {
+ color: #f2b7bd;
+ font-weight: 400;
+}
+.starter-template .links ul li a {
+ color: #ffffff;
+}
+.starter-template .links ul li a:hover {
+ text-decoration: underline;
+}
+.starter-template .links ul li .icon-muted {
+ color: #eb8b95;
+ margin-right: 5px;
+}
+.starter-template .links ul li:hover .icon-muted {
+ color: #ffffff;
+}
+.starter-template .copyright {
+ margin-top: 10px;
+ font-size: 0.9em;
+ color: #f2b7bd;
+ text-transform: lowercase;
+ float: right;
+ right: 0;
+}
+@media (max-width: 1199px) {
+ .starter-template .content h1 {
+ font-size: 45px;
+ }
+ .starter-template .content h1 .smaller {
+ font-size: 30px;
+ }
+ .starter-template .content .lead {
+ font-size: 20px;
+ }
+}
+@media (max-width: 991px) {
+ .starter-template {
+ margin-top: 0;
+ }
+ .starter-template .logo {
+ margin: 40px auto;
+ }
+ .starter-template .content {
+ margin-left: 0;
+ text-align: center;
+ }
+ .starter-template .content h1 {
+ margin-bottom: 20px;
+ }
+ .starter-template .links {
+ float: none;
+ text-align: center;
+ margin-top: 60px;
+ }
+ .starter-template .copyright {
+ float: none;
+ text-align: center;
+ }
+}
+@media (max-width: 767px) {
+ .starter-template .content h1 .smaller {
+ font-size: 25px;
+ display: block;
+ }
+ .starter-template .content .lead {
+ font-size: 16px;
+ }
+ .starter-template .links {
+ margin-top: 40px;
+ }
+ .starter-template .links ul li {
+ display: block;
+ margin: 0;
+ }
+ .starter-template .links ul li .icon-muted {
+ display: none;
+ }
+ .starter-template .copyright {
+ margin-top: 20px;
+ }
+}
diff --git a/docs/narr/MyProject/myproject/static/theme.min.css b/docs/narr/MyProject/myproject/static/theme.min.css
new file mode 100644
index 000000000..2f924bcc5
--- /dev/null
+++ b/docs/narr/MyProject/myproject/static/theme.min.css
@@ -0,0 +1 @@
+@import url(//fonts.googleapis.com/css?family=Open+Sans:300,400,600,700);body{font-family:"Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:300;color:#fff;background:#bc2131}h1,h2,h3,h4,h5,h6{font-family:"Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif;font-weight:300}p{font-weight:300}.font-normal{font-weight:400}.font-semi-bold{font-weight:600}.font-bold{font-weight:700}.starter-template{margin-top:250px}.starter-template .content{margin-left:10px}.starter-template .content h1{margin-top:10px;font-size:60px}.starter-template .content h1 .smaller{font-size:40px;color:#f2b7bd}.starter-template .content .lead{font-size:25px;color:#f2b7bd}.starter-template .content .lead .font-normal{color:#fff}.starter-template .links{float:right;right:0;margin-top:125px}.starter-template .links ul{display:block;padding:0;margin:0}.starter-template .links ul li{list-style:none;display:inline;margin:0 10px}.starter-template .links ul li:first-child{margin-left:0}.starter-template .links ul li:last-child{margin-right:0}.starter-template .links ul li.current-version{color:#f2b7bd;font-weight:400}.starter-template .links ul li a{color:#fff}.starter-template .links ul li a:hover{text-decoration:underline}.starter-template .links ul li .icon-muted{color:#eb8b95;margin-right:5px}.starter-template .links ul li:hover .icon-muted{color:#fff}.starter-template .copyright{margin-top:10px;font-size:.9em;color:#f2b7bd;text-transform:lowercase;float:right;right:0}@media (max-width:1199px){.starter-template .content h1{font-size:45px}.starter-template .content h1 .smaller{font-size:30px}.starter-template .content .lead{font-size:20px}}@media (max-width:991px){.starter-template{margin-top:0}.starter-template .logo{margin:40px auto}.starter-template .content{margin-left:0;text-align:center}.starter-template .content h1{margin-bottom:20px}.starter-template .links{float:none;text-align:center;margin-top:60px}.starter-template .copyright{float:none;text-align:center}}@media (max-width:767px){.starter-template .content h1 .smaller{font-size:25px;display:block}.starter-template .content .lead{font-size:16px}.starter-template .links{margin-top:40px}.starter-template .links ul li{display:block;margin:0}.starter-template .links ul li .icon-muted{display:none}.starter-template .copyright{margin-top:20px}} \ No newline at end of file
diff --git a/docs/narr/MyProject/myproject/static/transparent.gif b/docs/narr/MyProject/myproject/static/transparent.gif
deleted file mode 100644
index 0341802e5..000000000
--- a/docs/narr/MyProject/myproject/static/transparent.gif
+++ /dev/null
Binary files differ
diff --git a/docs/narr/MyProject/myproject/templates/mytemplate.pt b/docs/narr/MyProject/myproject/templates/mytemplate.pt
index 0fccba624..e6b00a145 100644
--- a/docs/narr/MyProject/myproject/templates/mytemplate.pt
+++ b/docs/narr/MyProject/myproject/templates/mytemplate.pt
@@ -1,76 +1,66 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" xmlns:tal="http://xml.zope.org/namespaces/tal">
-<head>
- <title>The Pyramid Web Framework</title>
- <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
- <meta name="keywords" content="python web application" />
- <meta name="description" content="pyramid web application" />
- <link rel="shortcut icon" href="/static/favicon.ico" />
- <link rel="stylesheet" href="/static/pylons.css" type="text/css" media="screen" charset="utf-8" />
- <link rel="stylesheet" href="http://static.pylonsproject.org/fonts/nobile/stylesheet.css" media="screen" />
- <link rel="stylesheet" href="http://static.pylonsproject.org/fonts/neuton/stylesheet.css" media="screen" />
- <!--[if lte IE 6]>
- <link rel="stylesheet" href="/static/ie6.css" type="text/css" media="screen" charset="utf-8" />
- <![endif]-->
-</head>
-<body>
- <div id="wrap">
- <div id="top">
- <div class="top align-center">
- <div><img src="/static/pyramid.png" width="750" height="169" alt="pyramid"/></div>
- </div>
- </div>
- <div id="middle">
- <div class="middle align-center">
- <p class="app-welcome">
- Welcome to <span class="app-name">${project}</span>, an application generated by<br/>
- the Pyramid Web Framework.
- </p>
- </div>
- </div>
- <div id="bottom">
- <div class="bottom">
- <div id="left" class="align-right">
- <h2>Search documentation</h2>
- <form method="get" action="http://docs.pylonsproject.org/projects/pyramid/current/search.html">
- <input type="text" id="q" name="q" value="" />
- <input type="submit" id="x" value="Go" />
- </form>
+<!DOCTYPE html>
+<html lang="${request.locale_name}">
+ <head>
+ <meta charset="utf-8">
+ <meta http-equiv="X-UA-Compatible" content="IE=edge">
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
+ <meta name="description" content="pyramid web application">
+ <meta name="author" content="Pylons Project">
+ <link rel="shortcut icon" href="${request.static_url('myproject:static/pyramid-16x16.png')}">
+
+ <title>Starter Template for The Pyramid Web Framework</title>
+
+ <!-- Bootstrap core CSS -->
+ <link href="//oss.maxcdn.com/libs/twitter-bootstrap/3.0.3/css/bootstrap.min.css" rel="stylesheet">
+
+ <!-- Custom styles for this template -->
+ <link href="${request.static_url('myproject:static/theme.css')}" rel="stylesheet">
+
+ <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
+ <!--[if lt IE 9]>
+ <script src="//oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
+ <script src="//oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
+ <![endif]-->
+ </head>
+
+ <body>
+
+ <div class="starter-template">
+ <div class="container">
+ <div class="row">
+ <div class="col-md-2">
+ <img class="logo img-responsive" src="${request.static_url('myproject:static/pyramid.png')}" alt="pyramid web framework">
+ </div>
+ <div class="col-md-10">
+ <div class="content">
+ <h1><span class="font-semi-bold">Pyramid</span> <span class="smaller">starter template</span></h1>
+ <p class="lead">Welcome to <span class="font-normal">${project}</span>, an&nbsp;application generated&nbsp;by<br>the <span class="font-normal">Pyramid Web Framework</span>.</p>
+ </div>
+ </div>
+ </div>
+ <div class="row">
+ <div class="links">
+ <ul>
+ <li class="current-version">Currently v1.5</li>
+ <li><i class="glyphicon glyphicon-bookmark icon-muted"></i><a href="http://docs.pylonsproject.org">Docs</a></li>
+ <li><i class="glyphicon glyphicon-cog icon-muted"></i><a href="https://github.com/Pylons/pyramid">Github Project</a></li>
+ <li><i class="glyphicon glyphicon-globe icon-muted"></i><a href="irc://irc.freenode.net#pyramid">IRC Channel</a></li>
+ <li><i class="glyphicon glyphicon-home icon-muted"></i><a href="http://pylonsproject.org">Pylons Project</a></li>
+ </div>
</div>
- <div id="right" class="align-left">
- <h2>Pyramid links</h2>
- <ul class="links">
- <li>
- <a href="http://pylonsproject.org">Pylons Website</a>
- </li>
- <li>
- <a href="http://docs.pylonsproject.org/projects/pyramid/en/1.3-branch/#narrative-documentation">Narrative Documentation</a>
- </li>
- <li>
- <a href="http://docs.pylonsproject.org/projects/pyramid/en/1.3-branch/#reference-material">API Documentation</a>
- </li>
- <li>
- <a href="http://docs.pylonsproject.org/projects/pyramid/en/1.3-branch/#tutorials">Tutorials</a>
- </li>
- <li>
- <a href="http://docs.pylonsproject.org/projects/pyramid/en/1.3-branch/#detailed-change-history">Change History</a>
- </li>
- <li>
- <a href="http://docs.pylonsproject.org/projects/pyramid/en/1.3-branch/#sample-applications">Sample Applications</a>
- </li>
- <li>
- <a href="http://docs.pylonsproject.org/projects/pyramid/en/1.3-branch/#support-and-development">Support and Development</a>
- </li>
- <li>
- <a href="irc://irc.freenode.net#pyramid">IRC Channel</a>
- </li>
- </ul>
+ <div class="row">
+ <div class="copyright">
+ Copyright &copy; Pylons Project
+ </div>
</div>
</div>
</div>
- </div>
- <div id="footer">
- <div class="footer">&copy; Copyright 2008-2011, Agendaless Consulting.</div>
- </div>
-</body>
+
+
+ <!-- Bootstrap core JavaScript
+ ================================================== -->
+ <!-- Placed at the end of the document so the pages load faster -->
+ <script src="//oss.maxcdn.com/libs/jquery/1.10.2/jquery.min.js"></script>
+ <script src="//oss.maxcdn.com/libs/twitter-bootstrap/3.0.3/js/bootstrap.min.js"></script>
+ </body>
</html>
diff --git a/docs/narr/MyProject/production.ini b/docs/narr/MyProject/production.ini
index 3396125f2..9eae9e03f 100644
--- a/docs/narr/MyProject/production.ini
+++ b/docs/narr/MyProject/production.ini
@@ -1,3 +1,8 @@
+###
+# app configuration
+# http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/environment.html
+###
+
[app:main]
use = egg:MyProject
@@ -7,12 +12,19 @@ pyramid.debug_notfound = false
pyramid.debug_routematch = false
pyramid.default_locale_name = en
+###
+# wsgi server configuration
+###
+
[server:main]
use = egg:waitress#main
host = 0.0.0.0
port = 6543
-# Begin logging configuration
+###
+# logging configuration
+# http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/logging.html
+###
[loggers]
keys = root, myproject
@@ -40,5 +52,3 @@ formatter = generic
[formatter_generic]
format = %(asctime)s %(levelname)-5.5s [%(name)s][%(threadName)s] %(message)s
-
-# End logging configuration
diff --git a/docs/narr/MyProject/setup.cfg b/docs/narr/MyProject/setup.cfg
deleted file mode 100644
index 332e80a60..000000000
--- a/docs/narr/MyProject/setup.cfg
+++ /dev/null
@@ -1,27 +0,0 @@
-[nosetests]
-match = ^test
-nocapture = 1
-cover-package = myproject
-with-coverage = 1
-cover-erase = 1
-
-[compile_catalog]
-directory = myproject/locale
-domain = MyProject
-statistics = true
-
-[extract_messages]
-add_comments = TRANSLATORS:
-output_file = myproject/locale/MyProject.pot
-width = 80
-
-[init_catalog]
-domain = MyProject
-input_file = myproject/locale/MyProject.pot
-output_dir = myproject/locale
-
-[update_catalog]
-domain = MyProject
-input_file = myproject/locale/MyProject.pot
-output_dir = myproject/locale
-previous = true
diff --git a/docs/narr/MyProject/setup.py b/docs/narr/MyProject/setup.py
index a23f46c91..8c019af51 100644
--- a/docs/narr/MyProject/setup.py
+++ b/docs/narr/MyProject/setup.py
@@ -40,4 +40,3 @@ setup(name='MyProject',
main = myproject:main
""",
)
-
diff --git a/docs/narr/advconfig.rst b/docs/narr/advconfig.rst
index d3431e39e..9ceaaa495 100644
--- a/docs/narr/advconfig.rst
+++ b/docs/narr/advconfig.rst
@@ -158,8 +158,12 @@ use :meth:`pyramid.config.Configurator.include`:
Using :meth:`~pyramid.config.Configurator.include` instead of calling the
function directly provides a modicum of automated conflict resolution, with
the configuration statements you define in the calling code overriding those
-of the included function. See also :ref:`automatic_conflict_resolution` and
-:ref:`including_configuration`.
+of the included function.
+
+.. seealso::
+
+ See also :ref:`automatic_conflict_resolution` and
+ :ref:`including_configuration`.
Using ``config.commit()``
+++++++++++++++++++++++++
diff --git a/docs/narr/configuration.rst b/docs/narr/configuration.rst
index f7a69d613..52615533d 100644
--- a/docs/narr/configuration.rst
+++ b/docs/narr/configuration.rst
@@ -114,7 +114,6 @@ in a package and its subpackages. For example:
return Response('Hello')
if __name__ == '__main__':
- from pyramid.config import Configurator
config = Configurator()
config.scan()
app = config.make_wsgi_app()
diff --git a/docs/narr/environment.rst b/docs/narr/environment.rst
index f0c0c18fe..412635f08 100644
--- a/docs/narr/environment.rst
+++ b/docs/narr/environment.rst
@@ -59,8 +59,11 @@ third-party template rendering extensions.
Reloading Assets
----------------
-Don't cache any asset file data when this value is true. See
-also :ref:`overriding_assets_section`.
+Don't cache any asset file data when this value is true.
+
+.. seealso::
+
+ See also :ref:`overriding_assets_section`.
+---------------------------------+-----------------------------+
| Environment Variable Name | Config File Setting Name |
@@ -79,7 +82,11 @@ Debugging Authorization
-----------------------
Print view authorization failure and success information to stderr
-when this value is true. See also :ref:`debug_authorization_section`.
+when this value is true.
+
+.. seealso::
+
+ See also :ref:`debug_authorization_section`.
+---------------------------------+-----------------------------------+
| Environment Variable Name | Config File Setting Name |
@@ -94,7 +101,11 @@ Debugging Not Found Errors
--------------------------
Print view-related ``NotFound`` debug messages to stderr
-when this value is true. See also :ref:`debug_notfound_section`.
+when this value is true.
+
+.. seealso::
+
+ See also :ref:`debug_notfound_section`.
+---------------------------------+------------------------------+
| Environment Variable Name | Config File Setting Name |
@@ -109,7 +120,11 @@ Debugging Route Matching
------------------------
Print debugging messages related to :term:`url dispatch` route matching when
-this value is true. See also :ref:`debug_routematch_section`.
+this value is true.
+
+.. seealso::
+
+ See also :ref:`debug_routematch_section`.
+---------------------------------+--------------------------------+
| Environment Variable Name | Config File Setting Name |
@@ -128,7 +143,11 @@ Preventing HTTP Caching
Prevent the ``http_cache`` view configuration argument from having any effect
globally in this process when this value is true. No http caching-related
response headers will be set by the Pyramid ``http_cache`` view configuration
-feature when this is true. See also :ref:`influencing_http_caching`.
+feature when this is true.
+
+.. seealso::
+
+ See also :ref:`influencing_http_caching`.
+---------------------------------+----------------------------------+
| Environment Variable Name | Config File Setting Name |
@@ -173,8 +192,11 @@ Default Locale Name
--------------------
The value supplied here is used as the default locale name when a
-:term:`locale negotiator` is not registered. See also
-:ref:`localization_deployment_settings`.
+:term:`locale negotiator` is not registered.
+
+.. seealso::
+
+ See also :ref:`localization_deployment_settings`.
+---------------------------------+-----------------------------------+
| Environment Variable Name | Config File Setting Name |
diff --git a/docs/narr/events.rst b/docs/narr/events.rst
index 50484761d..09caac898 100644
--- a/docs/narr/events.rst
+++ b/docs/narr/events.rst
@@ -44,7 +44,7 @@ Configuring an Event Listener Imperatively
You can imperatively configure a subscriber function to be called
for some event type via the
:meth:`~pyramid.config.Configurator.add_subscriber`
-method (see also :term:`Configurator`):
+method:
.. code-block:: python
:linenos:
@@ -63,6 +63,10 @@ The first argument to
subscriber function (or a :term:`dotted Python name` which refers
to a subscriber callable); the second argument is the event type.
+.. seealso::
+
+ See also :term:`Configurator`.
+
Configuring an Event Listener Using a Decorator
-----------------------------------------------
diff --git a/docs/narr/hellotraversal.rst b/docs/narr/hellotraversal.rst
index 142c24f54..0a93b8f16 100644
--- a/docs/narr/hellotraversal.rst
+++ b/docs/narr/hellotraversal.rst
@@ -60,10 +60,10 @@ A more complicated application could have many types of resources,
with different view callables defined for each type, and even multiple
views for each type.
-See Also
----------
+.. seealso::
-Full technical details may be found in :doc:`traversal`.
-
-For more about *why* you might use traversal, see :doc:`muchadoabouttraversal`.
+ Full technical details may be found in :doc:`traversal`.
+
+ For more about *why* you might use traversal, see
+ :doc:`muchadoabouttraversal`.
diff --git a/docs/narr/hooks.rst b/docs/narr/hooks.rst
index f2542f1d7..4da36e730 100644
--- a/docs/narr/hooks.rst
+++ b/docs/narr/hooks.rst
@@ -985,7 +985,7 @@ Creating a Tween
To create a tween, you must write a "tween factory". A tween factory
must be a globally importable callable which accepts two arguments:
-``handler`` and ``registry``. ``handler`` will be the either the main
+``handler`` and ``registry``. ``handler`` will be either the main
Pyramid request handling function or another tween. ``registry`` will be the
Pyramid :term:`application registry` represented by this Configurator. A
tween factory must return the tween (a callable object) when it is called.
@@ -1023,7 +1023,7 @@ method:
:linenos:
class simple_tween_factory(object):
- def __init__(handler, registry):
+ def __init__(self, handler, registry):
self.handler = handler
self.registry = registry
@@ -1040,6 +1040,10 @@ method:
return response
+You should avoid mutating any state on the tween instance. The tween is
+invoked once per request and any shared mutable state needs to be carefully
+handled to avoid any race conditions.
+
The closure style performs slightly better and enables you to conditionally
omit the tween from the request processing pipeline (see the following timing
tween example), whereas the class style makes it easier to have shared mutable
diff --git a/docs/narr/i18n.rst b/docs/narr/i18n.rst
index 5f50ca212..1de2c8941 100644
--- a/docs/narr/i18n.rst
+++ b/docs/narr/i18n.rst
@@ -245,88 +245,70 @@ GNU gettext uses three types of files in the translation framework,
A ``.po`` file is turned into a machine-readable binary file, which
is the ``.mo`` file. Compiling the translations to machine code
- makes the localized program run faster.
+ makes the localized program start faster.
The tools for working with :term:`gettext` translation files related to a
-:app:`Pyramid` application is :term:`Babel` and :term:`Lingua`. Lingua is a
-Babel extension that provides support for scraping i18n references out of
-Python and Chameleon files.
+:app:`Pyramid` application are :term:`Lingua` and :term:`Gettext`. Lingua
+can scrape i18n references out of Python and Chameleon files and create
+the ``.pot`` file. Gettext includes ``msgmerge`` tool to update a ``.po`` file
+from an updated ``.pot`` file and ``msgfmt`` to compile ``.po`` files to
+``.mo`` files.
.. index::
- single: Babel
+ single: Gettext
single: Lingua
.. _installing_babel:
-Installing Babel and Lingua
-~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Installing Lingua and Gettext
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In order for the commands related to working with ``gettext`` translation
-files to work properly, you will need to have :term:`Babel` and
-:term:`Lingua` installed into the same environment in which :app:`Pyramid` is
+files to work properly, you will need to have :term:`Lingua` and
+:term:`Gettext` installed into the same environment in which :app:`Pyramid` is
installed.
Installation on UNIX
++++++++++++++++++++
-If the :term:`virtualenv` into which you've installed your :app:`Pyramid`
-application lives in ``/my/virtualenv``, you can install Babel and Lingua
-like so:
+Gettext is often already installed on UNIX systems. You can check if it is
+installed by testing if the ``msgfmt`` command is available. If it is not
+available you can install it through the packaging system from your OS;
+the package name is almost always ``gettext``. For example on a Debian or
+Ubuntu system run this command:
.. code-block:: text
- $ cd /my/virtualenv
- $ $VENV/bin/easy_install Babel lingua
+ $ sudo apt-get install gettext
-Installation on Windows
-+++++++++++++++++++++++
-
-If the :term:`virtualenv` into which you've installed your :app:`Pyramid`
-application lives in ``C:\my\virtualenv``, you can install Babel and Lingua
+Installing Lingua is done with the Python packaging tools. If the
+:term:`virtualenv` into which you've installed your :app:`Pyramid` application
+lives in ``/my/virtualenv``, you can install Lingua
like so:
.. code-block:: text
- C> %VENV%\Scripts\easy_install Babel lingua
+ $ cd /my/virtualenv
+ $ $VENV/bin/easy_install lingua
-.. index::
- single: Babel; message extractors
- single: Lingua
+Installation on Windows
++++++++++++++++++++++++
-Changing the ``setup.py``
-+++++++++++++++++++++++++
+There are several ways to install Gettext on Windows: it is included in the
+`Cygwin <http://www.cygwin.com/>`_ collection, or you can use the `installer
+from the GnuWin32 <http://gnuwin32.sourceforge.net/packages/gettext.htm>`_
+or compile it yourself. Make sure the installation path is added to your
+``$PATH``.
-You need to add a few boilerplate lines to your application's ``setup.py``
-file in order to properly generate :term:`gettext` files from your
-application.
-.. note:: See :ref:`project_narr` to learn about the
- composition of an application's ``setup.py`` file.
+Installing Lingua is done with the Python packaging tools. If the
+:term:`virtualenv` into which you've installed your :app:`Pyramid` application
+lives in ``C:\my\virtualenv``, you can install Lingua like so:
-In particular, add the ``Babel`` and ``lingua`` distributions to the
-``install_requires`` list and insert a set of references to :term:`Babel`
-*message extractors* within the call to :func:`setuptools.setup` inside your
-application's ``setup.py`` file:
+.. code-block:: text
-.. code-block:: python
- :linenos:
+ C> %VENV%\Scripts\easy_install lingua
- setup(name="mypackage",
- # ...
- install_requires = [
- # ...
- 'Babel',
- 'lingua',
- ],
- message_extractors = { '.': [
- ('**.py', 'lingua_python', None ),
- ('**.pt', 'lingua_xml', None ),
- ]},
- )
-
-The ``message_extractors`` stanza placed into the ``setup.py`` file causes
-the :term:`Babel` message catalog extraction machinery to also consider
-``*.pt`` files when doing message id extraction.
.. index::
pair: extracting; messages
@@ -336,90 +318,20 @@ the :term:`Babel` message catalog extraction machinery to also consider
Extracting Messages from Code and Templates
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-Once Babel and Lingua are installed and your application's ``setup.py`` file
-has the correct message extractor references, you may extract a message
-catalog template from the code and :term:`Chameleon` templates which reside
-in your :app:`Pyramid` application. You run a ``setup.py`` command to
-extract the messages:
+Once Lingua is installed you may extract a message catalog template from the
+code and :term:`Chameleon` templates which reside in your :app:`Pyramid`
+application. You run a ``pot-create`` command to extract the messages:
.. code-block:: text
$ cd /place/where/myapplication/setup.py/lives
$ mkdir -p myapplication/locale
- $ $VENV/bin/python setup.py extract_messages
+ $ $VENV/bin/pot-create src > myapplication/locale/myapplication.pot
The message catalog ``.pot`` template will end up in:
``myapplication/locale/myapplication.pot``.
-.. index::
- single: translation domains
-
-Translation Domains
-+++++++++++++++++++
-
-The name ``myapplication`` above in the filename ``myapplication.pot``
-denotes the :term:`translation domain` of the translations that must
-be performed to localize your application. By default, the
-translation domain is the :term:`project` name of your
-:app:`Pyramid` application.
-
-To change the translation domain of the extracted messages in your project,
-edit the ``setup.cfg`` file of your application, The default ``setup.cfg``
-file of a ``pcreate`` -generated :app:`Pyramid` application has stanzas in it
-that look something like the following:
-
-.. code-block:: ini
- :linenos:
-
- [compile_catalog]
- directory = myproject/locale
- domain = MyProject
- statistics = true
-
- [extract_messages]
- add_comments = TRANSLATORS:
- output_file = myproject/locale/MyProject.pot
- width = 80
-
- [init_catalog]
- domain = MyProject
- input_file = myproject/locale/MyProject.pot
- output_dir = myproject/locale
-
- [update_catalog]
- domain = MyProject
- input_file = myproject/locale/MyProject.pot
- output_dir = myproject/locale
- previous = true
-
-In the above example, the project name is ``MyProject``. To indicate
-that you'd like the domain of your translations to be ``mydomain``
-instead, change the ``setup.cfg`` file stanzas to look like so:
-
-.. code-block:: ini
- :linenos:
-
- [compile_catalog]
- directory = myproject/locale
- domain = mydomain
- statistics = true
-
- [extract_messages]
- add_comments = TRANSLATORS:
- output_file = myproject/locale/mydomain.pot
- width = 80
-
- [init_catalog]
- domain = mydomain
- input_file = myproject/locale/mydomain.pot
- output_dir = myproject/locale
-
- [update_catalog]
- domain = mydomain
- input_file = myproject/locale/mydomain.pot
- output_dir = myproject/locale
- previous = true
.. index::
pair: initializing; message catalog
@@ -432,15 +344,17 @@ Once you've extracted messages into a ``.pot`` file (see
in the ``.pot`` file, you need to generate at least one ``.po`` file.
A ``.po`` file represents translations of a particular set of messages
to a particular locale. Initialize a ``.po`` file for a specific
-locale from a pre-generated ``.pot`` template by using the ``setup.py
-init_catalog`` command:
+locale from a pre-generated ``.pot`` template by using the ``msginit``
+command from Gettext:
.. code-block:: text
$ cd /place/where/myapplication/setup.py/lives
- $ $VENV/bin/python setup.py init_catalog -l es
+ $ cd myapplication/locale
+ $ mkdir -p es/LC_MESSAGES
+ $ msginit -l es es/LC_MESSAGES/myapplication.po
-By default, the message catalog ``.po`` file will end up in:
+This will create a new the message catalog ``.po`` file will in:
``myapplication/locale/es/LC_MESSAGES/myapplication.po``.
@@ -465,12 +379,13 @@ files based on changes to the ``.pot`` file, so that the new and
changed messages can also be translated or re-translated.
First, regenerate the ``.pot`` file as per :ref:`extracting_messages`.
-Then use the ``setup.py update_catalog`` command.
+Then use the ``msgmerge`` command from Gettext.
.. code-block:: text
$ cd /place/where/myapplication/setup.py/lives
- $ $VENV/bin/python setup.py update_catalog
+ $ cd myapplication/locale
+ $ msgmerge --update es/LC_MESSAGES/myapplication.po myapplication.pot
.. index::
pair: compiling; message catalog
@@ -481,12 +396,13 @@ Compiling a Message Catalog File
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Finally, to prepare an application for performing actual runtime
-translations, compile ``.po`` files to ``.mo`` files:
+translations, compile ``.po`` files to ``.mo`` files use the ``msgfmt``
+command from Gettext:
.. code-block:: text
$ cd /place/where/myapplication/setup.py/lives
- $ $VENV/bin/python setup.py compile_catalog
+ $ msgfmt myapplication/locale/*/LC_MESSAGES/*.po
This will create a ``.mo`` file for each ``.po`` file in your
application. As long as the :term:`translation directory` in which
diff --git a/docs/narr/install.rst b/docs/narr/install.rst
index e419a8b20..a825b61b9 100644
--- a/docs/narr/install.rst
+++ b/docs/narr/install.rst
@@ -15,8 +15,8 @@ You will need `Python <http://python.org>`_ version 2.6 or better to run
.. sidebar:: Python Versions
As of this writing, :app:`Pyramid` has been tested under Python 2.6, Python
- 2.7, Python 3.2, and Python 3.3. :app:`Pyramid` does not run under any
- version of Python before 2.6.
+ 2.7, Python 3.2, Python 3.3, Python 3.4 and PyPy 2.2. :app:`Pyramid` does
+ not run under any version of Python before 2.6.
:app:`Pyramid` is known to run on all popular UNIX-like systems such as Linux,
Mac OS X, and FreeBSD as well as on Windows platforms. It is also known to run
@@ -32,20 +32,22 @@ dependency will fall back to using pure Python instead.
For Mac OS X Users
~~~~~~~~~~~~~~~~~~
-From `Python.org <http://python.org/download/mac/>`_:
+Python comes pre-installed on Mac OS X, but due to Apple's release cycle,
+it is often out of date. Unless you have a need for a specific earlier version,
+it is recommended to install the latest 2.x or 3.x version of Python.
- Python comes pre-installed on Mac OS X, but due to Apple's release cycle,
- it's often one or even two years old. The overwhelming recommendation of
- the "MacPython" community is to upgrade your Python by downloading and
- installing a newer version from `the Python standard release page
- <http://python.org/download/releases/>`_.
+You can install the latest verion of Python for Mac OS X from the binaries on
+`python.org <https://www.python.org/download/mac/>`_.
-It is recommended to download one of the *installer* versions, unless you
-prefer to install your Python through a packgage manager (e.g., macports or
-homebrew) or to build your Python from source.
+Alternatively, you can use the `homebrew <http://brew.sh/>`_ package manager.
-Unless you have a need for a specific earlier version, it is recommended to
-install the latest 2.x or 3.x version of Python.
+.. code-block:: text
+
+ # for python 2.7
+ $ brew install python
+
+ # for python 3.4
+ $ brew install python3
If you use an installer for your Python, then you can skip to the section
:ref:`installing_unix`.
diff --git a/docs/narr/introduction.rst b/docs/narr/introduction.rst
index 8acbab3a0..a37d74c9b 100644
--- a/docs/narr/introduction.rst
+++ b/docs/narr/introduction.rst
@@ -121,7 +121,9 @@ ways.
.. literalinclude:: helloworld.py
-See also :ref:`firstapp_chapter`.
+.. seealso::
+
+ See also :ref:`firstapp_chapter`.
Decorator-based configuration
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -271,7 +273,9 @@ Here's a few views defined as methods of a class instead:
def view_two(self):
return Response('two')
-See also :ref:`view_config_placement`.
+.. seealso::
+
+ See also :ref:`view_config_placement`.
.. _intro_asset_specs:
@@ -572,7 +576,10 @@ For example:
config.include('pyramid_exclog')
config.include('some.other.guys.package', route_prefix='/someotherguy')
-See also :ref:`including_configuration` and :ref:`building_an_extensible_app`
+.. seealso::
+
+ See also :ref:`including_configuration` and
+ :ref:`building_an_extensible_app`.
Flexible authentication and authorization
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -730,7 +737,9 @@ Pyramid defaults to explicit behavior, because it's the most generally
useful, but provides hooks that allow you to adapt the framework to localized
aesthetic desires.
-See also :ref:`using_iresponse`.
+.. seealso::
+
+ See also :ref:`using_iresponse`.
"Global" response object
~~~~~~~~~~~~~~~~~~~~~~~~
@@ -748,7 +757,9 @@ section," you say. Fine. Be that way:
response.content_type = 'text/plain'
return response
-See also :ref:`request_response_attr`.
+.. seealso::
+
+ See also :ref:`request_response_attr`.
Automating repetitive configuration
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -811,7 +822,9 @@ it up and calling :meth:`~pyramid.config.Configurator.add_directive` from
within a function called when another user uses the
:meth:`~pyramid.config.Configurator.include` method against your code.
-See also :ref:`add_directive`.
+.. seealso::
+
+ See also :ref:`add_directive`.
Programmatic Introspection
~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -839,7 +852,9 @@ callable:
route_intr = introspector.get('routes', route_name)
return Response(str(route_intr['pattern']))
-See also :ref:`using_introspection`.
+.. seealso::
+
+ See also :ref:`using_introspection`.
Python 3 Compatibility
~~~~~~~~~~~~~~~~~~~~~~
diff --git a/docs/narr/project-debug.png b/docs/narr/project-debug.png
index d13a91736..4f8e441ef 100644
--- a/docs/narr/project-debug.png
+++ b/docs/narr/project-debug.png
Binary files differ
diff --git a/docs/narr/project.png b/docs/narr/project.png
index fc00ec086..5d46df0dd 100644
--- a/docs/narr/project.png
+++ b/docs/narr/project.png
Binary files differ
diff --git a/docs/narr/project.rst b/docs/narr/project.rst
index d7292d187..0ada1a379 100644
--- a/docs/narr/project.rst
+++ b/docs/narr/project.rst
@@ -74,6 +74,9 @@ In :ref:`installing_chapter` we called the virtualenv directory ``env``; the
following commands assume that our current working directory is the ``env``
directory.
+The below example uses the ``pcreate`` command to create a project with the
+``starter`` scaffold.
+
On UNIX:
.. code-block:: text
@@ -85,21 +88,7 @@ Or on Windows:
.. code-block:: text
> %VENV%\Scripts\pcreate -s starter MyProject
-
-The above command uses the ``pcreate`` command to create a project with the
-``starter`` scaffold. To use a different scaffold, such as
-``alchemy``, you'd just change the ``-s`` argument value. For example,
-on UNIX:
-
-.. code-block:: text
-
- $ $VENV/bin/pcreate -s alchemy MyProject
-
-Or on Windows:
-
-.. code-block:: text
-
- > %VENV%\Scripts\pcreate -s alchemy MyProject
+
Here's sample output from a run of ``pcreate`` on UNIX for a project we name
``MyProject``:
@@ -493,16 +482,16 @@ structure:
|-- myproject
| |-- __init__.py
| |-- static
- | | |-- favicon.ico
- | | |-- logo.png
- | | `-- pylons.css
+ | | |-- pyramid-16x16.png
+ | | |-- pyramid.png
+ | | |-- theme.css
+ | | `-- theme.min.css
| |-- templates
| | `-- mytemplate.pt
| |-- tests.py
| `-- views.py
|-- production.ini
|-- README.txt
- |-- setup.cfg
`-- setup.py
The ``MyProject`` :term:`Project`
@@ -525,9 +514,6 @@ describe, run, and test your application.
#. ``production.ini`` is a :term:`PasteDeploy` configuration file that can
be used to execute your application in a production configuration.
-#. ``setup.cfg`` is a :term:`setuptools` configuration file used by
- ``setup.py``.
-
#. ``MANIFEST.in`` is a :term:`distutils` "manifest" file, naming which files
should be included in a source distribution of the package when ``python
setup.py sdist`` is run.
@@ -756,24 +742,6 @@ named ``MyProject-0.1.tar.gz``. You can send this tarball to other people
who want to install and use your application.
.. index::
- single: setup.cfg
-
-``setup.cfg``
-~~~~~~~~~~~~~
-
-The ``setup.cfg`` file is a :term:`setuptools` configuration file. It
-contains various settings related to testing and internationalization:
-
-Our generated ``setup.cfg`` looks like this:
-
-.. literalinclude:: MyProject/setup.cfg
- :language: guess
- :linenos:
-
-The values in the default setup file allow various commonly-used
-internationalization commands and testing commands to work more smoothly.
-
-.. index::
single: package
The ``myproject`` :term:`Package`
@@ -908,15 +876,22 @@ returns the HTML in a :term:`response`.
a server restart to reload them. Production applications should use
``pyramid.reload_templates = False``.
-.. seealso:: See also :ref:`views_which_use_a_renderer` for more information
+.. seealso::
+
+ See also :ref:`views_which_use_a_renderer` for more information
about how views, renderers, and templates relate and cooperate.
-.. seealso:: Pyramid can also dynamically reload changed Python files. For
- more on this see :ref:`reloading_code`.
+.. seealso::
+
+ Pyramid can also dynamically reload changed Python files. See also
+ :ref:`reloading_code`.
+
+.. seealso::
-.. seealso:: The :ref:`debug_toolbar` provides interactive access to your
- application's internals and, should an exception occur, allows interactive
- access to traceback execution stack frames from the Python interpreter.
+ See also the :ref:`debug_toolbar`, which provides interactive access to
+ your application's internals and, should an exception occur, allows
+ interactive access to traceback execution stack frames from the Python
+ interpreter.
.. index::
single: static directory
diff --git a/docs/narr/resources.rst b/docs/narr/resources.rst
index f3ff1dc4c..6139154ff 100644
--- a/docs/narr/resources.rst
+++ b/docs/narr/resources.rst
@@ -673,8 +673,11 @@ Calling ``find_interface(b, Thing2)`` will return the ``b`` resource.
The second argument to find_interface may also be a :term:`interface` instead
of a class. If it is an interface, each resource in the lineage is checked
to see if the resource implements the specificed interface (instead of seeing
-if the resource is of a class). See also
-:ref:`resources_which_implement_interfaces`.
+if the resource is of a class).
+
+.. seealso::
+
+ See also :ref:`resources_which_implement_interfaces`.
.. index::
single: resource API functions
diff --git a/docs/narr/security.rst b/docs/narr/security.rst
index 9e6fb6c82..8db23a33b 100644
--- a/docs/narr/security.rst
+++ b/docs/narr/security.rst
@@ -113,9 +113,11 @@ authorization policies, it is an error to configure a Pyramid application
with an authentication policy but without the authorization policy or vice
versa. If you do this, you'll receive an error at application startup time.
-See also the :mod:`pyramid.authorization` and
-:mod:`pyramid.authentication` modules for alternate implementations
-of authorization and authentication policies.
+.. seealso::
+
+ See also the :mod:`pyramid.authorization` and
+ :mod:`pyramid.authentication` modules for alternate implementations of
+ authorization and authentication policies.
.. index::
single: permissions
@@ -495,8 +497,14 @@ is said to be *location-aware*. Location-aware objects define an
``__parent__`` attribute which points at their parent object. The
root object's ``__parent__`` is ``None``.
-See :ref:`location_module` for documentations of functions which use
-location-awareness. See also :ref:`location_aware`.
+.. seealso::
+
+ See also :ref:`location_module` for documentations of functions which use
+ location-awareness.
+
+.. seealso::
+
+ See also :ref:`location_aware`.
.. index::
single: forbidden view
diff --git a/docs/narr/sessions.rst b/docs/narr/sessions.rst
index fb5035373..8da743a01 100644
--- a/docs/narr/sessions.rst
+++ b/docs/narr/sessions.rst
@@ -158,10 +158,24 @@ Some gotchas:
Using Alternate Session Factories
---------------------------------
-At the time of this writing, exactly one project-endorsed alternate session
-factory exists named :term:`pyramid_redis_sessions`. It can be downloaded from
-PyPI. It uses the Redis database as a backend. It is the recommended
-persistent session solution at the time of this writing.
+The following session factories exist at the time of this writing.
+
+======================= ======= =============================
+Session Factory Backend Description
+======================= ======= =============================
+pyramid_redis_sessions_ Redis_ Server-side session library
+ for Pyramid, using Redis for
+ storage.
+pyramid_beaker_ Beaker_ Session factory for Pyramid
+ backed by the Beaker
+ sessioning system.
+======================= ======= =============================
+
+.. _pyramid_redis_sessions: https://pypi.python.org/pypi/pyramid_redis_sessions
+.. _Redis: http://redis.io/
+
+.. _pyramid_beaker: https://pypi.python.org/pypi/pyramid_beaker
+.. _Beaker: http://beaker.readthedocs.org/en/latest/
.. index::
single: session factory (custom)
diff --git a/docs/narr/startup.rst b/docs/narr/startup.rst
index 1affa1758..7b4a7ea08 100644
--- a/docs/narr/startup.rst
+++ b/docs/narr/startup.rst
@@ -123,7 +123,7 @@ Here's a high-level time-ordered overview of what happens when you press
populated by other methods run against the Configurator. The router is a
WSGI application.
-#. A :class:`~pyramid.events.ApplicationCreated` event is emitted (see
+#. An :class:`~pyramid.events.ApplicationCreated` event is emitted (see
:ref:`events_chapter` for more information about events).
#. Assuming there were no errors, the ``main`` function in ``myproject``
diff --git a/docs/narr/templates.rst b/docs/narr/templates.rst
index 00fc21634..460cda8ee 100644
--- a/docs/narr/templates.rst
+++ b/docs/narr/templates.rst
@@ -320,7 +320,11 @@ template renderer:
in Chameleon, not in Mako templates.
Similar renderer configuration can be done imperatively. See
-:ref:`views_which_use_a_renderer`. See also :ref:`built_in_renderers`.
+:ref:`views_which_use_a_renderer`.
+
+.. seealso::
+
+ See also :ref:`built_in_renderers`.
Although a renderer path is usually just a simple relative pathname, a path
named as a renderer can be absolute, starting with a slash on UNIX or a drive
@@ -446,21 +450,24 @@ Available Add-On Template System Bindings
The Pylons Project maintains several packages providing bindings to different
templating languages including the following:
-+------------------------------+------------------------------+
-| Template Language | Pyramid Bindings |
-+==============================+==============================+
-| Chameleon_ | pyramid_chameleon_ |
-+------------------------------+------------------------------+
-| Jinja2_ | pyramid_jinja2_ |
-+------------------------------+------------------------------+
-| Mako_ | pyramid_mako_ |
-+------------------------------+------------------------------+
++---------------------------+----------------------------+--------------------+
+| Template Language | Pyramid Bindings | Default Extensions |
++===========================+============================+====================+
+| Chameleon_ | pyramid_chameleon_ | .pt, .txt |
++---------------------------+----------------------------+--------------------+
+| Jinja2_ | pyramid_jinja2_ | .jinja2 |
++---------------------------+----------------------------+--------------------+
+| Mako_ | pyramid_mako_ | .mak, .mako |
++---------------------------+----------------------------+--------------------+
.. _Chameleon: http://chameleon.readthedocs.org/en/latest/
-.. _pyramid_chameleon: https://pypi.python.org/pypi/pyramid_chameleon
+.. _pyramid_chameleon:
+ http://docs.pylonsproject.org/projects/pyramid-chameleon/en/latest/
.. _Jinja2: http://jinja.pocoo.org/docs/
-.. _pyramid_jinja2: https://pypi.python.org/pypi/pyramid_jinja2
+.. _pyramid_jinja2:
+ http://docs.pylonsproject.org/projects/pyramid-jinja2/en/latest/
.. _Mako: http://www.makotemplates.org/
-.. _pyramid_mako: https://pypi.python.org/pypi/pyramid_mako
+.. _pyramid_mako:
+ http://docs.pylonsproject.org/projects/pyramid-mako/en/latest/
diff --git a/docs/narr/testing.rst b/docs/narr/testing.rst
index 5a5bf8fad..e001ad81c 100644
--- a/docs/narr/testing.rst
+++ b/docs/narr/testing.rst
@@ -319,8 +319,10 @@ registering resources at paths, registering event listeners, registering
views and view permissions, and classes representing "dummy" implementations
of a request and a resource.
-See also the various methods of the :term:`Configurator` documented in
-:ref:`configuration_module` that begin with the ``testing_`` prefix.
+.. seealso::
+
+ See also the various methods of the :term:`Configurator` documented in
+ :ref:`configuration_module` that begin with the ``testing_`` prefix.
.. index::
single: integration tests
diff --git a/docs/narr/urldispatch.rst b/docs/narr/urldispatch.rst
index 96ee5758e..87a962a9a 100644
--- a/docs/narr/urldispatch.rst
+++ b/docs/narr/urldispatch.rst
@@ -1183,9 +1183,10 @@ still easily do it by wrapping it in classmethod call.
Same will work with staticmethod, just use ``staticmethod`` instead of
``classmethod``.
+.. seealso::
-See also :class:`pyramid.interfaces.IRoute` for more API documentation about
-route objects.
+ See also :class:`pyramid.interfaces.IRoute` for more API documentation
+ about route objects.
.. index::
single: route factory
diff --git a/docs/narr/viewconfig.rst b/docs/narr/viewconfig.rst
index e5a2c1ade..a0feef8d7 100644
--- a/docs/narr/viewconfig.rst
+++ b/docs/narr/viewconfig.rst
@@ -118,8 +118,9 @@ Non-Predicate Arguments
``renderer``
Denotes the :term:`renderer` implementation which will be used to construct
- a :term:`response` from the associated view callable's return value. (see
- also :ref:`renderers_chapter`).
+ a :term:`response` from the associated view callable's return value.
+
+ .. seealso:: See also :ref:`renderers_chapter`.
This is either a single string term (e.g. ``json``) or a string implying a
path or :term:`asset specification` (e.g. ``templates/views.pt``) naming a
@@ -217,7 +218,21 @@ Non-Predicate Arguments
decorator function will be called with the view callable as a single
argument. The view callable it is passed will accept ``(context,
request)``. The decorator must return a replacement view callable which
- also accepts ``(context, request)``.
+ also accepts ``(context, request)``. The ``decorator`` may also be an
+ iterable of decorators, in which case they will be applied one after the
+ other to the view, in reverse order. For example::
+
+ @view_config(..., decorator=(decorator2, decorator1))
+ def myview(request):
+ ...
+
+ Is similar to doing::
+
+ @view_config(...)
+ @decorator2
+ @decorator1
+ def myview(request):
+ ...
``mapper``
A Python object or :term:`dotted Python name` which refers to a :term:`view
@@ -280,11 +295,14 @@ configured view.
*This is an advanced feature, not often used by "civilians"*.
``request_method``
- This value can be a string (typically ``"GET"``, ``"POST"``, ``"PUT"``,
- ``"DELETE"``, or ``"HEAD"``) representing an HTTP ``REQUEST_METHOD``. A view
- declaration with this argument ensures that the view will only be called
- when the request's ``method`` attribute (aka the ``REQUEST_METHOD`` of the
- WSGI environment) string matches the supplied value.
+ This value can be either a string (such as ``"GET"``, ``"POST"``,
+ ``"PUT"``, ``"DELETE"``, ``"HEAD"`` or ``"OPTIONS"``) representing an
+ HTTP ``REQUEST_METHOD``, or a tuple containing one or more of these
+ strings. A view declaration with this argument ensures that the
+ view will only be called when the ``method`` attribute of the
+ request (aka the ``REQUEST_METHOD`` of the WSGI environment) matches
+ a supplied value. Note that use of ``"GET"`` also implies that the
+ view will respond to ``"HEAD"`` as of Pyramid 1.4.
If ``request_method`` is not supplied, the view will be invoked regardless
of the ``REQUEST_METHOD`` of the :term:`WSGI` environment.
diff --git a/docs/narr/webob.rst b/docs/narr/webob.rst
index f0a4b5a0b..6a331e4bf 100644
--- a/docs/narr/webob.rst
+++ b/docs/narr/webob.rst
@@ -408,6 +408,8 @@ Here are some highlights:
The content type *not* including the ``charset`` parameter.
Typical use: ``response.content_type = 'text/html'``.
+ Default value: ``response.content_type = 'text/html'``.
+
``response.charset``:
The ``charset`` parameter of the content-type, it also informs
encoding in ``response.unicode_body``.
@@ -466,9 +468,12 @@ argument to the class; e.g.:
from pyramid.response import Response
response = Response(body='hello world!', content_type='text/plain')
-The status defaults to ``'200 OK'``. The content_type does not default to
-anything, though if you subclass :class:`pyramid.response.Response` and set
-``default_content_type`` you can override this behavior.
+The status defaults to ``'200 OK'``.
+
+The value of content_type defaults to
+``webob.response.Response.default_content_type``; which is `text/html`.
+You can subclass :class:`pyramid.response.Response` and set
+``default_content_type`` to override this behavior.
.. index::
single: exception responses