001: Entity id_ definition
Status¶
Superseeded
It has been partially superseeded by 002
String ids are again supported.
Context¶
Right now the Entity class has a mandatory id_ attribute of types str or
int. That prevents the user to create entities a model level as they are not
aware of the existent entities in the repository.
Proposals¶
We can:
- Assume that the model functions that create the new entities receive the new entity id as an argument.
- Change the definition of the
id_attribute so that it can be set by the repository at the moment of adding it to the repository.
I've started using the first in pydo and found it cumbersome.
The first approximation for the second can be to assume that the id_ is an
integer, by default is set to a negative value, marking it as invalid, and when
the repository sees it, gets the last id and increments it in a unit.
This can't be easily done if the id_ is a str. So I'm temporarily dropping
support for this types of IDs. If anyone needs them, we can create a workaround
like converting them to an ascii integer and increasing it by one.
If we want more complex objects to be used as ids, we may think of letting the user specify a callable to increase the ids.
Decision¶
We're setting a default id_ value of -1 on Entities, the repository will
react to these ids, getting the last valid ID and increasing it by one.
Consequences¶
As a side effect, we're temporarily dropping support for str id_ attributes.