diff options
| author | Chris McDonough <chrism@agendaless.com> | 2010-10-13 23:55:28 +0000 |
|---|---|---|
| committer | Chris McDonough <chrism@agendaless.com> | 2010-10-13 23:55:28 +0000 |
| commit | 3dbdfef11d770a5b79df08c01258e070ee8b7f70 (patch) | |
| tree | cf8471ff18fa3378e03e23be5c100e63c9991791 /docs/tutorials | |
| parent | 5c7bdc471961fa6079d2b10330bd2d584cb6f35b (diff) | |
| download | pyramid-3dbdfef11d770a5b79df08c01258e070ee8b7f70.tar.gz pyramid-3dbdfef11d770a5b79df08c01258e070ee8b7f70.tar.bz2 pyramid-3dbdfef11d770a5b79df08c01258e070ee8b7f70.zip | |
merge tutorialfix branch
Diffstat (limited to 'docs/tutorials')
43 files changed, 407 insertions, 189 deletions
diff --git a/docs/tutorials/bfgwiki/background.rst b/docs/tutorials/bfgwiki/background.rst index c1d8d7477..072e2cfa1 100644 --- a/docs/tutorials/bfgwiki/background.rst +++ b/docs/tutorials/bfgwiki/background.rst @@ -13,6 +13,6 @@ To code along with this tutorial, the developer will need a UNIX machine with development tools (Mac OS X with XCode, any Linux or BSD variant, etc) *or* he will need a Windows system of any kind. -This tutorial targets :mod:`repoze.bfg` version 1.2. +This tutorial targets :mod:`repoze.bfg` version 1.3. Have fun! diff --git a/docs/tutorials/bfgwiki/installation.rst b/docs/tutorials/bfgwiki/installation.rst index 4f1e5a34f..e58d73493 100644 --- a/docs/tutorials/bfgwiki/installation.rst +++ b/docs/tutorials/bfgwiki/installation.rst @@ -17,30 +17,30 @@ whether you're using UNIX or Windows. Preparation, UNIX ----------------- -#. If you don't already have a Python 2.5 interpreter installed on - your system, obtain, install, or find `Python 2.5 - <http://python.org/download/releases/2.5.4/>`_ for your system. +#. If you don't already have a Python 2.6 interpreter installed on + your system, obtain, install, or find `Python 2.6 + <http://python.org/download/releases/2.6.6/>`_ for your system. #. Install the latest `setuptools` into the Python you obtained/installed/found in the step above: download `ez_setup.py <http://peak.telecommunity.com/dist/ez_setup.py>`_ and run it using - the ``python`` interpreter of your Python 2.5 installation: + the ``python`` interpreter of your Python 2.6 installation: .. code-block:: bash - $ /path/to/my/Python-2.5/bin/python ez_setup.py + $ /path/to/my/Python-2.6/bin/python ez_setup.py #. Use that Python's `bin/easy_install` to install `virtualenv`: .. code-block:: bash - $ /path/to/my/Python-2.5/bin/easy_install virtualenv + $ /path/to/my/Python-2.6/bin/easy_install virtualenv #. Use that Python's virtualenv to make a workspace: .. code-block:: bash - $ path/to/my/Python-25/bin/virtualenv --no-site-packages bigfntut + $ path/to/my/Python-2.6/bin/virtualenv --no-site-packages bigfntut #. Switch to the ``bigfntut`` directory: @@ -72,30 +72,30 @@ Preparation, UNIX Preparation, Windows -------------------- -#. Install, or find `Python 2.5 - <http://python.org/download/releases/2.5.4/>`_ for your system. +#. Install, or find `Python 2.6 + <http://python.org/download/releases/2.6.6/>`_ for your system. #. Install the latest `setuptools` into the Python you obtained/installed/found in the step above: download `ez_setup.py <http://peak.telecommunity.com/dist/ez_setup.py>`_ and run it using - the ``python`` interpreter of your Python 2.5 installation using a + the ``python`` interpreter of your Python 2.6 installation using a command prompt: .. code-block:: bat - c:\> c:\Python25\python ez_setup.py + c:\> c:\Python26\python ez_setup.py #. Use that Python's `bin/easy_install` to install `virtualenv`: .. code-block:: bat - c:\> c:\Python25\Scripts\easy_install virtualenv + c:\> c:\Python26\Scripts\easy_install virtualenv #. Use that Python's virtualenv to make a workspace: .. code-block:: bat - c:\> c:\Python25\Scripts\virtualenv --no-site-packages bigfntut + c:\> c:\Python26\Scripts\virtualenv --no-site-packages bigfntut #. Switch to the ``bigfntut`` directory: diff --git a/docs/tutorials/bfgwiki/src/authorization/setup.cfg b/docs/tutorials/bfgwiki/src/authorization/setup.cfg index 05d3f2c44..3d7ea6e23 100644 --- a/docs/tutorials/bfgwiki/src/authorization/setup.cfg +++ b/docs/tutorials/bfgwiki/src/authorization/setup.cfg @@ -1,2 +1,28 @@ -[easy_install] -index_url = http://dist.repoze.org/bfgsite/simple +[nosetests] +match=^test +nocapture=1 +cover-package=tutorial +with-coverage=1 +cover-erase=1 + +[compile_catalog] +directory = tutorial/locale +domain = tutorial +statistics = true + +[extract_messages] +add_comments = TRANSLATORS: +output_file = tutorial/locale/tutorial.pot +width = 80 + +[init_catalog] +domain = tutorial +input_file = tutorial/locale/tutorial.pot +output_dir = tutorial/locale + +[update_catalog] +domain = tutorial +input_file = tutorial/locale/tutorial.pot +output_dir = tutorial/locale +previous = true + diff --git a/docs/tutorials/bfgwiki/src/basiclayout/setup.cfg b/docs/tutorials/bfgwiki/src/basiclayout/setup.cfg index 42614578b..3d7ea6e23 100644 --- a/docs/tutorials/bfgwiki/src/basiclayout/setup.cfg +++ b/docs/tutorials/bfgwiki/src/basiclayout/setup.cfg @@ -1,3 +1,28 @@ -[easy_install] -index_url = http://dist.repoze.org/bfgsite/simple +[nosetests] +match=^test +nocapture=1 +cover-package=tutorial +with-coverage=1 +cover-erase=1 + +[compile_catalog] +directory = tutorial/locale +domain = tutorial +statistics = true + +[extract_messages] +add_comments = TRANSLATORS: +output_file = tutorial/locale/tutorial.pot +width = 80 + +[init_catalog] +domain = tutorial +input_file = tutorial/locale/tutorial.pot +output_dir = tutorial/locale + +[update_catalog] +domain = tutorial +input_file = tutorial/locale/tutorial.pot +output_dir = tutorial/locale +previous = true diff --git a/docs/tutorials/bfgwiki/src/models/setup.cfg b/docs/tutorials/bfgwiki/src/models/setup.cfg index 42614578b..3d7ea6e23 100644 --- a/docs/tutorials/bfgwiki/src/models/setup.cfg +++ b/docs/tutorials/bfgwiki/src/models/setup.cfg @@ -1,3 +1,28 @@ -[easy_install] -index_url = http://dist.repoze.org/bfgsite/simple +[nosetests] +match=^test +nocapture=1 +cover-package=tutorial +with-coverage=1 +cover-erase=1 + +[compile_catalog] +directory = tutorial/locale +domain = tutorial +statistics = true + +[extract_messages] +add_comments = TRANSLATORS: +output_file = tutorial/locale/tutorial.pot +width = 80 + +[init_catalog] +domain = tutorial +input_file = tutorial/locale/tutorial.pot +output_dir = tutorial/locale + +[update_catalog] +domain = tutorial +input_file = tutorial/locale/tutorial.pot +output_dir = tutorial/locale +previous = true diff --git a/docs/tutorials/bfgwiki/src/viewdecorators/setup.cfg b/docs/tutorials/bfgwiki/src/viewdecorators/setup.cfg index 42614578b..3d7ea6e23 100644 --- a/docs/tutorials/bfgwiki/src/viewdecorators/setup.cfg +++ b/docs/tutorials/bfgwiki/src/viewdecorators/setup.cfg @@ -1,3 +1,28 @@ -[easy_install] -index_url = http://dist.repoze.org/bfgsite/simple +[nosetests] +match=^test +nocapture=1 +cover-package=tutorial +with-coverage=1 +cover-erase=1 + +[compile_catalog] +directory = tutorial/locale +domain = tutorial +statistics = true + +[extract_messages] +add_comments = TRANSLATORS: +output_file = tutorial/locale/tutorial.pot +width = 80 + +[init_catalog] +domain = tutorial +input_file = tutorial/locale/tutorial.pot +output_dir = tutorial/locale + +[update_catalog] +domain = tutorial +input_file = tutorial/locale/tutorial.pot +output_dir = tutorial/locale +previous = true diff --git a/docs/tutorials/bfgwiki/src/views/setup.cfg b/docs/tutorials/bfgwiki/src/views/setup.cfg index 42614578b..3d7ea6e23 100644 --- a/docs/tutorials/bfgwiki/src/views/setup.cfg +++ b/docs/tutorials/bfgwiki/src/views/setup.cfg @@ -1,3 +1,28 @@ -[easy_install] -index_url = http://dist.repoze.org/bfgsite/simple +[nosetests] +match=^test +nocapture=1 +cover-package=tutorial +with-coverage=1 +cover-erase=1 + +[compile_catalog] +directory = tutorial/locale +domain = tutorial +statistics = true + +[extract_messages] +add_comments = TRANSLATORS: +output_file = tutorial/locale/tutorial.pot +width = 80 + +[init_catalog] +domain = tutorial +input_file = tutorial/locale/tutorial.pot +output_dir = tutorial/locale + +[update_catalog] +domain = tutorial +input_file = tutorial/locale/tutorial.pot +output_dir = tutorial/locale +previous = true diff --git a/docs/tutorials/bfgwiki2/background.rst b/docs/tutorials/bfgwiki2/background.rst index 09dc8de64..aed9b875d 100644 --- a/docs/tutorials/bfgwiki2/background.rst +++ b/docs/tutorials/bfgwiki2/background.rst @@ -12,6 +12,6 @@ To code along with this tutorial, the developer will need a UNIX machine with development tools (Mac OS X with XCode, any Linux or BSD variant, etc) *or* he will need a Windows system of any kind. -This tutorial is targeted at :mod:`repoze.bfg` version 1.2. +This tutorial is targeted at :mod:`repoze.bfg` version 1.3. Have fun! diff --git a/docs/tutorials/bfgwiki2/basiclayout.rst b/docs/tutorials/bfgwiki2/basiclayout.rst index e09316fab..bf458c844 100644 --- a/docs/tutorials/bfgwiki2/basiclayout.rst +++ b/docs/tutorials/bfgwiki2/basiclayout.rst @@ -31,7 +31,7 @@ following: #. *Line 1*. The root ``<configure>`` element, using the ``http://namespaces.repoze.org/bfg`` namespace. -#. *Line 4*. Boilerplate, the comment explains. +#. *Lines 3-4*. Boilerplate, the comment explains. #. *Lines 6-11*. Register a ``<route>`` :term:`route configuration` that will be used when the URL is ``/``. Since this ``<route>`` @@ -56,6 +56,8 @@ following: ``/foo`` in ``/static/foo``) will be used to compose a path to a static file resource, such as a CSS file. +#. *Line 18*. The closing ``</configure>`` tag. + Content Models with ``models.py`` --------------------------------- @@ -71,33 +73,28 @@ Here is the source for ``models.py``: :linenos: :language: py -#. *Lines 1-16*. Imports to support later code. +#. *Lines 1-14*. Imports to support later code. -#. *Line 18*. We set up a SQLAlchemy "DBSession" object here. We +#. *Line 16*. We set up a SQLAlchemy "DBSession" object here. We specify that we'd like to use the "ZopeTransactionExtension". This extension is an extension which allows us to use a *transaction manager* instead of controlling commits and aborts to database operations by hand. -#. *Line 21*. Set up a SQLAlchemy metadata object. - -#. *Lines 23-25*. A model class named ``Model``. It has an - ``__init__`` that takes a single argument (``name``). It stores a - single attribute named ``name``. - -#. *Lines 27-32*. A SQLAlchemy ``Table`` declaration named - ``models_table`` which we'll use later to map onto our ``Model`` - class. +#. *Line 17*. We create a declarative ``Base`` object to use as a + base class for our model. -#. *Line 34*. We map our ``models_table`` table to our Models class - here. This makes an association between the ``Model`` class and - the ``models`` table in the database, as far as SQLAlchemy is - concerned. +#. *Lines 19-27*. A model class named ``MyModel``. It has an + ``__init__`` that takes a two arguments (``name``, and ``value``). + It stores these values as ``self.name`` and ``self.value`` within + the ``__init__`` function itself. The ``MyModel`` class also has a + ``__tablename__`` attribute. This informs SQLAlchemy which table + to use to store the data representing instances of this class. -#. *Lines 36-41*. A function named ``populate`` which adds a single +#. *Lines 29-34*. A function named ``populate`` which adds a single model instance into our SQL storage and commits a transaction. -#. *Lines 43-51*. A function named ``initialize_sql`` which sets up +#. *Lines 36-44*. A function named ``initialize_sql`` which sets up an actual SQL database and binds it to our SQLAlchemy DBSession object. It also calls the ``populate`` function, to do initial database population. @@ -118,21 +115,32 @@ function within the file named ``run.py``: #. *Lines 1-3*. Imports to support later code. -#. *Lines 11-14*. Get the database configuration string from the - ``tutorial.ini`` file's ``[app:sql]`` section. This will be a URI +#. *Line 12*. Obtain the ``configure_zcml`` setting from a value in + the ``tutorial.ini`` file's ``[app:sqlalchemy]`` section. If it + doesn't exist in the configuration file, default to + ``configure.zcml``. + +#. *Lines 13-15*. Get the database configuration string from the + ``tutorial.ini`` file's ``[app:sqlalchemy]`` section. This will be a URI (something like ``sqlite://``). -#. Line *15*. We initialize our SQL database using SQLAlchemy, passing - it the db string. +#. *Line 16*. Get the database echo settingf rom ``tutorial.ini`` + file's ``[app:sqlalchemy]`` section. This will either be ``true`` + or ``false``. If ``true``, the application will print SQL to the + console as it is generated and run by SQLAlchemy. By default, it + is false. + +#. Line *17*. We initialize our SQL database using SQLAlchemy, passing + it the db string and a variant of the db_echo value. -#. *Line 16*. We construct a :term:`Configurator`. ``settings`` is +#. *Line 18*. We construct a :term:`Configurator`. ``settings`` is passed as a keyword argument with the dictionary values passed by PasteDeploy as the ``settings`` argument. This will be a dictionary of settings parsed by PasteDeploy, which contains deployment-related values such as ``reload_templates``, ``db_string``, etc. -#. *Lines 17-20*. We then load a ZCML file to do application +#. *Lines 19-22*. We then load a ZCML file to do application configuration, and use the :meth:`repoze.bfg.configuration.Configurator.make_wsgi_app` method to return a :term:`WSGI` application. diff --git a/docs/tutorials/bfgwiki2/definingmodels.rst b/docs/tutorials/bfgwiki2/definingmodels.rst index 03c97259f..378f7beda 100644 --- a/docs/tutorials/bfgwiki2/definingmodels.rst +++ b/docs/tutorials/bfgwiki2/definingmodels.rst @@ -75,4 +75,4 @@ that ends with this exception: .. code-block:: text - ImportError: cannot import name Model + ImportError: cannot import name MyModel diff --git a/docs/tutorials/bfgwiki2/installation.rst b/docs/tutorials/bfgwiki2/installation.rst index 4c8dc7080..1225bb18a 100644 --- a/docs/tutorials/bfgwiki2/installation.rst +++ b/docs/tutorials/bfgwiki2/installation.rst @@ -22,30 +22,30 @@ Preparation, UNIX manager. For example, on a Debian Linux system, do ``sudo apt-get install libsqlite3-dev``. -#. If you don't already have a Python 2.5 interpreter installed on - your system, obtain, install, or find `Python 2.5 - <http://python.org/download/releases/2.5.4/>`_ for your system. +#. If you don't already have a Python 2.6 interpreter installed on + your system, obtain, install, or find `Python 2.6 + <http://www.python.org/download/releases/2.6.6/>`_ for your system. #. Install the latest `setuptools` into the Python you obtained/installed/found in the step above: download `ez_setup.py <http://peak.telecommunity.com/dist/ez_setup.py>`_ and run it using - the ``python`` interpreter of your Python 2.5 installation: + the ``python`` interpreter of your Python 2.6 installation: .. code-block:: text - $ /path/to/my/Python-2.5/bin/python ez_setup.py + $ /path/to/my/Python-2.6/bin/python ez_setup.py #. Use that Python's `bin/easy_install` to install `virtualenv`: .. code-block:: text - $ /path/to/my/Python-2.5/bin/easy_install virtualenv + $ /path/to/my/Python-2.6/bin/easy_install virtualenv #. Use that Python's virtualenv to make a workspace: .. code-block:: text - $ path/to/my/Python-25/bin/virtualenv --no-site-packages bigfntut + $ path/to/my/Python-2.6/bin/virtualenv --no-site-packages bigfntut #. Switch to the ``bigfntut`` directory: @@ -61,8 +61,8 @@ Preparation, UNIX .. code-block:: text - $ bin/easy_install -i http://dist.repoze.org/bfg/current/simple \ - repoze.bfg + $ bin/easy_install -i http://dist.repoze.org/bfg/current/simple + repoze.bfg #. Use ``easy_install`` to install various packages from PyPI. @@ -74,30 +74,30 @@ Preparation, UNIX Preparation, Windows -------------------- -#. Install, or find `Python 2.5 - <http://python.org/download/releases/2.5.4/>`_ for your system. +#. Install, or find `Python 2.6.6 + <http://python.org/download/releases/2.6.6/>`_ for your system. #. Install the latest `setuptools` into the Python you obtained/installed/found in the step above: download `ez_setup.py <http://peak.telecommunity.com/dist/ez_setup.py>`_ and run it using - the ``python`` interpreter of your Python 2.5 installation using a + the ``python`` interpreter of your Python 2.6 installation using a command prompt: .. code-block:: text - c:\> c:\Python25\python ez_setup.py + c:\> c:\Python26\python ez_setup.py #. Use that Python's `bin/easy_install` to install `virtualenv`: .. code-block:: text - c:\> c:\Python25\Scripts\easy_install virtualenv + c:\> c:\Python26\Scripts\easy_install virtualenv #. Use that Python's virtualenv to make a workspace: .. code-block:: text - c:\> c:\Python25\Scripts\virtualenv --no-site-packages bigfntut + c:\> c:\Python26\Scripts\virtualenv --no-site-packages bigfntut #. Switch to the ``bigfntut`` directory: diff --git a/docs/tutorials/bfgwiki2/src/authorization/CHANGES.txt b/docs/tutorials/bfgwiki2/src/authorization/CHANGES.txt index ffa255da8..35a34f332 100644 --- a/docs/tutorials/bfgwiki2/src/authorization/CHANGES.txt +++ b/docs/tutorials/bfgwiki2/src/authorization/CHANGES.txt @@ -1,4 +1,4 @@ 0.0 --- -- Initial version +- Initial version diff --git a/docs/tutorials/bfgwiki2/src/authorization/setup.cfg b/docs/tutorials/bfgwiki2/src/authorization/setup.cfg index 56fe3be14..23b2ad983 100644 --- a/docs/tutorials/bfgwiki2/src/authorization/setup.cfg +++ b/docs/tutorials/bfgwiki2/src/authorization/setup.cfg @@ -1,8 +1,27 @@ -[easy_install] -index_url = http://dist.repoze.org/bfgsite/simple - [nosetests] +match=^test nocapture=1 cover-package=tutorial with-coverage=1 cover-erase=1 + +[compile_catalog] +directory = tutorial/locale +domain = tutorial +statistics = true + +[extract_messages] +add_comments = TRANSLATORS: +output_file = tutorial/locale/tutorial.pot +width = 80 + +[init_catalog] +domain = tutorial +input_file = tutorial/locale/tutorial.pot +output_dir = tutorial/locale + +[update_catalog] +domain = tutorial +input_file = tutorial/locale/tutorial.pot +output_dir = tutorial/locale +previous = true diff --git a/docs/tutorials/bfgwiki2/src/authorization/tutorial.ini b/docs/tutorials/bfgwiki2/src/authorization/tutorial.ini index d89616316..85f131c2e 100644 --- a/docs/tutorials/bfgwiki2/src/authorization/tutorial.ini +++ b/docs/tutorials/bfgwiki2/src/authorization/tutorial.ini @@ -1,18 +1,21 @@ [DEFAULT] debug = true -[app:sql] +[app:sqlalchemy] use = egg:tutorial#app reload_templates = true debug_authorization = false debug_notfound = false +debug_templates = true +default_locale_name = en db_string = sqlite:///%(here)s/tutorial.db +db_echo = false [pipeline:main] pipeline = egg:Paste#evalerror egg:repoze.tm2#tm - sql + sqlalchemy [server:main] use = egg:Paste#http diff --git a/docs/tutorials/bfgwiki2/src/authorization/tutorial/configure.zcml b/docs/tutorials/bfgwiki2/src/authorization/tutorial/configure.zcml index 213573d7a..0fd79b4e3 100644 --- a/docs/tutorials/bfgwiki2/src/authorization/tutorial/configure.zcml +++ b/docs/tutorials/bfgwiki2/src/authorization/tutorial/configure.zcml @@ -4,7 +4,7 @@ <include package="repoze.bfg.includes" /> <static - pattern="templates/static" + path="templates/static" name="static" /> diff --git a/docs/tutorials/bfgwiki2/src/authorization/tutorial/models.py b/docs/tutorials/bfgwiki2/src/authorization/tutorial/models.py index 607aa6fde..5f5dba0b1 100644 --- a/docs/tutorials/bfgwiki2/src/authorization/tutorial/models.py +++ b/docs/tutorials/bfgwiki2/src/authorization/tutorial/models.py @@ -1,22 +1,21 @@ import transaction +from repoze.bfg.security import Allow +from repoze.bfg.security import Everyone + from sqlalchemy import create_engine from sqlalchemy import Column from sqlalchemy import Integer from sqlalchemy import Text from sqlalchemy.exc import IntegrityError +from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import scoped_session from sqlalchemy.orm import sessionmaker -from sqlalchemy.ext.declarative import declarative_base - from zope.sqlalchemy import ZopeTransactionExtension -from repoze.bfg.security import Allow -from repoze.bfg.security import Everyone - DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension())) Base = declarative_base() @@ -31,14 +30,8 @@ class Page(Base): self.name = name self.data = data -class RootFactory(object): - __acl__ = [ (Allow, Everyone, 'view'), - (Allow, 'group:editors', 'edit') ] - def __init__(self, request): - self.__dict__.update(request.matchdict) - -def initialize_sql(db, echo=False): - engine = create_engine(db, echo=echo) +def initialize_sql(db_string, echo=False): + engine = create_engine(db_string, echo=echo) DBSession.configure(bind=engine) Base.metadata.bind = engine Base.metadata.create_all(engine) @@ -50,3 +43,9 @@ def initialize_sql(db, echo=False): except IntegrityError: # already created pass + +class RootFactory(object): + __acl__ = [ (Allow, Everyone, 'view'), + (Allow, 'group:editors', 'edit') ] + def __init__(self, request): + self.__dict__.update(request.matchdict) diff --git a/docs/tutorials/bfgwiki2/src/authorization/tutorial/run.py b/docs/tutorials/bfgwiki2/src/authorization/tutorial/run.py index 2bf8a8de7..d018595df 100644 --- a/docs/tutorials/bfgwiki2/src/authorization/tutorial/run.py +++ b/docs/tutorials/bfgwiki2/src/authorization/tutorial/run.py @@ -1,4 +1,5 @@ from repoze.bfg.configuration import Configurator +from paste.deploy.converters import asbool from tutorial.models import initialize_sql from tutorial.models import RootFactory @@ -9,13 +10,15 @@ def app(global_config, **settings): It is usually called by the PasteDeploy framework during ``paster serve``. """ + zcml_file = settings.get('configure_zcml', 'configure.zcml') db_string = settings.get('db_string') if db_string is None: - raise ValueError("No 'db_string' value in application " - "configuration.") - initialize_sql(db_string) + raise ValueError("No 'db_string' value in application configuration.") + db_echo = settings.get('db_echo', 'false') + initialize_sql(db_string, asbool(db_echo)) config = Configurator(settings=settings, root_factory=RootFactory) config.begin() - config.load_zcml('configure.zcml') + config.load_zcml(zcml_file) config.end() return config.make_wsgi_app() + diff --git a/docs/tutorials/bfgwiki2/src/authorization/tutorial/templates/mytemplate.pt b/docs/tutorials/bfgwiki2/src/authorization/tutorial/templates/mytemplate.pt index 767252554..2aedcad9f 100644 --- a/docs/tutorials/bfgwiki2/src/authorization/tutorial/templates/mytemplate.pt +++ b/docs/tutorials/bfgwiki2/src/authorization/tutorial/templates/mytemplate.pt @@ -48,31 +48,31 @@ <h2><code>repoze.bfg</code> links</h2> <ul> <li><a - href="http://docs.repoze.org/bfg/#narrative-documentation">Narrative + href="http://docs.repoze.org/bfg/current/#narrative-documentation">Narrative Documentation</a> </li> <li> <a - href="http://docs.repoze.org/bfg/#api-documentation">API + href="http://docs.repoze.org/bfg/current/#api-documentation">API Documentation</a> </li> <li> <a - href="http://docs.repoze.org/bfg/#tutorials">Tutorials</a> + href="http://docs.repoze.org/bfg/current/#tutorials">Tutorials</a> </li> <li> <a - href="http://docs.repoze.org/bfg/#change-history">Change + href="http://docs.repoze.org/bfg/current/#change-history">Change History</a> </li> <li> <a - href="http://docs.repoze.org/bfg/#sample-applications">Sample + href="http://docs.repoze.org/bfg/current/#sample-applications">Sample Applications</a> </li> <li> <a - href="http://docs.repoze.org/bfg/#support-and-development">Support + href="http://docs.repoze.org/bfg/current/#support-and-development">Support and Development</a> </li> <li> diff --git a/docs/tutorials/bfgwiki2/src/basiclayout/CHANGES.txt b/docs/tutorials/bfgwiki2/src/basiclayout/CHANGES.txt index e14f633ab..35a34f332 100644 --- a/docs/tutorials/bfgwiki2/src/basiclayout/CHANGES.txt +++ b/docs/tutorials/bfgwiki2/src/basiclayout/CHANGES.txt @@ -1,5 +1,4 @@ 0.0 --- -- Initial version - +- Initial version diff --git a/docs/tutorials/bfgwiki2/src/basiclayout/setup.cfg b/docs/tutorials/bfgwiki2/src/basiclayout/setup.cfg index 56fe3be14..23b2ad983 100644 --- a/docs/tutorials/bfgwiki2/src/basiclayout/setup.cfg +++ b/docs/tutorials/bfgwiki2/src/basiclayout/setup.cfg @@ -1,8 +1,27 @@ -[easy_install] -index_url = http://dist.repoze.org/bfgsite/simple - [nosetests] +match=^test nocapture=1 cover-package=tutorial with-coverage=1 cover-erase=1 + +[compile_catalog] +directory = tutorial/locale +domain = tutorial +statistics = true + +[extract_messages] +add_comments = TRANSLATORS: +output_file = tutorial/locale/tutorial.pot +width = 80 + +[init_catalog] +domain = tutorial +input_file = tutorial/locale/tutorial.pot +output_dir = tutorial/locale + +[update_catalog] +domain = tutorial +input_file = tutorial/locale/tutorial.pot +output_dir = tutorial/locale +previous = true diff --git a/docs/tutorials/bfgwiki2/src/basiclayout/setup.py b/docs/tutorials/bfgwiki2/src/basiclayout/setup.py index 764e8c0ea..fae50a1ee 100644 --- a/docs/tutorials/bfgwiki2/src/basiclayout/setup.py +++ b/docs/tutorials/bfgwiki2/src/basiclayout/setup.py @@ -13,7 +13,6 @@ requires = [ 'transaction', 'repoze.tm2', 'zope.sqlalchemy', - 'docutils' ] if sys.version_info[:3] < (2,5,0): diff --git a/docs/tutorials/bfgwiki2/src/basiclayout/tutorial.ini b/docs/tutorials/bfgwiki2/src/basiclayout/tutorial.ini index 1f8a5ccce..73b5ed9a4 100644 --- a/docs/tutorials/bfgwiki2/src/basiclayout/tutorial.ini +++ b/docs/tutorials/bfgwiki2/src/basiclayout/tutorial.ini @@ -1,17 +1,20 @@ [DEFAULT] debug = true -[app:sql] +[app:sqlalchemy] use = egg:tutorial#app reload_templates = true debug_authorization = false debug_notfound = false +debug_templates = true +default_locale_name = en db_string = sqlite:///%(here)s/tutorial.db +db_echo = false [pipeline:main] pipeline = egg:repoze.tm2#tm - sql + sqlalchemy [server:main] use = egg:Paste#http diff --git a/docs/tutorials/bfgwiki2/src/basiclayout/tutorial/configure.zcml b/docs/tutorials/bfgwiki2/src/basiclayout/tutorial/configure.zcml index f04eec9b4..6d16bd089 100644 --- a/docs/tutorials/bfgwiki2/src/basiclayout/tutorial/configure.zcml +++ b/docs/tutorials/bfgwiki2/src/basiclayout/tutorial/configure.zcml @@ -3,7 +3,7 @@ <!-- this must be included for the view declarations to work --> <include package="repoze.bfg.includes" /> - <route + <route pattern="" name="home" view=".views.my_view" @@ -11,8 +11,8 @@ /> <static - pattern="templates/static" name="static" + path="templates/static" /> </configure> diff --git a/docs/tutorials/bfgwiki2/src/basiclayout/tutorial/models.py b/docs/tutorials/bfgwiki2/src/basiclayout/tutorial/models.py index 456a02a4f..a1726ebf4 100644 --- a/docs/tutorials/bfgwiki2/src/basiclayout/tutorial/models.py +++ b/docs/tutorials/bfgwiki2/src/basiclayout/tutorial/models.py @@ -3,48 +3,41 @@ import transaction from sqlalchemy import create_engine from sqlalchemy import Column from sqlalchemy import Integer -from sqlalchemy import MetaData -from sqlalchemy import Table from sqlalchemy import Unicode from sqlalchemy.exc import IntegrityError +from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import scoped_session from sqlalchemy.orm import sessionmaker -from sqlalchemy.orm import mapper from zope.sqlalchemy import ZopeTransactionExtension -DBSession = scoped_session( - sessionmaker(extension=ZopeTransactionExtension())) +DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension())) +Base = declarative_base() -metadata = MetaData() +class MyModel(Base): + __tablename__ = 'models' + id = Column(Integer, primary_key=True) + name = Column(Unicode(255), unique=True) + value = Column(Integer) -class Model(object): - def __init__(self, name=''): + def __init__(self, name, value): self.name = name - -models_table = Table( - 'models', - metadata, - Column('id', Integer, primary_key=True), - Column('name', Unicode(255), unique=True), - ) - -models_mapper = mapper(Model, models_table) + self.value = value def populate(): session = DBSession() - model = Model(name=u'root') + model = MyModel(name=u'root',value=55) session.add(model) session.flush() transaction.commit() -def initialize_sql(db_string, echo=False): - engine = create_engine(db_string, echo=echo) +def initialize_sql(db_string, db_echo=False): + engine = create_engine(db_string, echo=db_echo) DBSession.configure(bind=engine) - metadata.bind = engine - metadata.create_all(engine) + Base.metadata.bind = engine + Base.metadata.create_all(engine) try: populate() except IntegrityError: diff --git a/docs/tutorials/bfgwiki2/src/basiclayout/tutorial/run.py b/docs/tutorials/bfgwiki2/src/basiclayout/tutorial/run.py index 8e1249eab..47eb79e87 100644 --- a/docs/tutorials/bfgwiki2/src/basiclayout/tutorial/run.py +++ b/docs/tutorials/bfgwiki2/src/basiclayout/tutorial/run.py @@ -1,4 +1,5 @@ from repoze.bfg.configuration import Configurator +from paste.deploy.converters import asbool from tutorial.models import initialize_sql @@ -8,13 +9,15 @@ def app(global_config, **settings): It is usually called by the PasteDeploy framework during ``paster serve``. """ + zcml_file = settings.get('configure_zcml', 'configure.zcml') db_string = settings.get('db_string') if db_string is None: - raise ValueError("No 'db_string' value in application " - "configuration.") - initialize_sql(db_string) + raise ValueError("No 'db_string' value in application configuration.") + db_echo = settings.get('db_echo', 'false') + initialize_sql(db_string, asbool(db_echo)) config = Configurator(settings=settings) config.begin() - config.load_zcml('configure.zcml') + config.load_zcml(zcml_file) config.end() return config.make_wsgi_app() + diff --git a/docs/tutorials/bfgwiki2/src/basiclayout/tutorial/templates/mytemplate.pt b/docs/tutorials/bfgwiki2/src/basiclayout/tutorial/templates/mytemplate.pt index 767252554..2aedcad9f 100644 --- a/docs/tutorials/bfgwiki2/src/basiclayout/tutorial/templates/mytemplate.pt +++ b/docs/tutorials/bfgwiki2/src/basiclayout/tutorial/templates/mytemplate.pt @@ -48,31 +48,31 @@ <h2><code>repoze.bfg</code> links</h2> <ul> <li><a - href="http://docs.repoze.org/bfg/#narrative-documentation">Narrative + href="http://docs.repoze.org/bfg/current/#narrative-documentation">Narrative Documentation</a> </li> <li> <a - href="http://docs.repoze.org/bfg/#api-documentation">API + href="http://docs.repoze.org/bfg/current/#api-documentation">API Documentation</a> </li> <li> <a - href="http://docs.repoze.org/bfg/#tutorials">Tutorials</a> + href="http://docs.repoze.org/bfg/current/#tutorials">Tutorials</a> </li> <li> <a - href="http://docs.repoze.org/bfg/#change-history">Change + href="http://docs.repoze.org/bfg/current/#change-history">Change History</a> </li> <li> <a - href="http://docs.repoze.org/bfg/#sample-applications">Sample + href="http://docs.repoze.org/bfg/current/#sample-applications">Sample Applications</a> </li> <li> <a - href="http://docs.repoze.org/bfg/#support-and-development">Support + href="http://docs.repoze.org/bfg/current/#support-and-development">Support and Development</a> </li> <li> diff --git a/docs/tutorials/bfgwiki2/src/basiclayout/tutorial/views.py b/docs/tutorials/bfgwiki2/src/basiclayout/tutorial/views.py index dfb628269..e550e3257 100644 --- a/docs/tutorials/bfgwiki2/src/basiclayout/tutorial/views.py +++ b/docs/tutorials/bfgwiki2/src/basiclayout/tutorial/views.py @@ -1,7 +1,7 @@ from tutorial.models import DBSession -from tutorial.models import Model +from tutorial.models import MyModel def my_view(request): dbsession = DBSession() - root = dbsession.query(Model).filter(Model.name==u'root').first() + root = dbsession.query(MyModel).filter(MyModel.name==u'root').first() return {'root':root, 'project':'tutorial'} diff --git a/docs/tutorials/bfgwiki2/src/models/CHANGES.txt b/docs/tutorials/bfgwiki2/src/models/CHANGES.txt index e14f633ab..35a34f332 100644 --- a/docs/tutorials/bfgwiki2/src/models/CHANGES.txt +++ b/docs/tutorials/bfgwiki2/src/models/CHANGES.txt @@ -1,5 +1,4 @@ 0.0 --- -- Initial version - +- Initial version diff --git a/docs/tutorials/bfgwiki2/src/models/setup.cfg b/docs/tutorials/bfgwiki2/src/models/setup.cfg index 56fe3be14..23b2ad983 100644 --- a/docs/tutorials/bfgwiki2/src/models/setup.cfg +++ b/docs/tutorials/bfgwiki2/src/models/setup.cfg @@ -1,8 +1,27 @@ -[easy_install] -index_url = http://dist.repoze.org/bfgsite/simple - [nosetests] +match=^test nocapture=1 cover-package=tutorial with-coverage=1 cover-erase=1 + +[compile_catalog] +directory = tutorial/locale +domain = tutorial +statistics = true + +[extract_messages] +add_comments = TRANSLATORS: +output_file = tutorial/locale/tutorial.pot +width = 80 + +[init_catalog] +domain = tutorial +input_file = tutorial/locale/tutorial.pot +output_dir = tutorial/locale + +[update_catalog] +domain = tutorial +input_file = tutorial/locale/tutorial.pot +output_dir = tutorial/locale +previous = true diff --git a/docs/tutorials/bfgwiki2/src/models/setup.py b/docs/tutorials/bfgwiki2/src/models/setup.py index 764e8c0ea..fae50a1ee 100644 --- a/docs/tutorials/bfgwiki2/src/models/setup.py +++ b/docs/tutorials/bfgwiki2/src/models/setup.py @@ -13,7 +13,6 @@ requires = [ 'transaction', 'repoze.tm2', 'zope.sqlalchemy', - 'docutils' ] if sys.version_info[:3] < (2,5,0): diff --git a/docs/tutorials/bfgwiki2/src/models/tutorial.ini b/docs/tutorials/bfgwiki2/src/models/tutorial.ini index 1f8a5ccce..73b5ed9a4 100644 --- a/docs/tutorials/bfgwiki2/src/models/tutorial.ini +++ b/docs/tutorials/bfgwiki2/src/models/tutorial.ini @@ -1,17 +1,20 @@ [DEFAULT] debug = true -[app:sql] +[app:sqlalchemy] use = egg:tutorial#app reload_templates = true debug_authorization = false debug_notfound = false +debug_templates = true +default_locale_name = en db_string = sqlite:///%(here)s/tutorial.db +db_echo = false [pipeline:main] pipeline = egg:repoze.tm2#tm - sql + sqlalchemy [server:main] use = egg:Paste#http diff --git a/docs/tutorials/bfgwiki2/src/models/tutorial/configure.zcml b/docs/tutorials/bfgwiki2/src/models/tutorial/configure.zcml index f04eec9b4..6d16bd089 100644 --- a/docs/tutorials/bfgwiki2/src/models/tutorial/configure.zcml +++ b/docs/tutorials/bfgwiki2/src/models/tutorial/configure.zcml @@ -3,7 +3,7 @@ <!-- this must be included for the view declarations to work --> <include package="repoze.bfg.includes" /> - <route + <route pattern="" name="home" view=".views.my_view" @@ -11,8 +11,8 @@ /> <static - pattern="templates/static" name="static" + path="templates/static" /> </configure> diff --git a/docs/tutorials/bfgwiki2/src/models/tutorial/models.py b/docs/tutorials/bfgwiki2/src/models/tutorial/models.py index 0d062e01f..ec9d2b25c 100644 --- a/docs/tutorials/bfgwiki2/src/models/tutorial/models.py +++ b/docs/tutorials/bfgwiki2/src/models/tutorial/models.py @@ -6,16 +6,14 @@ from sqlalchemy import Integer from sqlalchemy import Text from sqlalchemy.exc import IntegrityError +from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import scoped_session from sqlalchemy.orm import sessionmaker -from sqlalchemy.ext.declarative import declarative_base - from zope.sqlalchemy import ZopeTransactionExtension -DBSession = scoped_session( - sessionmaker(extension=ZopeTransactionExtension())) +DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension())) Base = declarative_base() class Page(Base): @@ -29,8 +27,8 @@ class Page(Base): self.name = name self.data = data -def initialize_sql(db, echo=False): - engine = create_engine(db, echo=echo) +def initialize_sql(db_string, echo=False): + engine = create_engine(db_string, echo=echo) DBSession.configure(bind=engine) Base.metadata.bind = engine Base.metadata.create_all(engine) diff --git a/docs/tutorials/bfgwiki2/src/models/tutorial/run.py b/docs/tutorials/bfgwiki2/src/models/tutorial/run.py index 8e1249eab..47eb79e87 100644 --- a/docs/tutorials/bfgwiki2/src/models/tutorial/run.py +++ b/docs/tutorials/bfgwiki2/src/models/tutorial/run.py @@ -1,4 +1,5 @@ from repoze.bfg.configuration import Configurator +from paste.deploy.converters import asbool from tutorial.models import initialize_sql @@ -8,13 +9,15 @@ def app(global_config, **settings): It is usually called by the PasteDeploy framework during ``paster serve``. """ + zcml_file = settings.get('configure_zcml', 'configure.zcml') db_string = settings.get('db_string') if db_string is None: - raise ValueError("No 'db_string' value in application " - "configuration.") - initialize_sql(db_string) + raise ValueError("No 'db_string' value in application configuration.") + db_echo = settings.get('db_echo', 'false') + initialize_sql(db_string, asbool(db_echo)) config = Configurator(settings=settings) config.begin() - config.load_zcml('configure.zcml') + config.load_zcml(zcml_file) config.end() return config.make_wsgi_app() + diff --git a/docs/tutorials/bfgwiki2/src/models/tutorial/templates/mytemplate.pt b/docs/tutorials/bfgwiki2/src/models/tutorial/templates/mytemplate.pt index 767252554..2aedcad9f 100644 --- a/docs/tutorials/bfgwiki2/src/models/tutorial/templates/mytemplate.pt +++ b/docs/tutorials/bfgwiki2/src/models/tutorial/templates/mytemplate.pt @@ -48,31 +48,31 @@ <h2><code>repoze.bfg</code> links</h2> <ul> <li><a - href="http://docs.repoze.org/bfg/#narrative-documentation">Narrative + href="http://docs.repoze.org/bfg/current/#narrative-documentation">Narrative Documentation</a> </li> <li> <a - href="http://docs.repoze.org/bfg/#api-documentation">API + href="http://docs.repoze.org/bfg/current/#api-documentation">API Documentation</a> </li> <li> <a - href="http://docs.repoze.org/bfg/#tutorials">Tutorials</a> + href="http://docs.repoze.org/bfg/current/#tutorials">Tutorials</a> </li> <li> <a - href="http://docs.repoze.org/bfg/#change-history">Change + href="http://docs.repoze.org/bfg/current/#change-history">Change History</a> </li> <li> <a - href="http://docs.repoze.org/bfg/#sample-applications">Sample + href="http://docs.repoze.org/bfg/current/#sample-applications">Sample Applications</a> </li> <li> <a - href="http://docs.repoze.org/bfg/#support-and-development">Support + href="http://docs.repoze.org/bfg/current/#support-and-development">Support and Development</a> </li> <li> diff --git a/docs/tutorials/bfgwiki2/src/models/tutorial/views.py b/docs/tutorials/bfgwiki2/src/models/tutorial/views.py index dfb628269..e550e3257 100644 --- a/docs/tutorials/bfgwiki2/src/models/tutorial/views.py +++ b/docs/tutorials/bfgwiki2/src/models/tutorial/views.py @@ -1,7 +1,7 @@ from tutorial.models import DBSession -from tutorial.models import Model +from tutorial.models import MyModel def my_view(request): dbsession = DBSession() - root = dbsession.query(Model).filter(Model.name==u'root').first() + root = dbsession.query(MyModel).filter(MyModel.name==u'root').first() return {'root':root, 'project':'tutorial'} diff --git a/docs/tutorials/bfgwiki2/src/views/CHANGES.txt b/docs/tutorials/bfgwiki2/src/views/CHANGES.txt index e14f633ab..35a34f332 100644 --- a/docs/tutorials/bfgwiki2/src/views/CHANGES.txt +++ b/docs/tutorials/bfgwiki2/src/views/CHANGES.txt @@ -1,5 +1,4 @@ 0.0 --- -- Initial version - +- Initial version diff --git a/docs/tutorials/bfgwiki2/src/views/setup.cfg b/docs/tutorials/bfgwiki2/src/views/setup.cfg index 56fe3be14..23b2ad983 100644 --- a/docs/tutorials/bfgwiki2/src/views/setup.cfg +++ b/docs/tutorials/bfgwiki2/src/views/setup.cfg @@ -1,8 +1,27 @@ -[easy_install] -index_url = http://dist.repoze.org/bfgsite/simple - [nosetests] +match=^test nocapture=1 cover-package=tutorial with-coverage=1 cover-erase=1 + +[compile_catalog] +directory = tutorial/locale +domain = tutorial +statistics = true + +[extract_messages] +add_comments = TRANSLATORS: +output_file = tutorial/locale/tutorial.pot +width = 80 + +[init_catalog] +domain = tutorial +input_file = tutorial/locale/tutorial.pot +output_dir = tutorial/locale + +[update_catalog] +domain = tutorial +input_file = tutorial/locale/tutorial.pot +output_dir = tutorial/locale +previous = true diff --git a/docs/tutorials/bfgwiki2/src/views/tutorial.ini b/docs/tutorials/bfgwiki2/src/views/tutorial.ini index d89616316..85f131c2e 100644 --- a/docs/tutorials/bfgwiki2/src/views/tutorial.ini +++ b/docs/tutorials/bfgwiki2/src/views/tutorial.ini @@ -1,18 +1,21 @@ [DEFAULT] debug = true -[app:sql] +[app:sqlalchemy] use = egg:tutorial#app reload_templates = true debug_authorization = false debug_notfound = false +debug_templates = true +default_locale_name = en db_string = sqlite:///%(here)s/tutorial.db +db_echo = false [pipeline:main] pipeline = egg:Paste#evalerror egg:repoze.tm2#tm - sql + sqlalchemy [server:main] use = egg:Paste#http diff --git a/docs/tutorials/bfgwiki2/src/views/tutorial/configure.zcml b/docs/tutorials/bfgwiki2/src/views/tutorial/configure.zcml index f86468186..7b3f73b4e 100644 --- a/docs/tutorials/bfgwiki2/src/views/tutorial/configure.zcml +++ b/docs/tutorials/bfgwiki2/src/views/tutorial/configure.zcml @@ -4,7 +4,7 @@ <include package="repoze.bfg.includes" /> <static - pattern="templates/static" + path="templates/static" name="static" /> diff --git a/docs/tutorials/bfgwiki2/src/views/tutorial/models.py b/docs/tutorials/bfgwiki2/src/views/tutorial/models.py index 3e63c3734..ec9d2b25c 100644 --- a/docs/tutorials/bfgwiki2/src/views/tutorial/models.py +++ b/docs/tutorials/bfgwiki2/src/views/tutorial/models.py @@ -6,12 +6,11 @@ from sqlalchemy import Integer from sqlalchemy import Text from sqlalchemy.exc import IntegrityError +from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import scoped_session from sqlalchemy.orm import sessionmaker -from sqlalchemy.ext.declarative import declarative_base - from zope.sqlalchemy import ZopeTransactionExtension DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension())) @@ -28,8 +27,8 @@ class Page(Base): self.name = name self.data = data -def initialize_sql(db, echo=False): - engine = create_engine(db, echo=echo) +def initialize_sql(db_string, echo=False): + engine = create_engine(db_string, echo=echo) DBSession.configure(bind=engine) Base.metadata.bind = engine Base.metadata.create_all(engine) diff --git a/docs/tutorials/bfgwiki2/src/views/tutorial/run.py b/docs/tutorials/bfgwiki2/src/views/tutorial/run.py index 8e1249eab..47eb79e87 100644 --- a/docs/tutorials/bfgwiki2/src/views/tutorial/run.py +++ b/docs/tutorials/bfgwiki2/src/views/tutorial/run.py @@ -1,4 +1,5 @@ from repoze.bfg.configuration import Configurator +from paste.deploy.converters import asbool from tutorial.models import initialize_sql @@ -8,13 +9,15 @@ def app(global_config, **settings): It is usually called by the PasteDeploy framework during ``paster serve``. """ + zcml_file = settings.get('configure_zcml', 'configure.zcml') db_string = settings.get('db_string') if db_string is None: - raise ValueError("No 'db_string' value in application " - "configuration.") - initialize_sql(db_string) + raise ValueError("No 'db_string' value in application configuration.") + db_echo = settings.get('db_echo', 'false') + initialize_sql(db_string, asbool(db_echo)) config = Configurator(settings=settings) config.begin() - config.load_zcml('configure.zcml') + config.load_zcml(zcml_file) config.end() return config.make_wsgi_app() + diff --git a/docs/tutorials/bfgwiki2/src/views/tutorial/templates/mytemplate.pt b/docs/tutorials/bfgwiki2/src/views/tutorial/templates/mytemplate.pt index 767252554..2aedcad9f 100644 --- a/docs/tutorials/bfgwiki2/src/views/tutorial/templates/mytemplate.pt +++ b/docs/tutorials/bfgwiki2/src/views/tutorial/templates/mytemplate.pt @@ -48,31 +48,31 @@ <h2><code>repoze.bfg</code> links</h2> <ul> <li><a - href="http://docs.repoze.org/bfg/#narrative-documentation">Narrative + href="http://docs.repoze.org/bfg/current/#narrative-documentation">Narrative Documentation</a> </li> <li> <a - href="http://docs.repoze.org/bfg/#api-documentation">API + href="http://docs.repoze.org/bfg/current/#api-documentation">API Documentation</a> </li> <li> <a - href="http://docs.repoze.org/bfg/#tutorials">Tutorials</a> + href="http://docs.repoze.org/bfg/current/#tutorials">Tutorials</a> </li> <li> <a - href="http://docs.repoze.org/bfg/#change-history">Change + href="http://docs.repoze.org/bfg/current/#change-history">Change History</a> </li> <li> <a - href="http://docs.repoze.org/bfg/#sample-applications">Sample + href="http://docs.repoze.org/bfg/current/#sample-applications">Sample Applications</a> </li> <li> <a - href="http://docs.repoze.org/bfg/#support-and-development">Support + href="http://docs.repoze.org/bfg/current/#support-and-development">Support and Development</a> </li> <li> |
