No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

em_test.py 13KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352
  1. #!/usr/bin/python3
  2. #-*- coding: utf-8 -*-
  3. from lodel.settings.settings import Settings as settings
  4. settings('globconf.d')
  5. from lodel.settings import Settings
  6. from lodel.editorial_model.components import *
  7. from lodel.editorial_model.exceptions import *
  8. from lodel.editorial_model.model import EditorialModel
  9. em = EditorialModel('testem', 'Test editorial model')
  10. base_group = em.new_group( 'base_group',
  11. display_name = 'Base group',
  12. help_text = 'Base group that implements base EM features (like classtype)'
  13. )
  14. ####################
  15. # Lodel Object #
  16. ####################
  17. em_object = em.new_class( 'object',
  18. display_name = 'Object',
  19. help_text = 'Main class for all Em objects',
  20. group = base_group,
  21. abstract = True,
  22. )
  23. em_object.new_field( 'lodel_id',
  24. display_name = 'Lodel identifier',
  25. help_text = 'Uniq ID that identify every lodel object',
  26. group = base_group,
  27. data_handler = 'uniqid',
  28. internal = True,
  29. )
  30. em_object.new_field( 'help_text',
  31. display_name = 'Help',
  32. help_text = 'A short text that describe the object',
  33. group = base_group,
  34. internal = True,
  35. data_handler = 'text',
  36. )
  37. em_object.new_field( 'date_create',
  38. display_name = 'Creation date',
  39. group = base_group,
  40. data_handler = 'datetime',
  41. now_on_create = True,
  42. )
  43. em_object.new_field( 'date_update',
  44. display_name = 'Last update',
  45. group = base_group,
  46. data_handler = 'datetime',
  47. now_on_update = True,
  48. )
  49. ########################
  50. # Lodel old classtypes #
  51. ########################
  52. entitie = em.new_class( 'entitie',
  53. display_name = 'entitie',
  54. help_text = 'Replace old entity classtype',
  55. abstract = True,
  56. group = base_group,
  57. parents = em_object,
  58. )
  59. person = em.new_class( 'person',
  60. display_name = 'Person',
  61. help_text = 'Replace old person classtype',
  62. abstract = True,
  63. group = base_group,
  64. parents = em_object,
  65. )
  66. person.new_field( 'firstname',
  67. display_name = {
  68. 'eng': 'Firstname',
  69. 'fre': 'Prénom',
  70. },
  71. data_handler = 'varchar',
  72. )
  73. person.new_field( 'lastname',
  74. display_name = {
  75. 'eng': 'Lastname',
  76. 'fre': 'Nom de famille',
  77. },
  78. data_handler = 'varchar',
  79. )
  80. person.new_field( 'fullname',
  81. display_name = {
  82. 'eng': 'Fullname',
  83. 'fre': 'Nom complet',
  84. },
  85. group = base_group,
  86. data_handler = 'varchar', # <-- should be concat type
  87. internal = True,
  88. immutable = True,
  89. )
  90. person.new_field( 'alias',
  91. display_name = 'alias',
  92. help_text = {
  93. 'eng': 'Link to other person class instance that represent the same person',
  94. 'fre': 'Lien vers un ensemble d\'instances de la classe personne représentant le même individu',
  95. },
  96. data_handler = 'set',
  97. allowed_classes = [person],
  98. )
  99. entry = em.new_class( 'entry',
  100. display_name = 'Entry',
  101. help_text = 'Replace olf entry classtype',
  102. abstract = True,
  103. group = base_group,
  104. parents = em_object,
  105. )
  106. #####################
  107. # Editorial classes #
  108. #####################
  109. editorial_group = em.new_group( 'editorial_abstract',
  110. display_name = 'Editorial base',
  111. help_text = {
  112. 'eng': 'Contains abstract class to handler editorial contents',
  113. 'fre': 'Contient les classes abstraites permetant la gestion de contenu éditorial'
  114. },
  115. depends = (base_group,)
  116. )
  117. # Classe texte
  118. text = em.new_class( 'text',
  119. display_name = 'Text',
  120. help_text = 'Abstract class that represent texts',
  121. group = editorial_group,
  122. abstract = True,
  123. parents = entitie,
  124. )
  125. text.new_field( 'title',
  126. display_name = {'eng': 'Title', 'fre': 'Titre'},
  127. group = editorial_group,
  128. data_handler = 'varchar',
  129. nullable = True,)
  130. text.new_field( 'subtitle',
  131. display_name = {
  132. 'eng': 'Subtitle',
  133. 'fre': 'Sous-titre',
  134. },
  135. group = editorial_group,
  136. data_handler = 'varchar',
  137. nullable = True)
  138. # Classe collection
  139. collection = em.new_class( 'collection',
  140. display_name = 'Collection',
  141. group = editorial_group,
  142. abstract = False,
  143. parents = entitie)
  144. collection.new_field( 'title',
  145. display_name = 'Title',
  146. group = editorial_group,
  147. data_handler = 'varchar'
  148. )
  149. collection.new_field( 'publications',
  150. display_name = 'Publications',
  151. group = editorial_group,
  152. data_handler = 'list',
  153. back_reference = ('publication', 'collection'))
  154. # Classe publication
  155. publication = em.new_class( 'publication',
  156. display_name = 'Publication',
  157. group = editorial_group,
  158. abstract = False,
  159. parents = entitie,)
  160. publication.new_field( 'collection',
  161. display_name = 'Collection',
  162. group = editorial_group,
  163. data_handler = 'link',
  164. back_reference = ('collection', 'publications'))
  165. #########################
  166. # Texte definition #
  167. #########################
  168. section = em.new_class( 'section',
  169. display_name = 'Section',
  170. group = editorial_group,
  171. abstract = False,
  172. parents = text)
  173. subsection = em.new_class( 'subsection',
  174. display_name = 'Subsection',
  175. group = editorial_group,
  176. abstract = False,
  177. parents = section)
  178. section.new_field( 'childs',
  179. display_name = 'Next section',
  180. group = editorial_group,
  181. data_handler = 'hierarch',
  182. allowed_classes = [subsection],
  183. back_reference = ('subsection', 'parent'))
  184. subsection.new_field( 'parent',
  185. display_name = 'Parent',
  186. group = editorial_group,
  187. data_handler = 'link',
  188. allowed_classes = [section])
  189. #####################
  190. # Persons & authors #
  191. #####################
  192. editorial_person_group = em.new_group( 'editorial_person',
  193. display_name = 'Editorial person',
  194. help_text = {
  195. 'eng': 'Introduce the concept of editorial person (authors, translator etc)',
  196. 'fre': 'Contient les classes servant à la gestion des personnes editorials (auteurs, traducteur...)',
  197. },
  198. depends = (editorial_group,)
  199. )
  200. text_person = em.new_class( 'text_person',
  201. display_name = {
  202. 'eng': 'TextPerson',
  203. 'fre': 'TextePersonne',
  204. },
  205. help_text = {
  206. 'eng': 'Represent a link between someone and a text',
  207. 'fre': 'Représente un lien entre une personne et un texte',
  208. },
  209. group = editorial_person_group,
  210. abstract = True,
  211. parents = entitie,
  212. )
  213. bref_textperson_text = text_person.new_field( 'text',
  214. display_name = {
  215. 'eng': 'Linked text',
  216. 'fre': 'Texte lié',
  217. },
  218. data_handler = 'link',
  219. allowed_classes = [text],
  220. group = editorial_person_group
  221. )
  222. bref_textperson_person = text_person.new_field( 'person',
  223. display_name = {
  224. 'eng': 'Linked person',
  225. 'fre': 'Personne liée',
  226. },
  227. data_handler = 'link',
  228. allowed_classes = [person],
  229. group = editorial_person_group,
  230. )
  231. text_person.new_field( 'role',
  232. display_name = {
  233. 'eng': 'Person role',
  234. 'fre': 'Role de la personne',
  235. },
  236. data_handler = 'varchar',
  237. group = editorial_person_group
  238. )
  239. # simple example of linked text / person
  240. person.new_field( 'linked_texts',
  241. display_name = {
  242. 'eng': 'Linked texts',
  243. 'fre': 'Textes liés',
  244. },
  245. data_handler = 'list',
  246. back_reference = ('Text', 'linked_persons'),
  247. group = editorial_person_group,
  248. allowed_classes = [text])
  249. text.new_field( 'linked_persons',
  250. display_name = {
  251. 'eng': 'Linked persons',
  252. 'fre': 'Personnes liées',
  253. },
  254. data_handler = 'list',
  255. back_reference = ('Person', 'linked_texts'),
  256. group = editorial_person_group,
  257. allowed_classes = [person])
  258. #####################
  259. # Index classes # <--- Note : using a different datasource for testing
  260. ##################### purpose
  261. index_group = em.new_group( 'index_group',
  262. display_name = 'Indexes',
  263. help_text = {
  264. 'eng': 'EM class that represents indexes'},
  265. depends = (editorial_group,))
  266. index_abstract = em.new_class(
  267. 'indexAbs',
  268. display_name = {'eng': 'Abstract Index'},
  269. help_text = {'eng': 'Abstract class common to each Index classes'},
  270. abstract = True,
  271. group = index_group,
  272. datasources = 'dummy2',
  273. parents = em_object)
  274. index_name = index_abstract.new_field(
  275. 'name',
  276. display_name = {
  277. 'eng': 'name',
  278. 'fre': 'nom'},
  279. data_handler = 'varchar')
  280. index_value = index_abstract.new_field(
  281. 'value',
  282. display_name = {
  283. 'eng': 'value',
  284. 'fre': 'valeur'},
  285. data_handler = 'varchar')
  286. text.new_field( 'indexes',
  287. display_name = {
  288. 'eng': 'Indexes',
  289. 'fre': 'Indexes'},
  290. data_handler = 'list',
  291. back_reference = ('Indexabs', 'texts'),
  292. allowed_classes = [index_abstract])
  293. index_abstract.new_field( 'texts',
  294. display_name = {
  295. 'eng': 'Text referenced by this index',
  296. 'fre': 'Texte contenant cette index'},
  297. data_handler = 'list',
  298. back_reference = ('Text', 'indexes'),
  299. allowed_classes = [text])
  300. index_theme = em.new_class(
  301. 'indexTheme',
  302. display_name = {
  303. 'eng': 'Thematic index',
  304. 'fre': 'Index thématique'},
  305. group = index_group,
  306. datasources = 'dummy2',
  307. parents = index_abstract)
  308. index_theme_theme = index_abstract.new_field(
  309. 'theme',
  310. display_name = {
  311. 'eng': 'theme'},
  312. data_handler = 'varchar')
  313. #em.save('xmlfile', filename = 'examples/em_test.xml')
  314. pickle_file = 'examples/em_test.pickle'
  315. em.save('picklefile', filename = pickle_file)
  316. print("Output written in %s" % pickle_file)