- Substance D is built on top of the Pyramid framework. It's an "application server", looking for a better way to name it.
- Developers define "content" (e.g. articles, products, news) using plain-old Python, and then users can manipulate them through a graphical UI. Cruddy, extensible.
- Content is in an object database, in a tree. Not a SQL-bound system.
- The name is from "A Scanner Darkly" by Philip K. Dick. "Can't quit and get off the drugs", doing this again and again.
- The SDI - the graphical UI. Allows nonexperts to create, edit, update, and delete content that developers have defined. It's a view of the hierarchical object db. Like a filesystem. Lets you manage database stuff, ACLs, etc. Real-time: If you make a change to some view, other people will see the change without reloading. Extensible.
- Hierarchical security declarations on the content tree. On "all posts", on "this post", etc. Different granularities
- Content workflow.
- Indexing, searching.
- Can evolve with migrations. Dump and load.
- Built-in performance monitor, can hook up to statsd.
- Runs on Python 3 or Python 2.
- The tree model is very flexible, say you have "customers of customers of customer". No huge modeling/routing effort needed, just assign them a node from the tree. Change the data, not the software. No redeploys.
- Admin user says "for this object called catalogues, let all admins see the object, but not anyone else. Only for this object".
- You need to evolve the data over time even though it schemaless - so it's how the code expects. For this people can register little scripts called "evolve steps".
- Can customize how things look, i.e. not just the name, but other attributes for some nodes.
An audit log lists all the things that have happened.
Built with ZOODB, Pyramid, Collander...
Get it from GitHub. Hopefully out the door before PyCon US.
Know Your AngularJS Inside Out
Build Your Own AngularJS helps you understand everything there is to understand about AngularJS (1.x). By creating your very own implementation of AngularJS piece by piece, you gain deep insight into what makes this framework tick. Say goodbye to fixing problems by trial and error and hello to reasoning your way through them