.. pyramid_formalchemy documentation master file, created by sphinx-quickstart on Sat Jan 15 20:18:53 2011. You can adapt this file completely to your liking, but it should at least contain the root `toctree` directive. =============================================== Welcome to pyramid_formalchemy's documentation! =============================================== About ===== ``pyramid_formalchemy`` provides a CRUD interface for ``pyramid`` based on ``FormAlchemy`` It also allows to use ``FormAlchemy`` to render forms in your application. Installation ============ pyramid_formalchemy must be a dependency of you application, so you must add "pyramid_formalchemy" as a dependency in your setup.py under install_requires. You must now update your environment, in case of buildout, by running a new buildout. If you want nicer jquery functionality also add a dependency for ``fa.jquery``. pyramid_formalchemy also provides a pyramid scaffold. It can be used to add a skeleton to an existing project or to create a new project. If you create a new project, you must first install pyramid_formalchemy in your python environment, either with pip:: $ pip install pyramid_formalchemy pyramid_fanstatic fa.jquery or with easy_install:: $ easy_install pyramid_formalchemy pyramid_fanstatic fa.jquery Only after that, the pyramid scaffold becomes available. The template was made with the idea that it can be used to extend existing applications. It does not create an app for you. For bootstrapping your app, you need another pyramid scaffold. The provided template works well with ``alchemy``, ``Akhet``. To bootstrap an application, call paster like that:: $ pcreate -s alchemy -s pyramid_fa myapp Or for ``Akhet``:: $ pcreate -s akhet -s pyramid_fa myapp The application is created by akhet, akhet does not know about pyramid_formalchemy, and pyramid_formalchemy cannot modify the app configuration. So you have to do this by hand. First, you must add the install dependency like explained earlier. Second, you must add the following line in the main method that returns the wsgi app, directly after Configurator has been created (The example assumes that the Configurator instance is stored under the name "config"):: ... config.include('myapp.fainit') ... More details are explained in ``myapp/README_FORMALCHEMY.txt``. The process is the same for other templates. For the pyramid ones there are additional changes necessary that are also explained in fareadme.txt To add the minimum configuration to an existing application, you should be able to run:: $ pcreate -s pyramid_fa myapp All files that paster creates are prefixed with fa, and should not interfere with existing code. The other customizations described for fresh applications are also valid for existing apps. Basic usage ============ Add an empty ``forms.py`` module at the root of your project. Now you just need to include two lines of configuration in the ``__init__.main()`` function of your project. Here is the one used for testing: .. literalinclude:: ../pyramidapp/pyramidapp/__init__.py This will render the **basic** formalchemy interface. It's better to enable the jquery features like this: .. literalinclude:: ../pyramidapp/pyramidapp/jquery.py :pyobject: main That's it. Now launch your app, browse ``/admin/`` and enjoy it ! About Models ============= Here is a typical model to use full features of pyramid_formalchemy. Notice that the fields are defined using :py:func:`formalchemy.Column`: .. literalinclude:: ../../formalchemy_project/models.py :pyobject: User See also :mod:`pyramid_formalchemy.actions` to customize form buttons per model. Advanced usage =============== Custom view, factory, forms ---------------------------- In the toward examples we just pass a ``package`` parameter to :func:`~pyramid_formalchemy.configure`. By default the function will try to load ``package.models``, ``package.models.DBSession`` and ``package.forms`` but you can override this. In this case you don't need to specify a package:: config.formalchemy_admin(config, forms='formalchemy_project.forms', models='formalchemy_project.mymodels', session_factory='formalchemy_project.session.Session', ) You can also change the path ``prefix`` used. pyramid_formalchemy will use ``/admin/`` by default. See :func:`~pyramid_formalchemy.configure`. Having fun with the query_factory parameter ------------------------------------------- .. literalinclude:: ../../formalchemy_project/__init__.py :pyobject: main Custom views per model ---------------------- You can also register custom CRUD views per ModelListing:: config.formalchemy_model_view('admin', model='pyramidapp.models.Foo', context='pyramid_formalchemy.resources.ModelListing', renderer='templates/foolisting.pt', attr='listing', request_method='GET', permission='view') and per Model:: config.formalchemy_model_view('admin', model='pyramidapp.models.Foo', context='pyramid_formalchemy.resources.Model', name='', renderer='templates/fooshow.pt', attr='show', request_method='GET', permission='view') Events ======= pyramid_formalchemy got some hooks to help you to customize things. See :mod:`pyramid_formalchemy.events`. Actions ======= pyramid_formalchemy allow you to customize links and actions of your views. See :mod:`pyramid_formalchemy.actions`. Setting permissions =================== pyramid_formalchemy takes care of some ``__acl__`` attributes. Setting permissions for the global interface --------------------------------------------- You just need to subclass the default factory in your application: .. literalinclude:: ../pyramidapp/pyramidapp/security.py Setting permissions per model ----------------------------- You can also add an ``__acl__`` attribute to your model class: .. literalinclude:: ../pyramidapp/pyramidapp/models.py :pyobject: Bar Api === .. toctree:: :maxdepth: 2 modules/index.txt Indices and tables ================== * :ref:`genindex` * :ref:`modindex` * :ref:`search`