kerno.peto module¶
Convenience types to store incoming state and remove boilerplate.
A Peto is typically instantiated in the controller layer and then
passed around (as the main context object) to actions, event handlers,
schemas, helpers etc. This removes boilerplate, helps remove
global variables and makes unit testing easier.
A previous version had an Optional user variable in Peto,
but that led to assert peto.user in most actions. We avoid that
by providing also a UserlessPeto class. Now it’s explicit in the type!
In your application you should subclass them like this:
from kerno.peto import AbstractPeto, AbsUserlessPeto
UserlessPeto = AbsUserlessPeto[Repo] # using the concrete Repo type
Peto = AbstractPeto[Repo, User] # with the concrete User type
- class kerno.peto.AbsUserlessPeto(kerno: kerno.kerno.Kerno, repo: kerno.peto.TRepo, raw: Dict[str, Any])[source]¶
Bases:
Generic[kerno.peto.TRepo]Convenience type for actions NOT done by a logged user.
- classmethod from_pyramid(request, json=False) kerno.peto.AbsUserlessPeto[source]¶
Integration with the pyramid web framework.
Typical usage is, inside your pyramid view, you do:
upeto = UserlessPeto.from_pyramid(request, json=True) # Call your action/service layer, which returns a Rezulto instance: rezulto = create_user(upeto) return rezulto
When invoked with
json=True,upeto.rawcontains a dict with the JSON payload from the pyramid request.
- kerno: kerno.kerno.Kerno¶
- raw: Dict[str, Any]¶
- repo: kerno.peto.TRepo¶
- class kerno.peto.AbstractPeto(kerno: kerno.kerno.Kerno, repo: kerno.peto.TRepo, raw: Dict[str, Any], user: kerno.peto.TUser)[source]¶
Bases:
kerno.peto.AbsUserlessPeto[kerno.peto.TRepo],Generic[kerno.peto.TRepo,kerno.peto.TUser]Convenience type for actions done by a logged user.
- classmethod from_pyramid(request, json=False) kerno.peto.APeto[source]¶
Integration with the pyramid web framework.
Typical usage is, inside your pyramid view, you do:
peto = Peto.from_pyramid(request, json=True) # Call your action/service layer, which returns a Rezulto instance: rezulto = create_user(peto) return rezulto
When invoked with
json=True,peto.rawcontains a dict with the JSON payload from the pyramid request.Another example, very brief:
@kerno_view def get_audit_data(request): "\""Return audit data to be displayed to a superuser."\"" return get_audits( peto=Peto.from_pyramid(request), **request.json_body)
- classmethod from_userless(upeto: kerno.peto.AbsUserlessPeto, user: kerno.peto.TUser) kerno.peto.APeto[source]¶
Get a Peto instance from a UserlessPeto and a user object.
- user: kerno.peto.TUser¶