This doesn't add much in the way of useful tests but it should pave the way for
more. Tests may be run like so:
{{{
python setup.py nosetests --with-coverage
}}}
* Replaced `forms` module with subpackage; added some initial goodies (many of
which are currently just imports from `edbob`).
* Added/edited various CRUD templates for consistency.
* Renamed `customer_groups` module and template folder to `customergroups`.
* Modified several view modules so their Pyramid configuration is more
"extensible." This just means routes and views are defined as two separate
steps, so that derived applications may inherit the route definitions if they
so choose.
* Added Employee CRUD views; added Email Address field to index view.
* Updated `people` view module so it no longer derives from that of `edbob`.
* Added support for, and some implementations of, extra key lookup abilities to
CRUD views. This allows URLs to use a "natural" key (e.g. Customer ID
instead of UUID), for cases where that is more helpful.
* Product CRUD now uses autocomplete for Brand field. Also, price fields no
longer appear within an editable fieldset.
* Within Store index view, default sort is now ID instead of Name.
* Added Contact and Phone Number fields to Vendor CRUD views; added Contact and
Email Address fields to index view.
Now the CRUD routes for these objects can leverage UUIDs of various related
objects in addition to the primary object. More should be done with this, but
at least we have a start.
Updated both instances to use `rattail.threads.Thread` instead of
`threading.Thread`. This way if an exception occurs within the
thread, the registered handler will be invoked.