Advanced topics¶
How to add a new Type
/core¶
Type
and Core
are both Declarations
.
Difference between Core
and Type
¶
Core
is also an Entry Type
. But it is a particular entry Type
.
Core
is used to define low level at the entry Type
. For example
the Core.Base
is the low level at all the Model
. Modify the behaviours
of the Core.Base
is equal to modify the behaviours of all the Model
.
this is the inheritance model of the Model
Type
Entry Type |
inheritance Types |
Core |
---|---|---|
Model | Model / Mixin | Base |
Declare a new Type
¶
The declaration of new Type
, is declarations of a new type of declaration.
The known Type
declarations are:
- Model
- Mixin
- Core
- AuthorizationPolicyAssociation
This is an example to declare new entry Type
:
from anyblok import Declarations
@Declarations.add_declaration_type()
class MyType:
@classmethod
def register(cls, parent, name, cls_, **kwargs):
...
@classmethod
def unregister(cls, child, cls_):
...
The Type must implement:
Method name | Description |
---|---|
register | This classmethod describe what append when a
a declaration is done by he decorator
Declarations.register |
unregister | This classmethod describe what append when an
undeclaration is done. |
The add_declaration_type
can define the arguments:
Argument’s name | Description |
---|---|
isAnEntry | Boolean
Define if the new Type is an entry, depend of the
installation or not of the bloks |
assemble | Only for the entry ``Type`` Waiting the name of the classmethod which make the action to group and create a new class with the complete inheritance tree: @add_declaration_type(isAnEntry=True,
assemble='assemble')
class MyTpe:
...
@classmethod
def assemble(cls, registry):
...
Warning registry is the registry of the database |
initialize | Only for the entry ``Type`` Waiting the name of the classmethod which make the action to initialize the registry: @add_declaration_type(isAnEntry=True,
initialize='initialize')
class MyTpe:
...
@classmethod
def initialize(cls, registry):
...
Warning registry is the registry of the database |
Declare a Mixin entry type¶
Mixin
is a Type
to add behaviours, it is not a particular Type
.
But it is always very interresting to use it.
AnyBlok had already a Mixin
Type
for the Model
Type
. The
Mixin
Type
must not be the same for all the entry Type
, then
Model
inherit only other Model
or Declarations.Mixin
. If you add
an another Declarations.AnotherMixin
then Model
won’t inherit this
Mixin
Type
.
The new Mixin
Type
is easy to add:
from anyblok import Declarations
from anyblok.mixin import MixinType
@Declarations.add_declaration_type(isAnEntry=True)
class MyMixin(MixinType):
pass
Declare a new Core
¶
The definition of a Core and the Declaration is in different parts
Declarations of a new Core
:
from anyblok.registry import RegistryManager
RegistryManager.declare_core('MyCore')
Definition or register of an overload of the Core
declaration:
from anyblok import Declarations
@Declarations.register(Declarations.Core)
class MyCore:
...
The declaration must be done in the application, not in the blok. The is only done in the blok.
Warning
Core
can’t inherit Model
, Mixin
or other Type