core-parser-app 2.7.0__tar.gz → 2.9.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (193) hide show
  1. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/PKG-INFO +1 -1
  2. core_parser_app-2.9.0/core_parser_app/management/commands/loadmodules.py +25 -0
  3. core_parser_app-2.9.0/core_parser_app/tools/modules/discover.py +101 -0
  4. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/modules/views/module.py +0 -1
  5. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/parser/static/core_parser_app/js/buttons.js +2 -2
  6. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app.egg-info/PKG-INFO +1 -1
  7. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app.egg-info/SOURCES.txt +7 -0
  8. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app.egg-info/requires.txt +1 -1
  9. core_parser_app-2.9.0/requirements.core.txt +1 -0
  10. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/setup.py +1 -1
  11. core_parser_app-2.9.0/tests/commands/tests_unit.py +15 -0
  12. core_parser_app-2.9.0/tests/discover/tests_unit.py +128 -0
  13. {core_parser_app-2.7.0/tests/tools/parser/parser → core_parser_app-2.9.0/tests/tools}/__init__.py +0 -0
  14. core_parser_app-2.9.0/tests/views/__init__.py +0 -0
  15. core_parser_app-2.9.0/tests/views/common/__init__.py +0 -0
  16. core_parser_app-2.9.0/tests/views/user/__init__.py +0 -0
  17. core_parser_app-2.9.0/tests/views/user/ajax/__init__.py +0 -0
  18. core_parser_app-2.7.0/core_parser_app/tools/modules/discover.py +0 -77
  19. core_parser_app-2.7.0/requirements.core.txt +0 -1
  20. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/LICENSE.md +0 -0
  21. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/MANIFEST.in +0 -0
  22. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/README.rst +0 -0
  23. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/__init__.py +0 -0
  24. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/access_control.py +0 -0
  25. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/admin.py +0 -0
  26. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/apps.py +0 -0
  27. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/components/__init__.py +0 -0
  28. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/components/data_structure/__init__.py +0 -0
  29. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/components/data_structure/admin_site.py +0 -0
  30. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/components/data_structure/api.py +0 -0
  31. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/components/data_structure/models.py +0 -0
  32. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/components/data_structure_element/__init__.py +0 -0
  33. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/components/data_structure_element/admin_site.py +0 -0
  34. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/components/data_structure_element/api.py +0 -0
  35. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/components/module/__init__.py +0 -0
  36. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/components/module/admin_site.py +0 -0
  37. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/components/module/api.py +0 -0
  38. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/components/module/models.py +0 -0
  39. {core_parser_app-2.7.0/core_parser_app/migrations → core_parser_app-2.9.0/core_parser_app/management}/__init__.py +0 -0
  40. {core_parser_app-2.7.0/core_parser_app/system → core_parser_app-2.9.0/core_parser_app/management/commands}/__init__.py +0 -0
  41. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/migrations/0001_initial.py +0 -0
  42. {core_parser_app-2.7.0/core_parser_app/tools → core_parser_app-2.9.0/core_parser_app/migrations}/__init__.py +0 -0
  43. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/settings.py +0 -0
  44. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/static/core_parser_app/common/css/modules.css +0 -0
  45. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/static/core_parser_app/common/js/module_manager.js +0 -0
  46. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/static/core_parser_app/common/js/module_manager.raw.js +0 -0
  47. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/static/core_parser_app/common/xsd/annotations.xsd +0 -0
  48. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/static/core_parser_app/common/xsd/boolean.xsd +0 -0
  49. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/static/core_parser_app/common/xsd/date.xsd +0 -0
  50. {core_parser_app-2.7.0/core_parser_app/tools/modules → core_parser_app-2.9.0/core_parser_app/system}/__init__.py +0 -0
  51. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/system/api.py +0 -0
  52. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tasks.py +0 -0
  53. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/templates/core_parser_app/common/modals/add_module.html +0 -0
  54. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/templates/core_parser_app/common/module_manager.html +0 -0
  55. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/templates/core_parser_app/common/module_manager_box.html +0 -0
  56. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/templates/core_parser_app/common/modules.html +0 -0
  57. {core_parser_app-2.7.0/core_parser_app/tools/modules/views → core_parser_app-2.9.0/core_parser_app/tools}/__init__.py +0 -0
  58. {core_parser_app-2.7.0/core_parser_app/tools/modules/views/builtin → core_parser_app-2.9.0/core_parser_app/tools/modules}/__init__.py +0 -0
  59. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/modules/exceptions.py +0 -0
  60. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/modules/sanitize.py +0 -0
  61. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/modules/static/core_parser_app/css/builtin/checkboxes.css +0 -0
  62. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/modules/static/core_parser_app/css/builtin/textarea.css +0 -0
  63. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/modules/static/core_parser_app/js/builtin/autocomplete.js +0 -0
  64. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/modules/static/core_parser_app/js/builtin/checkboxes.js +0 -0
  65. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/modules/static/core_parser_app/js/builtin/input.js +0 -0
  66. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/modules/static/core_parser_app/js/builtin/options.js +0 -0
  67. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/modules/static/core_parser_app/js/builtin/popup.js +0 -0
  68. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/modules/static/core_parser_app/js/builtin/sync_input.js +0 -0
  69. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/modules/static/core_parser_app/js/builtin/textarea.js +0 -0
  70. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/modules/static/core_parser_app/js/commons/file_uploader.js +0 -0
  71. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/modules/static/core_parser_app/js/modules.js +0 -0
  72. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/modules/static/core_parser_app/js/modules.raw.js +0 -0
  73. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/modules/static/core_parser_app/xsl/xsd2html4modules.xsl +0 -0
  74. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/modules/templates/core_parser_app/builtin/autocomplete.html +0 -0
  75. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/modules/templates/core_parser_app/builtin/checkboxes.html +0 -0
  76. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/modules/templates/core_parser_app/builtin/input.html +0 -0
  77. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/modules/templates/core_parser_app/builtin/input_button.html +0 -0
  78. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/modules/templates/core_parser_app/builtin/modal_wrapper.html +0 -0
  79. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/modules/templates/core_parser_app/builtin/options.html +0 -0
  80. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/modules/templates/core_parser_app/builtin/popup.html +0 -0
  81. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/modules/templates/core_parser_app/builtin/sync_input.html +0 -0
  82. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/modules/templates/core_parser_app/builtin/textarea.html +0 -0
  83. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/modules/templates/core_parser_app/commons/file_uploader.html +0 -0
  84. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/modules/templates/core_parser_app/module.html +0 -0
  85. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/modules/urls.py +0 -0
  86. {core_parser_app-2.7.0/core_parser_app/tools/parser → core_parser_app-2.9.0/core_parser_app/tools/modules/views}/__init__.py +0 -0
  87. {core_parser_app-2.7.0/core_parser_app/tools/parser/utils → core_parser_app-2.9.0/core_parser_app/tools/modules/views/builtin}/__init__.py +0 -0
  88. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/modules/views/builtin/autocomplete_module.py +0 -0
  89. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/modules/views/builtin/checkboxes_module.py +0 -0
  90. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/modules/views/builtin/input_button_module.py +0 -0
  91. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/modules/views/builtin/input_module.py +0 -0
  92. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/modules/views/builtin/options_module.py +0 -0
  93. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/modules/views/builtin/popup_module.py +0 -0
  94. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/modules/views/builtin/sync_input_module.py +0 -0
  95. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/modules/views/builtin/textarea_module.py +0 -0
  96. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/modules/views/views.py +0 -0
  97. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/modules/xpathaccessor.py +0 -0
  98. {core_parser_app-2.7.0/core_parser_app/utils → core_parser_app-2.9.0/core_parser_app/tools/parser}/__init__.py +0 -0
  99. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/parser/exceptions.py +0 -0
  100. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/parser/parser.py +0 -0
  101. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/parser/renderer/__init__.py +0 -0
  102. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/parser/renderer/checkbox.py +0 -0
  103. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/parser/renderer/list.py +0 -0
  104. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/parser/renderer/table.py +0 -0
  105. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/parser/renderer/xml.py +0 -0
  106. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/parser/static/core_parser_app/css/use.css +0 -0
  107. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/parser/static/core_parser_app/js/autosave.js +0 -0
  108. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/parser/static/core_parser_app/js/autosave.raw.js +0 -0
  109. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/parser/static/core_parser_app/js/autosave_checkbox.js +0 -0
  110. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/parser/static/core_parser_app/js/choice.js +0 -0
  111. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/parser/templates/renderer/default/buttons/add.html +0 -0
  112. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/parser/templates/renderer/default/buttons/collapse.html +0 -0
  113. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/parser/templates/renderer/default/buttons/delete.html +0 -0
  114. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/parser/templates/renderer/default/form-error.html +0 -0
  115. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/parser/templates/renderer/default/inputs/boolean.html +0 -0
  116. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/parser/templates/renderer/default/inputs/checkbox.html +0 -0
  117. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/parser/templates/renderer/default/inputs/date.html +0 -0
  118. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/parser/templates/renderer/default/inputs/input.html +0 -0
  119. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/parser/templates/renderer/default/inputs/select.html +0 -0
  120. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/parser/templates/renderer/default/test/sample_no_data.html +0 -0
  121. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/parser/templates/renderer/default/test/sample_with_data.html +0 -0
  122. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/parser/templates/renderer/default/ul.html +0 -0
  123. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/parser/templates/renderer/default/warning.html +0 -0
  124. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/parser/templates/renderer/list/attributes.html +0 -0
  125. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/parser/templates/renderer/list/li.html +0 -0
  126. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/parser/templates/renderer/list/ul.html +0 -0
  127. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/parser/templates/renderer/table/table.html +0 -0
  128. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/parser/templates/renderer/table/tr.html +0 -0
  129. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/parser/templates/renderer/table/wrap.html +0 -0
  130. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/parser/templates/renderer/xml/element.html +0 -0
  131. {core_parser_app-2.7.0/core_parser_app/views → core_parser_app-2.9.0/core_parser_app/tools/parser/utils}/__init__.py +0 -0
  132. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/parser/utils/rendering.py +0 -0
  133. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/tools/parser/utils/xml.py +0 -0
  134. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/urls.py +0 -0
  135. {core_parser_app-2.7.0/core_parser_app/views/admin → core_parser_app-2.9.0/core_parser_app/utils}/__init__.py +0 -0
  136. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/utils/xml.py +0 -0
  137. {core_parser_app-2.7.0/core_parser_app/views/common → core_parser_app-2.9.0/core_parser_app/views}/__init__.py +0 -0
  138. {core_parser_app-2.7.0/core_parser_app/views/user → core_parser_app-2.9.0/core_parser_app/views/admin}/__init__.py +0 -0
  139. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/views/admin/views.py +0 -0
  140. {core_parser_app-2.7.0/tests → core_parser_app-2.9.0/core_parser_app/views/common}/__init__.py +0 -0
  141. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/views/common/ajax.py +0 -0
  142. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/views/common/views.py +0 -0
  143. {core_parser_app-2.7.0/tests/access_control → core_parser_app-2.9.0/core_parser_app/views/user}/__init__.py +0 -0
  144. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app/views/user/ajax.py +0 -0
  145. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app.egg-info/dependency_links.txt +0 -0
  146. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/core_parser_app.egg-info/top_level.txt +0 -0
  147. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/pyproject.toml +0 -0
  148. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/requirements.txt +0 -0
  149. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/setup.cfg +0 -0
  150. {core_parser_app-2.7.0/tests/components → core_parser_app-2.9.0/tests}/__init__.py +0 -0
  151. {core_parser_app-2.7.0/tests/components/data_structure → core_parser_app-2.9.0/tests/access_control}/__init__.py +0 -0
  152. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/tests/access_control/test_unit.py +0 -0
  153. {core_parser_app-2.7.0/tests/components/data_structure_element → core_parser_app-2.9.0/tests/commands}/__init__.py +0 -0
  154. {core_parser_app-2.7.0/tests/components/data_structure_element/fixtures → core_parser_app-2.9.0/tests/components}/__init__.py +0 -0
  155. {core_parser_app-2.7.0/tests/components/module → core_parser_app-2.9.0/tests/components/data_structure}/__init__.py +0 -0
  156. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/tests/components/data_structure/tests_int.py +0 -0
  157. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/tests/components/data_structure/tests_unit.py +0 -0
  158. {core_parser_app-2.7.0/tests/tools → core_parser_app-2.9.0/tests/components/data_structure_element}/__init__.py +0 -0
  159. {core_parser_app-2.7.0/tests/tools/modules → core_parser_app-2.9.0/tests/components/data_structure_element/fixtures}/__init__.py +0 -0
  160. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/tests/components/data_structure_element/fixtures/fixtures.py +0 -0
  161. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/tests/components/data_structure_element/test_int_access_control.py +0 -0
  162. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/tests/components/data_structure_element/tests_int.py +0 -0
  163. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/tests/components/data_structure_element/tests_unit.py +0 -0
  164. {core_parser_app-2.7.0/tests/tools/modules/tests → core_parser_app-2.9.0/tests/components/module}/__init__.py +0 -0
  165. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/tests/components/module/tests_unit.py +0 -0
  166. {core_parser_app-2.7.0/tests/tools/parser → core_parser_app-2.9.0/tests/discover}/__init__.py +0 -0
  167. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/tests/fixtures_utils.py +0 -0
  168. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/tests/models.py +0 -0
  169. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/tests/rights.py +0 -0
  170. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/tests/test_settings.py +0 -0
  171. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/tests/test_utils.py +0 -0
  172. {core_parser_app-2.7.0/tests/tools/parser/renderer → core_parser_app-2.9.0/tests/tools/modules}/__init__.py +0 -0
  173. {core_parser_app-2.7.0/tests/tools/parser/renderer/list → core_parser_app-2.9.0/tests/tools/modules/tests}/__init__.py +0 -0
  174. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/tests/tools/modules/tests/tests_unit_checkboxes_module.py +0 -0
  175. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/tests/tools/modules/tests/tests_unit_module.py +0 -0
  176. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/tests/tools/modules/tests/tests_unit_sanitize.py +0 -0
  177. {core_parser_app-2.7.0/tests/views → core_parser_app-2.9.0/tests/tools/parser}/__init__.py +0 -0
  178. {core_parser_app-2.7.0/tests/views/common → core_parser_app-2.9.0/tests/tools/parser/parser}/__init__.py +0 -0
  179. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/tests/tools/parser/parser/test_choice.py +0 -0
  180. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/tests/tools/parser/parser/test_complex_content.py +0 -0
  181. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/tests/tools/parser/parser/test_complex_type.py +0 -0
  182. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/tests/tools/parser/parser/test_element.py +0 -0
  183. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/tests/tools/parser/parser/test_extension.py +0 -0
  184. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/tests/tools/parser/parser/test_parser.py +0 -0
  185. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/tests/tools/parser/parser/test_restriction.py +0 -0
  186. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/tests/tools/parser/parser/test_sequence.py +0 -0
  187. {core_parser_app-2.7.0/tests/views/user → core_parser_app-2.9.0/tests/tools/parser/renderer}/__init__.py +0 -0
  188. {core_parser_app-2.7.0/tests/views/user/ajax → core_parser_app-2.9.0/tests/tools/parser/renderer/list}/__init__.py +0 -0
  189. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/tests/tools/parser/renderer/list/tests_unit.py +0 -0
  190. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/tests/tools/parser/renderer/tests_unit.py +0 -0
  191. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/tests/views/common/test_unit.py +0 -0
  192. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/tests/views/user/ajax/fixtures.py +0 -0
  193. {core_parser_app-2.7.0 → core_parser_app-2.9.0}/tests/views/user/ajax/test_int_access_control.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 1.0
