.. _introdction: Introduction ============ .. rubric :: Shabti is a collection of ``paster`` templates for Pylons. Shabti templates enable a variety of Pylons power-ups through using Pylons with several related Python libraries. Shabti is just a thin layer of glue around these libraries, allowing developers to get started quickly: **Pylons** -- web framework **SQLAlchemy** -- ORM and SQL generation **PyCouchDB** -- Python API for Apache's CouchDB **Elixir** -- declarative layer for SQLAlchemy **Paste** -- WSGI server and other tools **FormEncode** -- form validation **Toscawidgets** -- form widgets middleware **rdflib** -- Python RDF and SPARQL library **RDFAlchemy** -- Object-RDF Mapper layered on top of rdflib **FormAlchemy** -- forms generation from database introspection **Sprox** -- forms layer on top of Toscawidgets .. note :: It is strongly recommended that developers at least familiarize themselves with the documentation of these core libraries when using Shabti project templates. In addition to these core packages and modules Shabti makes optional use of the ``sqlalchemy-migrate`` library for handling database migrations with SQLAlchemy. Philosophy and design goals --------------------------- Shabti is a re-working of Tesla, which started as a simple template with glue code for Pylons and SQLAlchemy plus Elixir so that developers could get started quickly with these libraries. Some additional paster command line tools were added for common handlng database management tasks, inspired by similar tools available to developers working with Rails and Django. Shabti extends the notion beyond ORM support for relational store into support for i) hierarchical store via the eXist native XML database's XMLRPC controller and ii) directed graph store via rdflib and RDFAlchemy. The AuthKit library was initially widely used by Pylons developers for handling authentication and authorization work. In consequence, an additional Shabti template, shabti_auth, implemented AuthKit integration and provided a set of very basic classes for User, Group and Permission entities. However, the previous author decided to remove the AuthKit dependency due to various design and documentation issues with that library.