Delete rules
DeleteConfig = Literal['deny', 'pre', 'post']
module-attribute
Delete rule configuration that specifies when a given delete rule must be executed.
DeleteRule
Bases: BoundMethodWrapper[TOwner, [AgnosticClientSession, Sequence[ObjectId]], DeleteConfig]
Delete rule wrapper.
Delete rules receive an AgnosticClientSession
instance and a list of ObjectId
s,
and implement any deny, pre- or post-delete behavior.
Delete rule execution sequence:
- "deny" rules are executed first - delete rules whose role is to prevent a delete operation should have this config.
- "pre" rules are executed next.
- Then the requested delete operation takes place.
- Finally the "post" delete rules are executed.
Delete rules are always called in a transaction. Well-behaved delete rules must:
- always use the received session instance to interact with the database, i.e. forward the received session to every database driver call;
- not commit the session;
- not start a new transaction (see
session.in_transaction
); - raise an exception if the operation can or must not complete.
Example:
class SVC(MongoService):
@delete_rule("pre")
async def delete_cascade(self, session: AgnosticClientSession, ids: Sequence[ObjectId]) -> None:
from x.y.z import OtherService
other_service = OtherService(self._database)
await other_service.delete_many({"foo_ref": {"$in": ids}}, options={"session": session})
Source code in fastapi_motor_oil/delete_rule.py
delete_rule(config='pre')
Decorator that converts a MongoService
method into a DeleteRule
that is then
automatically applied by the service during delete operations.
Parameters:
Name | Type | Description | Default |
---|---|---|---|
config |
DeleteConfig
|
Delete rule configuration. |
'pre'
|