2
2
  Name: core_parser_app
3
- Version: 2.7.0
3
+ Version: 2.9.0
4
4
  Summary: XSD parser tools for the curator core project
5
5
  Home-page: https://github.com/usnistgov/core_parser_app
6
6
  Author: NIST IT Lab
@@ -0,0 +1,25 @@
1
+ """Load modules command
2
+ """
3
+ from django.core.management.base import BaseCommand
4
+ from django.urls import get_resolver
5
+
6
+ from core_parser_app.tools.modules.discover import reload_modules
7
+
8
+
9
+ class Command(BaseCommand):
10
+ help = "Reload modules from list of urls"
11
+
12
+ def handle(self, *args, **options):
13
+ """handle
14
+
15
+ Args:
16
+ *args:
17
+ **options:
18
+
19
+ Returns:
20
+
21
+ """
22
+ reload_modules(get_resolver().url_patterns)
23
+ self.stdout.write(
24
+ self.style.SUCCESS("Modules were reloaded in database.")
25
+ )
@@ -0,0 +1,101 @@
1
+ """Auto discovery of modules
2
+ """
3
+ import logging
4
+
5
+ from django.db import IntegrityError
6
+ from django.urls import URLPattern, URLResolver
7
+
8
+ from core_main_app.commons.exceptions import ModelError
9
+ from core_parser_app.components.module import api as module_api
10
+ from core_parser_app.components.module.models import Module
11
+ from core_parser_app.tools.modules.exceptions import ModuleError
12
+ from core_parser_app.tools.modules.views.module import AbstractModule
13
+
14
+ logger = logging.getLogger(__name__)
15
+
16
+
17
+ def reload_modules(urls):
18
+ """Reload modules in database
19
+
20
+ :return:
21
+ """
22
+ logger.info("START discover modules.")
23
+
24
+ try:
25
+ # Remove all existing modules
26
+ module_api.delete_all()
27
+ except Exception as exc:
28
+ logger.warning(str(exc))
29
+ return
30
+
31
+ # Look for modules in project urls
32
+ try:
33
+ for url in urls:
34
+ if isinstance(url, URLPattern):
35
+ _save_module(url)
36
+ elif isinstance(url, URLResolver):
37
+ for url_pattern in url.url_patterns:
38
+ _save_module(url_pattern)
39
+ except ModelError:
40
+ # something went wrong, delete already added modules
41
+ error_msg = (
42
+ "A validation error occurred during the module discovery. "
43
+ "Please provide a name to all modules urls using the name argument."
44
+ )
45
+
46
+ logger.error(
47
+ "Discover modules failed with error %s. All modules will be deleted.",
48
+ error_msg,
49
+ )
50
+ module_api.delete_all()
51
+ raise ModuleError(error_msg)
52
+ except Exception as exception:
53
+ # something went wrong, delete already added modules
54
+ logger.error(
55
+ "Discover modules failed with error %s. All modules will be deleted.",
56
+ str(exception),
57
+ )
58
+ module_api.delete_all()
59
+ raise exception
60
+
61
+ logger.info("FINISH discover modules.")
62
+
63
+
64
+ def _save_module(url_pattern):
65
+ """Save module from a URL pattern
66
+
67
+ Args:
68
+ url_pattern:
69
+
70
+ Returns:
71
+
72
+ """
73
+ module_view_name = _get_module_view_name_from_url(url_pattern)
74
+ if module_view_name.startswith("core_module_"):
75
+ module_view = AbstractModule.get_view_from_view_path(module_view_name)
76
+ if issubclass(module_view, AbstractModule):
77
+ module_object = Module(
78
+ url=url_pattern.pattern.regex.pattern,
79
+ name=url_pattern.name,
80
+ view=module_view_name,
81
+ multiple=module_view.is_managing_occurrences,
82
+ )
83
+ try:
84
+ module_api.upsert(module_object)
85
+ except IntegrityError:
86
+ logger.info(
87
+ "The module %s is already present in the database.",
88
+ url_pattern.name,
89
+ )
90
+
91
+
92
+ def _get_module_view_name_from_url(url_pattern):
93
+ """
94
+
95
+ Args:
96
+ url_pattern:
97
+
98
+ Returns:
99
+
100
+ """
101
+ return url_pattern.lookup_str if hasattr(url_pattern, "lookup_str") else ""
@@ -247,7 +247,6 @@ class AbstractModule(View, metaclass=ABCMeta):
247
247
  :param view:
