1
0
Fork 0
mirror of https://github.com/yweber/lodel2.git synced 2025-10-30 19:19:03 +01:00
lodel2_mirror/em_test.py
Yann ce9e64ac8e em_test bugfix
added a default value for Subsection parent field
2016-11-17 15:12:12 +01:00

423 lines
15 KiB
Python

#!/usr/bin/python3
#-*- coding: utf-8 -*-
from lodel.context import LodelContext
LodelContext.init()
from lodel.settings.settings import Settings as settings
settings('globconf.d')
from lodel.settings import Settings
from lodel.editorial_model.components import *
from lodel.editorial_model.exceptions import *
from lodel.editorial_model.model import EditorialModel
em = EditorialModel('testem', 'Test editorial model')
base_group = em.new_group( 'base_group',
display_name = 'Base group',
help_text = 'Base group that implements base EM features (like classtype)'
)
####################
# Lodel Object #
####################
em_abstract = em.new_class( 'abstract_object',
display_name = 'Abstract lodel object',
help_text = 'For testing purpose',
group = base_group,
abstract = True)
em_object = em.new_class( 'object',
display_name = 'Object',
help_text = 'Main class for all Em objects',
group = base_group,
abstract = True,
parents = em_abstract,
)
em_object.new_field( 'lodel_id',
display_name = 'Lodel identifier',
help_text = 'Uniq ID that identify every lodel object',
group = base_group,
data_handler = 'uniqid',
internal = True,
)
em_object.new_field( 'help_text',
display_name = 'Help',
help_text = 'A short text that describe the object',
group = base_group,
internal = True,
data_handler = 'text',
)
em_object.new_field( 'date_create',
display_name = 'Creation date',
group = base_group,
data_handler = 'datetime',
now_on_create = True,
internal = True,
)
em_object.new_field( 'date_update',
display_name = 'Last update',
group = base_group,
data_handler = 'datetime',
now_on_update = True,
internal = True,
)
########################
# Lodel old classtypes #
########################
entitie = em.new_class( 'entitie',
display_name = 'entitie',
help_text = 'Replace old entity classtype',
abstract = True,
group = base_group,
parents = em_object,
)
person = em.new_class( 'person',
display_name = 'Person',
help_text = 'Replace old person classtype',
abstract = False,
group = base_group,
parents = em_object,
)
person.new_field( 'firstname',
display_name = {
'eng': 'Firstname',
'fre': 'Prénom',
},
data_handler = 'varchar',
group = base_group,
)
person.new_field( 'lastname',
display_name = {
'eng': 'Lastname',
'fre': 'Nom de famille',
},
data_handler = 'varchar',
group = base_group,
)
person.new_field( 'fullname',
display_name = {
'eng': 'Fullname',
'fre': 'Nom complet',
},
group = base_group,
data_handler = 'Concat',
field_list = ['firstname', 'lastname'],
immutable = True,
)
person.new_field( 'alias',
display_name = 'alias',
help_text = {
'eng': 'Link to other person class instance that represent the same person',
'fre': 'Lien vers un ensemble d\'instances de la classe personne représentant le même individu',
},
data_handler = 'set',
allowed_classes = [person],
default = None,
nullable = True,
group = base_group,
)
entry = em.new_class( 'entry',
display_name = 'Entry',
help_text = 'Replace olf entry classtype',
abstract = True,
group = base_group,
parents = em_object,
)
#####################
# Editorial classes #
#####################
editorial_group = em.new_group( 'editorial_abstract',
display_name = 'Editorial base',
help_text = {
'eng': 'Contains abstract class to handler editorial contents',
'fre': 'Contient les classes abstraites permetant la gestion de contenu éditorial'
},
depends = (base_group,)
)
# Classe texte
text = em.new_class( 'text',
display_name = 'Text',
help_text = 'Abstract class that represent texts',
group = editorial_group,
abstract = True,
parents = entitie,
)
text.new_field( 'title',
display_name = {'eng': 'Title', 'fre': 'Titre'},
group = editorial_group,
data_handler = 'varchar',
nullable = True,)
text.new_field( 'subtitle',
display_name = {
'eng': 'Subtitle',
'fre': 'Sous-titre',
},
group = editorial_group,
data_handler = 'varchar',
nullable = True,
default = None)
# Classe collection
collection = em.new_class( 'collection',
display_name = 'Collection',
group = editorial_group,
abstract = False,
parents = entitie)
collection.new_field( 'title',
display_name = 'Title',
group = editorial_group,
data_handler = 'varchar'
)
# Classe publication
publication = em.new_class( 'publication',
display_name = 'Publication',
group = editorial_group,
abstract = False,
parents = entitie,)
publication.new_field( 'collection',
display_name = 'Collection',
group = editorial_group,
data_handler = 'link',
default = None,
nullable = True,
allowed_classes = [collection],
back_reference = ('collection', 'publications'))
collection.new_field( 'publications',
display_name = 'Publications',
group = editorial_group,
data_handler = 'list',
allowed_classes = [publication],
back_reference = ('publication', 'collection'))
#########################
# Texte definition #
#########################
section = em.new_class( 'section',
display_name = 'Section',
group = editorial_group,
abstract = False,
parents = text)
subsection = em.new_class( 'subsection',
display_name = 'Subsection',
group = editorial_group,
abstract = False,
parents = section)
section.new_field( 'childs',
display_name = 'Next section',
group = editorial_group,
data_handler = 'hierarch',
allowed_classes = [subsection],
back_reference = ('subsection', 'parent'),
default = None,
nullable = True)
subsection.new_field( 'parent',
display_name = 'Parent',
group = editorial_group,
data_handler = 'link',
default = None,
nullable = True,
allowed_classes = [section],
back_reference = ('section', 'childs'))
#####################
# Persons & authors #
#####################
editorial_person_group = em.new_group( 'editorial_person',
display_name = 'Editorial person',
help_text = {
'eng': 'Introduce the concept of editorial person (authors, translator etc)',
'fre': 'Contient les classes servant à la gestion des personnes editorials (auteurs, traducteur...)',
},
depends = (editorial_group,)
)
text_person = em.new_class( 'text_person',
display_name = {
'eng': 'TextPerson',
'fre': 'TextePersonne',
},
help_text = {
'eng': 'Represent a link between someone and a text',
'fre': 'Représente un lien entre une personne et un texte',
},
group = editorial_person_group,
abstract = True,
parents = entitie,
)
bref_textperson_text = text_person.new_field( 'text',
display_name = {
'eng': 'Linked text',
'fre': 'Texte lié',
},
data_handler = 'link',
allowed_classes = [text],
group = editorial_person_group
)
bref_textperson_person = text_person.new_field( 'person',
display_name = {
'eng': 'Linked person',
'fre': 'Personne liée',
},
data_handler = 'link',
allowed_classes = [person],
group = editorial_person_group,
)
text_person.new_field( 'role',
display_name = {
'eng': 'Person role',
'fre': 'Role de la personne',
},
data_handler = 'varchar',
group = editorial_person_group
)
# simple example of linked text / person
person.new_field( 'linked_texts',
display_name = {
'eng': 'Linked texts',
'fre': 'Textes liés',
},
data_handler = 'list',
back_reference = ('Text', 'linked_persons'),
group = editorial_person_group,
allowed_classes = [text],
default = None,
nullable = True)
text.new_field( 'linked_persons',
display_name = {
'eng': 'Linked persons',
'fre': 'Personnes liées',
},
data_handler = 'list',
back_reference = ('Person', 'linked_texts'),
group = editorial_person_group,
allowed_classes = [person],
default = None,
nullable = True)
#####################
# Index classes # <--- Note : using a different datasource for testing
##################### purpose
index_group = em.new_group( 'index_group',
display_name = 'Indexes',
help_text = {
'eng': 'EM class that represents indexes'},
depends = (editorial_group,))
index_abstract = em.new_class(
'indexAbs',
display_name = {'eng': 'Abstract Index'},
help_text = {'eng': 'Abstract class common to each Index classes'},
abstract = True,
group = index_group,
datasources = 'dummy2',
parents = em_object)
index_name = index_abstract.new_field(
'name',
display_name = {
'eng': 'name',
'fre': 'nom'},
data_handler = 'varchar',
group = index_group)
index_value = index_abstract.new_field(
'value',
display_name = {
'eng': 'value',
'fre': 'valeur'},
data_handler = 'varchar',
group = index_group)
text.new_field( 'indexes',
display_name = {
'eng': 'Indexes',
'fre': 'Indexes'},
data_handler = 'list',
back_reference = ('Indexabs', 'texts'),
allowed_classes = [index_abstract],
default = None,
nullable = True,
group = index_group)
index_abstract.new_field( 'texts',
display_name = {
'eng': 'Text referenced by this index',
'fre': 'Texte contenant cette index'},
data_handler = 'list',
back_reference = ('Text', 'indexes'),
allowed_classes = [text],
group = index_group)
index_theme = em.new_class(
'indexTheme',
display_name = {
'eng': 'Thematic index',
'fre': 'Index thématique'},
group = index_group,
datasources = 'dummy2',
parents = index_abstract)
index_theme_theme = index_abstract.new_field(
'theme',
display_name = {
'eng': 'theme'},
data_handler = 'varchar',
group = index_group)
#############
# USERS #
#############
user_group = em.new_group(
'users', display_name = 'Lodel users',
help_text = 'Group that handle users en perm')
user = em.new_class(
'user', display_name = 'Lodel user', help_text = 'Represent a lodel user',
group = user_group, abstract = False)
user.new_field(
'id', display_name = 'user identifier', help_text = 'Uniq ID',
group = user_group, data_handler = 'uniqid', internal = True)
user.new_field(
'firstname', display_name = 'Firstname',
group = user_group, data_handler = 'varchar', internal = False)
user.new_field(
'lastname', display_name = 'Lastname',
group = user_group, data_handler = 'varchar', internal = False)
user.new_field(
'login', display_name = 'user login', help_text = 'login',
group = user_group, data_handler = 'varchar', uniq = True, internal = False)
user.new_field(
'password', display_name = 'Password',
group = user_group, data_handler = 'password', internal = False)
#em.save('xmlfile', filename = 'examples/em_test.xml')
pickle_file = 'examples/em_test.pickle'
em.save('picklefile', filename = pickle_file)
print("Output written in %s" % pickle_file)