History¶
Ideas that seemed like a good idea at the time that have been adandoned. These are documented here to avoid accidentally reimplementing bad ideas without consideration at to why they were discarded.
ORM model.
Ended up being overly complicated. This approach was abandoned in 1.0.0.
Process actions immediately.
Previously, would delay processing actions until commit() called.
This requires caching the attributes, and simulating the actions in cache. Unfortunately this is very difficult to get right, particular as certain actions can have different side effects (e.g. alter other attributes) depending on the server.
Also we run into the problem that any errors during the commit() phase may happen too late to abort changes to other databases. e.g. if the Django middleware is used, any errors generated in the middleware will not affect the other middleware transaction layers for other databases, and they will continue to commit all results (regardless of order of invocation).
So we process the results immediately. This means rollback is more likely to be required when something doesn’t work, which could introduce problems if this failes. However these changes, I believe will result in an overall simpler and more robust design.
commit: a6180486dc788c6ba81dcbff1e6c9a0bbbc481f3
Remove caching in backend. No longer needed now we process actions immediately.
commit: 21e357bfc612c1fd1ef1ca599a5dbb39a94fac1e
Remove using= parameter from object methods.
Initially this was copied from Django db models.
This means if we load object from LDAP server we have to save it to that same LDAP server.
In a practical sense, this was the case anyway.
Trying to make things too generic just over complicates everything.
This also means that the dn for an object will not change, unless rename is called. To try and do otherwise is just so very very confusing.
As a result, a lot of complicated code that was potentially broken has now been simplified.
commit: 9f79c500bc971ad7fdd3dd6e4eb45d1b187d5f03