I think the current description of Elixir (which is found at many
different places: index page of our website, pypi, README, ...) is
quite out of date and does not reflect the true nature and
specificities of Elixir anymore (especially since SQLAlchemy got its
own builtin "declarative" extension).
I've come up with a draft of all the ideas I think should be mentioned
in the description, but I would appreciate some thoughts about this,
as well as some help to make this a compelling introductory text. I'm
not a linguist nor a native English speaker, so it is quite an hard
task for me.
==========
Elixir is a declarative syntax layer and "database pattern framework"
on top of the `SQLAlchemy library <http://www.sqlalchemy.org/>`_. By
database pattern framework, we mean that it can automatically generate
tables and mappers and provides a way to express "development
patterns" which require some database elements (specific columns or
tables). These patterns can then be easily reused.
Elixir provides some interesting patterns built-in: from the simple
ManyToOne (which generates columns with foreign keys to the table of
the target Entity) to the more complex ManyToMany (which generates the
intermediary table), and various other patterns: three different
inheritance patterns, versioning for entities, ...
Elixir is also highly configurable: you can configure the way (almost)
everything is generated (column, constraint and table names).
Finally, Elixir does not replace SQLAlchemy's core features: it only
alters the way to define classes, and not the way to use (query,
etc...) them afterwards.
==========
For reference, here is the current version of this text:
==========
Elixir is a declarative layer on top of the `SQLAlchemy library
<http://www.sqlalchemy.org/>`_. It is a fairly thin wrapper, which provides
the ability to create simple Python classes that map directly to relational
database tables (this pattern is often referred to as the Active Record design
pattern), providing many of the benefits of traditional databases
without losing the convenience of Python objects.
Elixir is intended to replace the ActiveMapper SQLAlchemy extension, and the
TurboEntity project but does not intend to replace SQLAlchemy's core features,
and instead focuses on providing a simpler syntax for defining model objects
when you do not need the full expressiveness of SQLAlchemy's manual mapper
definitions.
--
Gaëtan de Menten
http://openhex.org