248
248
  :return:
249
249
  """
250
- # module = module_api.get_by_url(url)
251
250
  pkglist = view.split(".")
252
251
 
253
252
  pkgs = ".".join(pkglist[:-1])
@@ -60,7 +60,7 @@
60
60
  // If new modules are included, we need to load the resources
61
61
  initModules();
62
62
 
63
- console.log("Element " + elementId + " successfully created");
63
+ console.log("Element " + elementId + " created");
64
64
  },
65
65
  error: function() {
66
66
  console.error("An error occurred while generating a new element.");
@@ -109,7 +109,7 @@
109
109
  }
110
110
 
111
111
  $element.remove();
112
- console.log("Element " + elementId + " successfully removed");
112
+ console.log("Element " + elementId + " removed");
113
113
  },
114
114
  error: function() {
115
115
  console.error("An error occurred while generating a new element.");
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 1.0
2
2
  Name: core-parser-app
3
- Version: 2.7.0
3
+ Version: 2.9.0
4
4
  Summary: XSD parser tools for the curator core project
5
5
  Home-page: https://github.com/usnistgov/core_parser_app
6
6
  Author: NIST IT Lab
@@ -29,6 +29,9 @@ core_parser_app/components/module/__init__.py
29
29
  core_parser_app/components/module/admin_site.py
30
30
  core_parser_app/components/module/api.py
31
31
  core_parser_app/components/module/models.py
32
+ core_parser_app/management/__init__.py
33
+ core_parser_app/management/commands/__init__.py
34
+ core_parser_app/management/commands/loadmodules.py
32
35
  core_parser_app/migrations/0001_initial.py
33
36
  core_parser_app/migrations/__init__.py
34
37
  core_parser_app/static/core_parser_app/common/css/modules.css
@@ -141,6 +144,8 @@ tests/test_settings.py
141
144
  tests/test_utils.py
142
145
  tests/access_control/__init__.py
143
146
  tests/access_control/test_unit.py
147
+ tests/commands/__init__.py
148
+ tests/commands/tests_unit.py
144
149
  tests/components/__init__.py
145
150
  tests/components/data_structure/__init__.py
146
151
  tests/components/data_structure/tests_int.py
@@ -153,6 +158,8 @@ tests/components/data_structure_element/fixtures/__init__.py
153
158
  tests/components/data_structure_element/fixtures/fixtures.py
154
159
  tests/components/module/__init__.py
155
160
  tests/components/module/tests_unit.py
161
+ tests/discover/__init__.py
162
+ tests/discover/tests_unit.py
156
163
  tests/tools/__init__.py
157
164
  tests/tools/modules/__init__.py
158
165
  tests/tools/modules/tests/__init__.py
@@ -2,4 +2,4 @@ celery
2
2
  Django
3
3
  djangorestframework
4
4
  lxml==4.9.*
5
- core-main-app==2.7.*
5
+ core-main-app==2.9.*
@@ -0,0 +1 @@
1
+ core-main-app==2.9.*
@@ -41,7 +41,7 @@ required = [req_link(r) if r.startswith("https://") else r for r in required]
41
41
 
42
42
  setup(
43
43
  name="core_parser_app",
44
- version="2.7.0",
44
+ version="2.9.0",
45
45
  description="XSD parser tools for the curator core project",
46
46
  long_description=long_desc,
47
47
  author="NIST IT Lab",
@@ -0,0 +1,15 @@
1
+ """Module command unit testing
2
+ """
3
+ from io import StringIO
4
+ from unittest.case import TestCase
5
+
6
+ from django.core.management import call_command
7
+
8
+
9
+ class TestLoadModulesCommand(TestCase):
10
+ """Test Load Modules command"""
11
+
12
+ def test_command_output(self):
13
+ out = StringIO()
14
+ call_command("loadmodules", stdout=out)
15
+ self.assertIn("Modules were reloaded in database.", out.getvalue())
@@ -0,0 +1,128 @@
1
+ """Module discover unit testing
2
+ """
3
+ from unittest.case import TestCase
4
+ from unittest.mock import patch
5
+
6
+ from django.db import IntegrityError
7
+ from django.urls import re_path
8
+
9
+ from core_main_app.commons.exceptions import ModelError
10
+ from core_parser_app.tools.modules.discover import reload_modules
11
+ from core_parser_app.tools.modules.exceptions import ModuleError
12
+ from core_parser_app.tools.modules.views.module import AbstractModule
13
+
14
+
15
+ class TestDiscoverModules(TestCase):
16
+ """Test Discover Modules"""
17
+
18
+ @patch("core_parser_app.components.module.api.delete_all")
19
+ def test_discover_modules_stops_if_an_error_occurs_when_deleting_modules(
20
+ self, mock_delete_all
21
+ ):
22
+ """test_discover_modules_stops_if_an_error_occurs_when_deleting_modules
23
+
24
+ Returns:
25
+
26
+ """
27
+ mock_delete_all.side_effect = Exception()
28
+ reload_modules([])
29
+ self.assertTrue(mock_delete_all.called)
30
+
31
+ @patch(
32
+ "core_parser_app.tools.modules.views.module.AbstractModule.get_view_from_view_path"
33
+ )
34
+ @patch(
35
+ "core_parser_app.tools.modules.discover._get_module_view_name_from_url"
36
+ )
37
+ @patch("core_parser_app.components.module.api.delete_all")
38
+ @patch("core_parser_app.components.module.api.upsert")
39
+ def test_discover_modules_deletes_modules_if_model_errors(
40
+ self,
41
+ mock_upsert,
42
+ mock_delete_all,
43
+ mock_get_module_view_name_from_url,
44
+ mock_get_view_from_view_path,
45
+ ):
46
+ """test_discover_modules_deletes_modules_if_model_errors
47
+
48
+ Returns:
49
+
50
+ """
51
+ mock_upsert.side_effect = ModelError("error")
52
+ mock_get_module_view_name_from_url.return_value = "core_module_test"
53
+ mock_get_view_from_view_path.return_value = ModuleTest
54
+ with self.assertRaises(ModuleError):
55
+ reload_modules(
56
+ [re_path("module-test", ModuleTest, name="core_module_test")]
57
+ )
58
+ self.assertEqual(mock_delete_all.call_count, 2)
59
+
60
+ @patch(
61
+ "core_parser_app.tools.modules.views.module.AbstractModule.get_view_from_view_path"
62
+ )
63
+ @patch(
64
+ "core_parser_app.tools.modules.discover._get_module_view_name_from_url"
65
+ )
66
+ @patch("core_parser_app.components.module.api.delete_all")
67
+ @patch("core_parser_app.components.module.api.upsert")
68
+ def test_discover_modules_deletes_modules_if_exception(
69
+ self,
70
+ mock_upsert,
71
+ mock_delete_all,
72
+ mock_get_module_view_name_from_url,
73
+ mock_get_view_from_view_path,
74
+ ):
75
+ """test_discover_modules_deletes_modules_if_exception
76
+
77
+ Returns:
78
+
79
+ """
80
+ mock_upsert.side_effect = Exception("error")
81
+ mock_get_module_view_name_from_url.return_value = "core_module_test"
82
+ mock_get_view_from_view_path.return_value = ModuleTest
83
+ with self.assertRaises(Exception):
84
+ reload_modules(
85
+ [re_path("module-test", ModuleTest, name="core_module_test")]
86
+ )
87
+ self.assertEqual(mock_delete_all.call_count, 2)
88
+
89
+ @patch(
90
+ "core_parser_app.tools.modules.views.module.AbstractModule.get_view_from_view_path"
91
+ )
92
+ @patch(
93
+ "core_parser_app.tools.modules.discover._get_module_view_name_from_url"
94
+ )
95
+ @patch("core_parser_app.components.module.api.delete_all")
96
+ @patch("core_parser_app.components.module.api.upsert")
97
+ def test_discover_continues_if_integrity_error(
98
+ self,
99
+ mock_upsert,
100
+ mock_delete_all,
101
+ mock_get_module_view_name_from_url,
102
+ mock_get_view_from_view_path,
103
+ ):
104
+ """test_discover_modules_deletes_modules_if_integrity_error
105
+
106
+ Returns:
107
+
108
+ """
109
+ mock_upsert.side_effect = IntegrityError("error")
110
+ mock_get_module_view_name_from_url.return_value = "core_module_test"
111
+ mock_get_view_from_view_path.return_value = ModuleTest
112
+ reload_modules(
113
+ [re_path("module-test", ModuleTest, name="core_module_test")]
114
+ )
115
+ self.assertEqual(mock_delete_all.call_count, 1)
116
+
117
+
118
+ class ModuleTest(AbstractModule):
119
+ """ModuleTest"""
120
+
121
+ def _render_module(self, request):
122
+ pass
123
+
124
+ def _retrieve_data(self, request):
125
+ pass
126
+
127
+ def _render_data(self, request):
128
+ pass
File without changes
File without changes
File without changes
@@ -1,77 +0,0 @@
1
- """Auto discovery of modules
2
- """
3
- import logging
4
-
5
- from django.db import IntegrityError
6
-
7
- from core_main_app.commons.exceptions import ModelError
8
- from core_parser_app.components.module import api as module_api
9
- from core_parser_app.components.module.models import Module
10
- from core_parser_app.tools.modules.exceptions import ModuleError
11
- from core_parser_app.tools.modules.views.module import AbstractModule
12
-
13
- logger = logging.getLogger(__name__)
14
-
15
-
16
- def discover_modules(urls):
17
- """
18
-
19
- :return:
20
- """
21
- logger.info("START discover modules.")
22
-
23
- try:
24
- # Remove all existing modules
25
- module_api.delete_all()
26
- except Exception:
27
- logger.warning("Module table is not ready yet")
28
- return
29
-
30
- # Look for modules in project urls
31
- try:
32
- for url in urls:
33
- if hasattr(url, "url_patterns"):
34
- for url_pattern in url.url_patterns:
35
- module_view_name = (
36
- url_pattern.lookup_str
37
- if hasattr(url_pattern, "lookup_str")
38
- else ""
39
- )
40
- if module_view_name.startswith("core_module_"):
41
- module_view = AbstractModule.get_view_from_view_path(
42
- module_view_name
43
- )
44
- if issubclass(module_view, AbstractModule):
45
- # FIXME: do not use private field
46
- module_object = Module(
47
- url=url_pattern.pattern._regex,
48
- name=url_pattern.name,
49
- view=module_view_name,
50
- multiple=module_view.is_managing_occurrences,
51
- )
52
- try:
53
- module_api.upsert(module_object)
54
- except IntegrityError:
55
- logger.info(
56
- "The module %s is already present in the database.",
57
- url_pattern.name,
58
- )
59
- except ModelError:
60
- # something went wrong, delete already added modules
61
- module_api.delete_all()
62
-
63
- error_msg = (
64
- "A validation error occurred during the module discovery. "
65
- "Please provide a name to all modules urls using the name argument."
66
- )
67
-
68
- logger.error("Discover modules failed with %s.", error_msg)
69
-
70
- raise ModuleError(error_msg)
71
- except Exception as exception:
72
- # something went wrong, delete already added modules
73
- module_api.delete_all()
74
- logger.error("Discover modules failed with %s.", str(exception))
75
- raise exception
76
-
77
- logger.info("FINISH discover modules.")
@@ -1 +0,0 @@
1
- core-main-app==2.7.*