diff --git a/.coveragerc b/.coveragerc index 7433c3ad1..c01027666 100644 --- a/.coveragerc +++ b/.coveragerc @@ -1,13 +1,9 @@ [run] -source = . +source = rdmo [report] omit = - rdmo/wsgi.py - rdmo/settings/* - apps/core/management/commands/* - env/* - */migrations/* + rdmo/core/management/commands/* exclude_lines = raise Exception except ImportError: diff --git a/.gitignore b/.gitignore index 49ec037d2..91d016d2b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,11 +1,11 @@ -rdmo/settings/local.py +testing/config/settings/local.py -components_root static_root -media_root +components_root docs/_build* +__pycache__ *.pyc *~ *.swp @@ -15,10 +15,9 @@ env env2 env3 -*.sqlite3 - .coverage htmlcov -themes -theme +build +dist +*.egg-info diff --git a/.travis.yml b/.travis.yml index f4e2f0fba..cc37619f7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,27 +1,35 @@ language: python -cache: - directories: - - $HOME/virtualenv +cache: pip + services: - postgresql - mysql + python: - 2.7 - 3.4 +- 3.5 +- 3.6 + env: - DB=postgres - DB=mysql - DB=sqlite3 + before_install: - sudo apt-get install pandoc + install: -- pip install -r requirements/base.txt -- pip install -r requirements/postgres.txt -- pip install -r requirements/mysql.txt -- pip install -r requirements/testing.txt +- pip install -e . +- pip install mysqlclient +- pip install psycopg2 +- pip install coveralls + before_script: -- sh -c "cp testing/settings/$DB.py rdmo/settings/local.py; fi" +- sh -c "cp testing/config/settings/$DB.py testing/config/settings/local.py; fi" + script: -- coverage run manage.py test +- coverage run testing/runtests.py + after_success: - coveralls diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 000000000..2f825479c --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,5 @@ +graft rdmo +prune config + +global-exclude __pycache__ +global-exclude *.py[co] diff --git a/README.md b/README.md deleted file mode 100644 index 75f544d1a..000000000 --- a/README.md +++ /dev/null @@ -1,21 +0,0 @@ -RDMO - Research Data Management Organiser -========================================= - -[![Build Status](https://travis-ci.org/rdmorganiser/rdmo.svg?branch=master)](https://travis-ci.org/rdmorganiser/rdmo) -[![Coverage Status](https://coveralls.io/repos/rdmorganiser/rdmo/badge.svg?branch=master&service=github)](https://coveralls.io/github/rdmorganiser/rdmo?branch=master) -[![Documentation status](https://readthedocs.org/projects/rdmo/badge/?version=latest)](http://rdmo.readthedocs.io/en/latest/?badge=latest) - -RDMO is a tool to support the systematic planning, organisation and implementation of the data management throughout the course of a research project. RDMO is funded by the Deutsche Forschungsgemeinschaft (DFG). - -
%(object)s
."
-msgstr ""
-"Sie sind dabei die Bedingung %(object)s
permanent zu entfernen."
-
-#: apps/conditions/templates/conditions/conditions_modal_delete_conditions.html:23
-#: apps/domain/templates/domain/domain_modal_delete_attributes.html:23
-#: apps/domain/templates/domain/domain_modal_delete_entities.html:44
-#: apps/options/templates/options/options_modal_delete_options.html:23
-#: apps/options/templates/options/options_modal_delete_optionsets.html:36
-#: apps/projects/templates/projects/project_confirm_delete.html:14
-#: apps/projects/templates/projects/project_questions_modal_delete_valuesets.html:35
-#: apps/projects/templates/projects/snapshot_rollback.html:14
-#: apps/questions/templates/questions/catalogs_modal_delete_catalogs.html:60
-#: apps/questions/templates/questions/catalogs_modal_delete_questions.html:22
-#: apps/questions/templates/questions/catalogs_modal_delete_questionsets.html:36
-#: apps/questions/templates/questions/catalogs_modal_delete_sections.html:53
-#: apps/questions/templates/questions/catalogs_modal_delete_subsections.html:47
-#: apps/tasks/templates/tasks/tasks_modal_delete_tasks.html:23
-#: apps/views/templates/views/views_modal_delete_views.html:23
-msgid "This action cannot be undone!"
-msgstr "Diese Aktion kann nicht rückgängig gemacht werden!"
-
-#: apps/conditions/templates/conditions/conditions_modal_delete_conditions.html:29
-#: apps/conditions/templates/conditions/conditions_modal_form_conditions.html:92
-#: apps/domain/templates/domain/domain_modal_delete_attributes.html:29
-#: apps/domain/templates/domain/domain_modal_delete_entities.html:50
-#: apps/domain/templates/domain/domain_modal_form_attributes.html:89
-#: apps/domain/templates/domain/domain_modal_form_conditions.html:30
-#: apps/domain/templates/domain/domain_modal_form_entities.html:67
-#: apps/domain/templates/domain/domain_modal_form_optionsets.html:30
-#: apps/domain/templates/domain/domain_modal_form_ranges.html:48
-#: apps/domain/templates/domain/domain_modal_form_verbosenames.html:56
-#: apps/options/templates/options/options_modal_delete_options.html:29
-#: apps/options/templates/options/options_modal_delete_optionsets.html:42
-#: apps/options/templates/options/options_modal_form_conditions.html:30
-#: apps/options/templates/options/options_modal_form_options.html:99
-#: apps/options/templates/options/options_modal_form_optionsets.html:56
-#: apps/projects/templates/projects/project_questions_modal_delete_valuesets.html:41
-#: apps/projects/templates/projects/project_questions_modal_form_valuesets.html:28
-#: apps/questions/templates/questions/catalogs_modal_delete_catalogs.html:66
-#: apps/questions/templates/questions/catalogs_modal_delete_questions.html:28
-#: apps/questions/templates/questions/catalogs_modal_delete_questionsets.html:42
-#: apps/questions/templates/questions/catalogs_modal_delete_sections.html:59
-#: apps/questions/templates/questions/catalogs_modal_delete_subsections.html:53
-#: apps/questions/templates/questions/catalogs_modal_form_catalogs.html:76
-#: apps/questions/templates/questions/catalogs_modal_form_questions.html:147
-#: apps/questions/templates/questions/catalogs_modal_form_questionsets.html:102
-#: apps/questions/templates/questions/catalogs_modal_form_sections.html:90
-#: apps/questions/templates/questions/catalogs_modal_form_subsections.html:90
-#: apps/tasks/templates/tasks/tasks_modal_delete_tasks.html:29
-#: apps/tasks/templates/tasks/tasks_modal_form_conditions.html:30
-#: apps/tasks/templates/tasks/tasks_modal_form_tasks.html:88
-#: apps/tasks/templates/tasks/tasks_modal_form_timeframes.html:66
-#: apps/views/templates/views/views_modal_delete_views.html:29
-#: apps/views/templates/views/views_modal_form_templates.html:29
-#: apps/views/templates/views/views_modal_form_views.html:88
-msgid "Close"
-msgstr "Schließen"
-
-#: apps/conditions/templates/conditions/conditions_modal_delete_conditions.html:33
-#: apps/domain/templates/domain/domain_modal_delete_attributes.html:33
-#: apps/domain/templates/domain/domain_modal_delete_entities.html:54
-#: apps/options/templates/options/options_modal_delete_options.html:33
-#: apps/options/templates/options/options_modal_delete_optionsets.html:46
-#: apps/projects/templates/projects/project_questions_modal_delete_valuesets.html:45
-#: apps/questions/templates/questions/catalogs_modal_delete_catalogs.html:70
-#: apps/questions/templates/questions/catalogs_modal_delete_questions.html:32
-#: apps/questions/templates/questions/catalogs_modal_delete_questionsets.html:46
-#: apps/questions/templates/questions/catalogs_modal_delete_sections.html:63
-#: apps/questions/templates/questions/catalogs_modal_delete_subsections.html:57
-#: apps/tasks/templates/tasks/tasks_modal_delete_tasks.html:33
-#: apps/views/templates/views/views_modal_delete_views.html:33
-msgid "Delete"
-msgstr "Entfernen"
-
-#: apps/conditions/templates/conditions/conditions_modal_form_conditions.html:96
-#: apps/domain/templates/domain/domain_modal_form_attributes.html:93
-#: apps/domain/templates/domain/domain_modal_form_conditions.html:34
-#: apps/domain/templates/domain/domain_modal_form_entities.html:71
-#: apps/domain/templates/domain/domain_modal_form_optionsets.html:34
-#: apps/domain/templates/domain/domain_modal_form_ranges.html:52
-#: apps/domain/templates/domain/domain_modal_form_verbosenames.html:60
-#: apps/options/templates/options/options_modal_form_conditions.html:34
-#: apps/options/templates/options/options_modal_form_options.html:103
-#: apps/options/templates/options/options_modal_form_optionsets.html:60
-#: apps/projects/templates/projects/project_questions.html:73
-#: apps/projects/templates/projects/project_questions_modal_form_valuesets.html:32
-#: apps/questions/templates/questions/catalogs_modal_form_catalogs.html:80
-#: apps/questions/templates/questions/catalogs_modal_form_questions.html:152
-#: apps/questions/templates/questions/catalogs_modal_form_questionsets.html:107
-#: apps/questions/templates/questions/catalogs_modal_form_sections.html:94
-#: apps/questions/templates/questions/catalogs_modal_form_subsections.html:94
-#: apps/tasks/templates/tasks/tasks_modal_form_conditions.html:34
-#: apps/tasks/templates/tasks/tasks_modal_form_tasks.html:92
-#: apps/tasks/templates/tasks/tasks_modal_form_timeframes.html:70
-#: apps/views/templates/views/views_modal_form_templates.html:33
-#: apps/views/templates/views/views_modal_form_views.html:92
-msgid "Save"
-msgstr "Speichern"
-
-#: apps/core/models.py:13
-msgid "created"
-msgstr "erstellt"
-
-#: apps/core/models.py:14
-msgid "updated"
-msgstr "zuletzt geändert"
-
-#: apps/core/templates/core/404.html:6
-msgid "Not found"
-msgstr "Seite nicht gefunden"
-
-#: apps/core/templates/core/404.html:8
-msgid "The requested URL was not found on this server."
-msgstr "Die gewünschte URL konnte nicht gefunden werden."
-
-#: apps/core/templates/core/base_footer.html:6
-msgid "Project RDMO"
-msgstr "Projekt RDMO"
-
-#: apps/core/templates/core/base_footer.html:8
-msgid ""
-"The project aims to develop a tool to support the planning of the research "
-"data management. In addition, the tool will create a textual data management "
-"plan."
-msgstr ""
-"Ziel des Projekts ist es, ein Werkzeug zur Verfügung zu stellen, das die "
-"strukturierte Planung des Forschungsdatenmanagements unterstützt und "
-"zusätzlich die textuelle Ausgabe eines Datenmanagementplans ermöglicht."
-
-#: apps/core/templates/core/base_footer.html:11
-msgid "The project is funded by the German Research Foundation."
-msgstr "Das Projekt wird von der Deutschen Forschungsgemeinschaft gefördert."
-
-#: apps/core/templates/core/base_footer.html:15
-msgid "Contact"
-msgstr "Kontakt"
-
-#: apps/core/templates/core/base_footer.html:22
-msgid "Open Source"
-msgstr "Open Source"
-
-#: apps/core/templates/core/base_footer.html:24
-msgid "RDMO is published on:"
-msgstr "RDMO ist veröffentlicht auf:"
-
-#: apps/core/templates/core/base_navigation.html:29
-msgid "Management"
-msgstr "Management"
-
-#: apps/core/templates/core/base_navigation.html:34
-#: apps/domain/app_config.py:7 apps/domain/templates/domain/domain.html:81
-#: apps/domain/templates/domain/domain_export.html:6 apps/domain/views.py:81
-#: apps/domain/views.py:83
-msgid "Domain"
-msgstr "Domäne"
-
-#: apps/core/templates/core/base_navigation.html:49
-#: apps/questions/app_config.py:7 apps/questions/models.py:401
-#: apps/questions/templates/questions/catalog_tree.html:60
-#: apps/questions/templates/questions/catalogs.html:31
-msgid "Questions"
-msgstr "Fragen"
-
-#: apps/core/templates/core/base_navigation.html:54
-#: apps/projects/templates/projects/project_detail_tasks.html:3
-#: apps/tasks/app_config.py:7 apps/tasks/models.py:76
-#: apps/tasks/templates/tasks/tasks.html:68
-#: apps/tasks/templates/tasks/tasks_export.html:6 apps/tasks/views.py:56
-msgid "Tasks"
-msgstr "Aufgaben"
-
-#: apps/core/templates/core/base_navigation.html:59
-#: apps/projects/templates/projects/project_detail_views.html:3
-#: apps/views/app_config.py:7 apps/views/models.py:69
-#: apps/views/templates/views/views.html:74
-#: apps/views/templates/views/views_export.html:6 apps/views/views.py:45
-msgid "Views"
-msgstr "Ansichten"
-
-#: apps/core/templates/core/base_navigation.html:67
-msgid "Admin"
-msgstr "Admin"
-
-#: apps/core/templates/core/base_navigation.html:84
-msgid "Language"
-msgstr "Sprache"
-
-#: apps/core/templates/core/base_navigation_account.html:4
-msgid "Update email"
-msgstr "E-Mail bearbeiten"
-
-#: apps/core/templates/core/home.html:42
-msgid ""
-"A tool to support the planning, implementation, and organisation of research "
-"data management."
-msgstr ""
-"Ein Werkzeug zur Planung, Umsetzung und der Verwaltung des "
-"Forschungsdatenmanagements."
-
-#: apps/core/utils.py:111
-msgid "This format is not supported."
-msgstr "Dieses Format wird nicht unterstützt."
-
-#: apps/core/validators.py:24
-msgid "This field may not be blank."
-msgstr "Dieses Feld darf nicht leer sein."
-
-#: apps/core/validators.py:40
-#, python-format
-msgid "%(model)s with this key already exists."
-msgstr "%(model)s mit diesem Schlüssel existiert bereits."
-
-#: apps/core/validators.py:81
-#, python-format
-msgid ""
-"%(model)s with the path \"%(path)s\" already exists. Please adjust the the "
-"Key."
-msgstr ""
-"%(model)s mit dem Pfad \"%(path)s\" existiert bereits. Bitte passen Sie den "
-"Schlüssel an."
-
-#: apps/domain/models.py:22
-msgid ""
-"The Uniform Resource Identifier of this attribute/entity set (auto-"
-"generated)."
-msgstr ""
-"Der Uniform Resource Identifier dieses Attributs/dieser Entität (automatisch "
-"erstellt)."
-
-#: apps/domain/models.py:27
-msgid "The prefix for the URI of this attribute/entity."
-msgstr "Das Präfix für die URI dieses Attributs/dieser Entität."
-
-#: apps/domain/models.py:32
-msgid "The internal identifier of this attribute/entity."
-msgstr "Das interne Bezeichner für dieses Attributs/diese Entität."
-
-#: apps/domain/models.py:37
-msgid "Additional information about this attribute/entity."
-msgstr "Zusätzliche Informationen über dieses Attribut/diese Entität."
-
-#: apps/domain/models.py:41
-msgid "Parent entity"
-msgstr "Übergeordnete Entität"
-
-#: apps/domain/models.py:42
-msgid "Parent entity in the domain model."
-msgstr "Übergeordnete Entität im Domänenmodell."
-
-#: apps/domain/models.py:46
-msgid "Parent collection"
-msgstr "Übergeordnete Sammlung"
-
-#: apps/domain/models.py:47
-msgid "Next collection entity upwards in the domain model (auto-generated)."
-msgstr ""
-"Nächste Sammlungs-Entität aufwärts im Domänenmodell (automatisch generiert)"
-
-#: apps/domain/models.py:51
-msgid "is collection"
-msgstr "Ist eine Sammlung"
-
-#: apps/domain/models.py:52
-msgid "Designates whether this attribute/entity is a collection."
-msgstr "Legt fest, ob dieses Objekt eine Sammlung ist."
-
-#: apps/domain/models.py:56
-msgid "is attribute"
-msgstr "ist ein Attribut"
-
-#: apps/domain/models.py:57
-msgid ""
-"Designates whether this attribute/entity is an attribute (auto-generated)."
-msgstr "Legt fest, ob dieses Objekt ein Attribut ist."
-
-#: apps/domain/models.py:62
-msgid "List of conditions evaluated for this attribute/entity."
-msgstr ""
-"Liste der Bedingungen die für dieses Attribut/ diese Entität ausgewertet "
-"werden."
-
-#: apps/domain/models.py:66 apps/domain/templates/domain/domain_export.html:15
-#: apps/options/models.py:92 apps/questions/models.py:266
-msgid "Path"
-msgstr "Pfad"
-
-#: apps/domain/models.py:67
-msgid "The path part of the URI of this attribute/entity (auto-generated)."
-msgstr ""
-"Der Pfad-Teil der URI für dieses Attribut/diese Entität (automatisch "
-"erstellt)."
-
-#: apps/domain/models.py:72 apps/domain/models.py:194
-#: apps/questions/models.py:276
-msgid "Attribute entity"
-msgstr "Attribut-Entitäten"
-
-#: apps/domain/models.py:73
-msgid "Attribute entities"
-msgstr "Attribut-Entität"
-
-#: apps/domain/models.py:143 apps/projects/models.py:202
-#: apps/questions/templates/questions/catalog_tree.html:67
-#: apps/questions/templates/questions/catalog_tree.html:127
-#: apps/tasks/templates/tasks/tasks_export.html:29
-msgid "Text"
-msgstr "Text"
-
-#: apps/domain/models.py:144
-msgid "URL"
-msgstr "URL"
-
-#: apps/domain/models.py:145
-msgid "Integer"
-msgstr "Ganzzahl"
-
-#: apps/domain/models.py:146
-msgid "Float"
-msgstr "Kommazahl"
-
-#: apps/domain/models.py:147
-msgid "Boolean"
-msgstr "Boolsche Variable"
-
-#: apps/domain/models.py:148
-msgid "Datetime"
-msgstr "Datum und Zeit"
-
-#: apps/domain/models.py:154
-#: apps/domain/templates/domain/domain_export.html:34
-msgid "Value type"
-msgstr "Wert-Typ"
-
-#: apps/domain/models.py:155
-msgid "Type of value for this attribute."
-msgstr "Art von Wert für dieses Attribut."
-
-#: apps/domain/models.py:159
-#: apps/domain/templates/domain/domain_export.html:40
-msgid "Unit"
-msgstr "Einheit"
-
-#: apps/domain/models.py:160
-msgid "Unit for this attribute."
-msgstr "Maßeinheit dieses Attributes."
-
-#: apps/domain/models.py:164
-#: apps/domain/templates/domain/domain_modal_form_optionsets.html:19
-#: apps/options/models.py:51
-#: apps/options/templates/options/options_export.html:6
-msgid "Option sets"
-msgstr "Optionensets"
-
-#: apps/domain/models.py:165
-msgid "Option sets for this attribute."
-msgstr "Optionenset für dieses Attribut."
-
-#: apps/domain/models.py:169 apps/domain/models.py:240
-#: apps/domain/templates/domain/domain.html:97
-#: apps/domain/templates/domain/domain_export.html:11
-#: apps/domain/templates/domain/domain_modal_form_attributes.html:11
-#: apps/domain/views.py:73 apps/projects/models.py:187
-#: apps/questions/templates/questions/catalogs_modal_form_questions.html:83
-msgid "Attribute"
-msgstr "Attribut"
-
-#: apps/domain/models.py:170
-msgid "Attributes"
-msgstr "Attribute"
-
-#: apps/domain/models.py:195
-msgid "Attribute/entity this verbose name belongs to."
-msgstr "Attribut/Entität zu dem dieser Anzeigenname gehört."
-
-#: apps/domain/models.py:199
-msgid "Name (en)"
-msgstr "Name (en)"
-
-#: apps/domain/models.py:200
-msgid "English name displayed for this attribute/entity (e.g. project)."
-msgstr "Englischer Name der für dieses Attribut/diese Entität angezeigt wird."
-
-#: apps/domain/models.py:204
-msgid "Name (de)"
-msgstr "Name (de)"
-
-#: apps/domain/models.py:205
-msgid "German name displayed for this attribute/entity (e.g. Projekt)."
-msgstr "Deutscher Name der für dieses Attribut/diese Entität angezeigt wird."
-
-#: apps/domain/models.py:209
-msgid "Plural name (en)"
-msgstr "Name (Plural, en)"
-
-#: apps/domain/models.py:210
-msgid ""
-"English plural name displayed for this attribute/entity (e.g. projects)."
-msgstr ""
-"Englischer Name (Plural) der für dieses Attribut/diese Entität angezeigt "
-"wird."
-
-#: apps/domain/models.py:214
-msgid "Plural name (de)"
-msgstr "Name (Plural, de)"
-
-#: apps/domain/models.py:215
-msgid "German plural name displayed for this attribute/entity (e.g. Projekte)."
-msgstr ""
-"Deutscher Name (Plural) der für dieses Attribut/diese Entität angezeigt wird."
-
-#: apps/domain/models.py:219
-#: apps/domain/templates/domain/domain_export.html:82
-#: apps/domain/templates/domain/domain_export.html:86
-#: apps/domain/templates/domain/domain_modal_form_verbosenames.html:11
-msgid "Verbose name"
-msgstr "Anzeigename"
-
-#: apps/domain/models.py:220
-msgid "Verbose names"
-msgstr "Anzeigename"
-
-#: apps/domain/models.py:241
-msgid "Attribute this verbose name belongs to."
-msgstr "Attribute zu dem dieser Anzeigenname gehört."
-
-#: apps/domain/models.py:244
-#: apps/domain/templates/domain/domain_export.html:70
-#: apps/questions/templates/questions/catalog_tree.html:103
-#: apps/questions/templates/questions/catalog_tree.html:161
-msgid "Minimum"
-msgstr "Minimum"
-
-#: apps/domain/models.py:245
-msgid "Minimal value for this attribute."
-msgstr "Minimaler Wert für dieses Attribut."
-
-#: apps/domain/models.py:248
-#: apps/domain/templates/domain/domain_export.html:71
-#: apps/questions/templates/questions/catalog_tree.html:104
-#: apps/questions/templates/questions/catalog_tree.html:162
-msgid "Maximum"
-msgstr "Maximum"
-
-#: apps/domain/models.py:249
-msgid "Maximum value for this attribute."
-msgstr "Maximaler Wert für dieses Attribut."
-
-#: apps/domain/models.py:252
-#: apps/domain/templates/domain/domain_export.html:72
-#: apps/questions/templates/questions/catalog_tree.html:105
-#: apps/questions/templates/questions/catalog_tree.html:163
-msgid "Step"
-msgstr "Schrittgröße"
-
-#: apps/domain/models.py:253
-msgid "Step in which this attribute can be incremented/decremented."
-msgstr "Schritte in denen dieses Attribut erhöht oder verringert werden kann."
-
-#: apps/domain/models.py:258
-#: apps/domain/templates/domain/domain_export.html:66
-#: apps/domain/templates/domain/domain_modal_form_ranges.html:11
-#: apps/questions/templates/questions/catalog_tree.html:99
-#: apps/questions/templates/questions/catalog_tree.html:157
-msgid "Range"
-msgstr "Bereich"
-
-#: apps/domain/models.py:259
-msgid "Ranges"
-msgstr "Bereiche"
-
-#: apps/domain/templates/domain/domain.html:39
-msgid "Create new entity"
-msgstr "Neue Entität erstellen"
-
-#: apps/domain/templates/domain/domain.html:44
-msgid "Create new attribute"
-msgstr "Neues Attribut erstellen"
-
-#: apps/domain/templates/domain/domain.html:64
-msgid "CSV"
-msgstr "CSV"
-
-#: apps/domain/templates/domain/domain.html:96
-#: apps/domain/templates/domain/domain_export.html:11
-#: apps/domain/templates/domain/domain_modal_form_entities.html:11
-#: apps/domain/views.py:73
-#: apps/questions/templates/questions/catalogs_modal_form_questionsets.html:70
-msgid "Entity"
-msgstr "Entität"
-
-#: apps/domain/templates/domain/domain_export.html:27
-msgid "Collection"
-msgstr "Sammlung"
-
-#: apps/domain/templates/domain/domain_export.html:28
-#: apps/projects/models.py:247
-msgid "yes"
-msgstr "Ja"
-
-#: apps/domain/templates/domain/domain_export.html:28
-#: apps/projects/models.py:249
-msgid "no"
-msgstr "Nein"
-
-#: apps/domain/templates/domain/domain_export.html:87
-msgid "Verbose name plural"
-msgstr "Anzeigename, plural"
-
-#: apps/domain/templates/domain/domain_modal_delete_attributes.html:11
-#: apps/domain/templates/domain/domain_modal_delete_entities.html:15
-#: apps/domain/templates/domain/domain_options.html:75
-msgid "Delete attribute"
-msgstr "Attribut entfernen"
-
-#: apps/domain/templates/domain/domain_modal_delete_attributes.html:17
-#, python-format
-msgid ""
-"You are about to permanently delete the attribute %(object)s
."
-msgstr ""
-"Sie sind dabei das Attribut %(object)s
permanent zu entfernen."
-
-#: apps/domain/templates/domain/domain_modal_delete_entities.html:12
-#: apps/domain/templates/domain/domain_options.html:41
-msgid "Delete entity"
-msgstr "Entität entfernen"
-
-#: apps/domain/templates/domain/domain_modal_delete_entities.html:22
-#, python-format
-msgid "You are about to permanently delete the entity %(object)s
."
-msgstr ""
-"Sie sind dabei die Entität %(object)s
permanent zu entfernen."
-
-#: apps/domain/templates/domain/domain_modal_delete_entities.html:28
-msgid "This will also delete the following attributes:"
-msgstr "Es werden auch die folgenden Attribute entfernt:"
-
-#: apps/domain/templates/domain/domain_modal_form_attributes.html:22
-msgid "The prefix for the URI of this attribute."
-msgstr "Das Präfix für die URI dieses Attributs."
-
-#: apps/domain/templates/domain/domain_modal_form_attributes.html:31
-msgid "The internal identifier of this attribute."
-msgstr "Der interne Bezeichner diese Attributs."
-
-#: apps/domain/templates/domain/domain_modal_form_attributes.html:40
-msgid "Additional internal information about this attribute."
-msgstr "Zusätzliche interne Informationen über dieses Attribut."
-
-#: apps/domain/templates/domain/domain_modal_form_attributes.html:81
-msgid ""
-"Designates whether this attribute can have several values (for checkboxes or "
-"multiple answers)."
-msgstr ""
-"Legt fest, ob dieses Objekt mehrere Werte haben kann (für Ankreuzkästchen "
-"oder mehrere Antworten)."
-
-#: apps/domain/templates/domain/domain_modal_form_conditions.html:24
-#: apps/domain/templates/domain/domain_modal_form_optionsets.html:24
-#: apps/options/templates/options/options_modal_form_conditions.html:24
-#: apps/tasks/templates/tasks/tasks_modal_form_conditions.html:24
-msgid "Hold down Control, or Command on a Mac, to select more than one."
-msgstr ""
-"Halten Sie die Strg-Taste (⌘ für Mac) während des Klickens gedrückt, um "
-"mehrere Einträge auszuwählen."
-
-#: apps/domain/templates/domain/domain_modal_form_entities.html:22
-msgid "The prefix for the URI of this entity."
-msgstr "Das Präfix für die URI die dieser Entität."
-
-#: apps/domain/templates/domain/domain_modal_form_entities.html:31
-msgid "The internal identifier of this entity."
-msgstr "Der interne Bezeichner für diese Entität."
-
-#: apps/domain/templates/domain/domain_modal_form_entities.html:40
-msgid "Additional internal information about this entity."
-msgstr "Zusätzliche interne Informationen über diese Entität."
-
-#: apps/domain/templates/domain/domain_modal_form_entities.html:59
-msgid "Designates whether this entity can have several sets of values."
-msgstr "Legt fest, ob dieses Objekt mehrere Sets von Werten haben kann."
-
-#: apps/domain/templates/domain/domain_options.html:8
-msgid "Add attribute or entity"
-msgstr "Attribut oder Entität hinzufügen"
-
-#: apps/domain/templates/domain/domain_options.html:14
-msgid "Add attribute"
-msgstr "Attribut hinzufügen"
-
-#: apps/domain/templates/domain/domain_options.html:19
-msgid "Add entity"
-msgstr "Entität hinzufügen"
-
-#: apps/domain/templates/domain/domain_options.html:26
-msgid "Update entity"
-msgstr "Entität bearbeiten"
-
-#: apps/domain/templates/domain/domain_options.html:31
-#: apps/domain/templates/domain/domain_options.html:65
-msgid "Update verbose name"
-msgstr "Anzeigename bearbeiten"
-
-#: apps/domain/templates/domain/domain_options.html:36
-#: apps/domain/templates/domain/domain_options.html:70
-#: apps/options/templates/options/options.html:89
-#: apps/tasks/templates/tasks/tasks.html:81
-msgid "Update conditions"
-msgstr "Bedingung bearbeiten"
-
-#: apps/domain/templates/domain/domain_options.html:50
-msgid "Update attribute"
-msgstr "Attribut bearbeiten"
-
-#: apps/domain/templates/domain/domain_options.html:55
-msgid "Update range"
-msgstr "Bereich bearbeiten"
-
-#: apps/domain/templates/domain/domain_options.html:60
-msgid "Update options"
-msgstr "Optionen bearbeiten"
-
-#: apps/domain/views.py:74
-msgid "collection"
-msgstr "Sammlung"
-
-#: apps/options/models.py:25
-msgid "The prefix for the URI of this option set."
-msgstr "Das Präfix für die URI dieses Optionenset."
-
-#: apps/options/models.py:30
-msgid "The internal identifier of this option set."
-msgstr "Der interne Bezeichner für dieses Optionenset."
-
-#: apps/options/models.py:35
-msgid "Additional internal information about this option set."
-msgstr "Zusätzliche interne Informationen über dieses Optionenset."
-
-#: apps/options/models.py:39 apps/options/models.py:107
-#: apps/questions/models.py:47 apps/questions/models.py:120
-#: apps/questions/models.py:200 apps/questions/models.py:286
-msgid "Order"
-msgstr "Reihenfolge"
-
-#: apps/options/models.py:40
-msgid "The position of this option set in lists."
-msgstr "Die Position von diesem Optionenset in Listen."
-
-#: apps/options/models.py:45
-msgid "The list of conditions evaluated for this option set."
-msgstr ""
-"Die Liste der Bedingungen die für dieses Optionenset ausgewertet werden."
-
-#: apps/options/models.py:50 apps/options/models.py:102
-#: apps/options/templates/options/options.html:97
-#: apps/options/templates/options/options_export.html:10
-#: apps/options/templates/options/options_modal_form_optionsets.html:11
-msgid "Option set"
-msgstr "Optionenset"
-
-#: apps/options/models.py:78
-msgid "The Uniform Resource Identifier of this option (auto-generated)."
-msgstr "Der Uniform Resource Identifier dieser Option (automatisch erstellt)."
-
-#: apps/options/models.py:83
-msgid "The prefix for the URI of this option."
-msgstr "Das Präfix für die URI dieser Option."
-
-#: apps/options/models.py:88
-msgid "The internal identifier of this option."
-msgstr "Der interne Bezeichner für diese Option."
-
-#: apps/options/models.py:93
-msgid "The path part of the URI for this option (auto-generated)."
-msgstr "Der Pfad-Teil der URI für diese Option (automatisch erstellt)."
-
-#: apps/options/models.py:98
-msgid "Additional internal information about this option."
-msgstr "Zusätzliche interne Informationen über diese Option."
-
-#: apps/options/models.py:103
-msgid "The option set this option belongs to."
-msgstr "Das Optionenset zu dem diese Option gehört."
-
-#: apps/options/models.py:108 apps/questions/models.py:121
-#: apps/questions/models.py:201
-msgid "Position in lists."
-msgstr "Position in Listen."
-
-#: apps/options/models.py:112 apps/questions/models.py:386
-#: apps/tasks/models.py:60
-msgid "Text (en)"
-msgstr "Text (en)"
-
-#: apps/options/models.py:113
-msgid "The English text displayed for this option."
-msgstr "Der englische Text für diese Option."
-
-#: apps/options/models.py:117 apps/questions/models.py:390
-#: apps/tasks/models.py:64
-msgid "Text (de)"
-msgstr "Text (de)"
-
-#: apps/options/models.py:118
-msgid "The German text displayed for this option."
-msgstr "Der deutsche Text für diese Option."
-
-#: apps/options/models.py:122
-msgid "Additional input"
-msgstr "Zusätzliche Eingabe"
-
-#: apps/options/models.py:123
-msgid "Designates whether an additional input is possible for this option."
-msgstr "Legt fest, ob eine zusätzliche Eingabe für diese Option möglich ist."
-
-#: apps/options/models.py:128 apps/options/templates/options/options.html:113
-#: apps/options/templates/options/options_modal_delete_optionsets.html:30
-#: apps/options/templates/options/options_modal_form_options.html:11
-#: apps/projects/models.py:207
-msgid "Option"
-msgstr "Option"
-
-#: apps/options/templates/options/options.html:39
-msgid "Create new option set"
-msgstr "Neues Optionenset erstellen"
-
-#: apps/options/templates/options/options.html:44
-msgid "Create new option"
-msgstr "Neue Option erstellen"
-
-#: apps/options/templates/options/options.html:81
-msgid "Add option"
-msgstr "Option hinzufügen"
-
-#: apps/options/templates/options/options.html:85
-msgid "Update option set"
-msgstr "Optionenset bearbeiten"
-
-#: apps/options/templates/options/options.html:93
-#: apps/options/templates/options/options_modal_delete_optionsets.html:11
-msgid "Delete option set"
-msgstr "Optionenset entfernen"
-
-#: apps/options/templates/options/options.html:105
-msgid "Update option"
-msgstr "Option bearbeiten"
-
-#: apps/options/templates/options/options.html:109
-#: apps/options/templates/options/options_modal_delete_options.html:11
-msgid "Delete option"
-msgstr "Option entfernen"
-
-#: apps/options/templates/options/options_modal_delete_options.html:17
-#, python-format
-msgid "You are about to permanently delete the option %(object)s
."
-msgstr ""
-"Sie sind dabei die Option %(object)s
permanent zu entfernen."
-
-#: apps/options/templates/options/options_modal_delete_optionsets.html:17
-#, python-format
-msgid ""
-"You are about to permanently delete the option set %(object)s
."
-msgstr ""
-"Sie sind dabei das Optionenset %(object)s
permanent zu "
-"entfernen."
-
-#: apps/options/templates/options/options_modal_delete_optionsets.html:23
-#: apps/questions/templates/questions/catalogs_modal_delete_catalogs.html:24
-#: apps/questions/templates/questions/catalogs_modal_delete_questionsets.html:23
-#: apps/questions/templates/questions/catalogs_modal_delete_sections.html:23
-#: apps/questions/templates/questions/catalogs_modal_delete_subsections.html:23
-msgid "Important! This will also delete the following items:"
-msgstr ""
-"Important! Es werden auch die folgenden Objekte entfernt:"
-
-#: apps/projects/app_config.py:7 apps/projects/models.py:46
-msgid "Projects"
-msgstr "Projekte"
-
-#: apps/projects/forms.py:58
-msgid "Username or email"
-msgstr "Benutzername oder E-Mail"
-
-#: apps/projects/forms.py:59 apps/projects/models.py:24
-#: apps/projects/models.py:92
-#: apps/projects/templates/projects/project_detail_memberships.html:12
-msgid "User"
-msgstr "Benutzer"
-
-#: apps/projects/forms.py:60
-msgid "The username or email for the user of this membership."
-msgstr "Der Benutzername oder die Email für diese Mitgliedschaft."
-
-#: apps/projects/forms.py:69
-msgid "Please enter a valid username or email."
-msgstr "Bitte geben Sie einen gültigen Benutzernamen oder Email ein."
-
-#: apps/projects/forms.py:72
-msgid "The user is already a member of the project."
-msgstr "Der Benutzer ist bereits ein Mitglied dieses Projektes."
-
-#: apps/projects/models.py:25
-msgid "The list of users for this project."
-msgstr "Die Liste der Benutzer für dieses Projekt."
-
-#: apps/projects/models.py:29 apps/projects/models.py:123
-#: apps/projects/templates/projects/project_questions_modal_form_valuesets.html:19
-#: apps/tasks/templates/tasks/tasks_export.html:25
-#: apps/views/templates/views/views_export.html:25
-msgid "Title"
-msgstr "Titel"
-
-#: apps/projects/models.py:30
-msgid "The title for this project."
-msgstr "Der Titel für dieses Projekt."
-
-#: apps/projects/models.py:34 apps/projects/models.py:128
-#: apps/projects/templates/projects/project_detail.html:78
-#: apps/projects/templates/projects/project_detail_snapshots.html:14
-#: apps/projects/templates/projects/project_detail_tasks.html:10
-#: apps/projects/templates/projects/project_detail_views.html:10
-msgid "Description"
-msgstr "Beschreibung"
-
-#: apps/projects/models.py:35
-msgid "A description for this project (optional)."
-msgstr "Ein Beschreibung für dieses Projekt (optional)."
-
-#: apps/projects/models.py:39 apps/questions/models.py:63
-#: apps/questions/models.py:115
-#: apps/questions/templates/questions/catalog_tree.html:3
-#: apps/questions/templates/questions/catalogs_modal_delete_catalogs.html:11
-#: apps/questions/templates/questions/catalogs_modal_form_catalogs.html:11
-#: apps/questions/templates/questions/catalogs_sidebar.html:3
-msgid "Catalog"
-msgstr "Katalog"
-
-#: apps/projects/models.py:40
-msgid "The catalog which will be used for this project."
-msgstr "Der Fragenkatalog der für dieses Projekt verwendet wird."
-
-#: apps/projects/models.py:45 apps/projects/models.py:87
-#: apps/projects/models.py:118 apps/projects/models.py:177
-msgid "Project"
-msgstr "Projekt"
-
-#: apps/projects/models.py:79
-msgid "Owner"
-msgstr "Besitzer"
-
-#: apps/projects/models.py:80
-msgid "Manager"
-msgstr "Manager"
-
-#: apps/projects/models.py:81
-msgid "Author"
-msgstr "Autor"
-
-#: apps/projects/models.py:82
-msgid "Guest"
-msgstr "Gast"
-
-#: apps/projects/models.py:88
-msgid "The project for this membership."
-msgstr "Das Projekt zu dem diese Mitgliedschaft gehört."
-
-#: apps/projects/models.py:93
-msgid "The user for this membership."
-msgstr "Der Benutzer für diese Mitgliedschaft."
-
-#: apps/projects/models.py:97
-#: apps/projects/templates/projects/project_detail_memberships.html:14
-#: apps/projects/templates/projects/projects.html:32
-msgid "Role"
-msgstr "Rolle"
-
-#: apps/projects/models.py:98
-msgid "The role for this membership."
-msgstr "Die Rolle für diese Mitgliedschaft."
-
-#: apps/projects/models.py:103
-msgid "Membership"
-msgstr "Mitgliedschaft"
-
-#: apps/projects/models.py:104
-msgid "Memberships"
-msgstr "Mitgliedschaften"
-
-#: apps/projects/models.py:119
-msgid "The project this snapshot belongs to."
-msgstr "Das Projekt zu dem dieser Snapshot gehört."
-
-#: apps/projects/models.py:124
-msgid "The title for this snapshot."
-msgstr "Der Titel für diesen Snapshot."
-
-#: apps/projects/models.py:129
-msgid "A description for this snapshot (optional)."
-msgstr "Ein Beschreibung für diesen Snapshot (optional)."
-
-#: apps/projects/models.py:134 apps/projects/models.py:182
-#: apps/projects/templates/projects/project_detail_snapshots.html:13
-msgid "Snapshot"
-msgstr "Snapshot"
-
-#: apps/projects/models.py:135
-#: apps/projects/templates/projects/project_answers.html:9
-#: apps/projects/templates/projects/project_detail_snapshots.html:7
-#: apps/projects/templates/projects/project_view.html:9
-msgid "Snapshots"
-msgstr "Snapshots"
-
-#: apps/projects/models.py:178
-msgid "The project this value belongs to."
-msgstr "Das Projekt zu dem dieser Wert gehört."
-
-#: apps/projects/models.py:183
-msgid "The snapshot this value belongs to."
-msgstr "Der Snapshot zu dem dieser Wert gehört."
-
-#: apps/projects/models.py:188
-msgid "The attribute this value belongs to."
-msgstr "Das Attribut zu dem dieser Wert gehört."
-
-#: apps/projects/models.py:192
-msgid "Set index"
-msgstr "Set-Index"
-
-#: apps/projects/models.py:193
-msgid ""
-"The position of this value in an entity collection (i.e. in the question set)"
-msgstr ""
-"Die Position von diesem Wert in einer Entität (einem Fragenset) in Listen."
-
-#: apps/projects/models.py:197
-msgid "Collection index"
-msgstr "Sammlungs-Index"
-
-#: apps/projects/models.py:198
-msgid "The position of this value in an attribute collection."
-msgstr "Die Position von diesem Wert in einem Sammlungs-Attribut."
-
-#: apps/projects/models.py:203
-msgid "The string stored for this value."
-msgstr "Die Zeichenkette die für diesen Wert gespeichert wird."
-
-#: apps/projects/models.py:208
-msgid "The option stored for this value."
-msgstr "Die Option die für diesen Wert gespeichert wird."
-
-#: apps/projects/models.py:212
-msgid "Value"
-msgstr "Wert"
-
-#: apps/projects/models.py:213
-msgid "Values"
-msgstr "Werte"
-
-#: apps/projects/models.py:224
-msgid "current"
-msgstr "aktuell"
-
-#: apps/projects/serializers.py:118
-msgid "item"
-msgstr "Eintrag"
-
-#: apps/projects/serializers.py:119
-msgid "items"
-msgstr "Einträge"
-
-#: apps/projects/serializers.py:151
-msgid "set"
-msgstr "Set"
-
-#: apps/projects/serializers.py:152
-msgid "sets"
-msgstr "Sets"
-
-#: apps/projects/templates/projects/membership_confirm_delete.html:8
-#: apps/projects/templates/projects/membership_confirm_delete.html:17
-#: apps/projects/templates/projects/project_detail_memberships.html:36
-msgid "Delete membership"
-msgstr "Mitgliedschaft entfernen"
-
-#: apps/projects/templates/projects/membership_confirm_delete.html:12
-#, python-format
-msgid ""
-"You are about to remove the user %(user)s from the project "
-"%(title)s."
-msgstr ""
-"Sie sind dabei den User %(user)s aud dem Projekt "
-"%(title)s zu entfernen."
-
-#: apps/projects/templates/projects/membership_form.html:9
-#: apps/projects/templates/projects/membership_form.html:11
-#: apps/projects/templates/projects/project_detail_memberships.html:31
-msgid "Update membership"
-msgstr "Mitgliedschaft bearbeiten"
-
-#: apps/projects/templates/projects/membership_form.html:15
-msgid "Add member to project"
-msgstr "Mitglied zu Projekt hinzufügen"
-
-#: apps/projects/templates/projects/membership_form.html:17
-#: apps/projects/templates/projects/project_detail.html:52
-msgid "Add member"
-msgstr "Mitglied hinzufügen"
-
-#: apps/projects/templates/projects/project_answers.html:14
-#: apps/projects/templates/projects/project_view.html:14
-msgid "Current"
-msgstr "Aktuell"
-
-#: apps/projects/templates/projects/project_answers.html:32
-#: apps/projects/templates/projects/project_questions_done.html:13
-#: apps/projects/templates/projects/project_questions_sidebar.html:34
-#: apps/projects/templates/projects/project_view.html:32
-msgid "Back to project overview"
-msgstr "Zurück zum Projekt"
-
-#: apps/projects/templates/projects/project_answers.html:58
-#: apps/projects/templates/projects/project_answers_export.html:6
-#, python-format
-msgid "Answers for %(title)s"
-msgstr "Antworten für %(title)s"
-
-#: apps/projects/templates/projects/project_answers.html:61
-msgid ""
-"In the following, we have summarized the information about the project as "
-"given by you and your collaborators."
-msgstr ""
-"Im Folgenden haben wir die von Ihnen eingegebenen Informationen über das "
-"Projekt noch einmal zusammengefasst."
-
-#: apps/projects/templates/projects/project_confirm_delete.html:7
-#: apps/projects/templates/projects/project_confirm_delete.html:17
-#: apps/projects/templates/projects/project_detail.html:21
-msgid "Delete project"
-msgstr "Projekt entfernen"
-
-#: apps/projects/templates/projects/project_confirm_delete.html:10
-#, python-format
-msgid ""
-"You are about to permanently delete the project %(object)s."
-msgstr ""
-"Sie sind dabei das Projekt %(object)s
permanent zu entfernen."
-
-#: apps/projects/templates/projects/project_detail.html:16
-msgid "Update project information"
-msgstr "Projektinformationen bearbeiten"
-
-#: apps/projects/templates/projects/project_detail.html:29
-msgid "Answer questions"
-msgstr "Fragen beantworten"
-
-#: apps/projects/templates/projects/project_detail.html:35
-#: apps/projects/templates/projects/project_detail_snapshots.html:32
-#: apps/projects/templates/projects/project_questions_done.html:9
-msgid "View answers"
-msgstr "Antworten anzeigen"
-
-#: apps/projects/templates/projects/project_detail.html:43
-#: apps/projects/templates/projects/snapshot_form.html:17
-msgid "Create snapshot"
-msgstr "Snapshot erstellen"
-
-#: apps/projects/templates/projects/project_detail.html:61
-msgid "Export project as XML"
-msgstr "Projekt als XML exportieren"
-
-#: apps/projects/templates/projects/project_detail.html:68
-msgid "Back to projects overview"
-msgstr "Zurück zu den Projekten"
-
-#: apps/projects/templates/projects/project_detail.html:86
-msgid "No description available."
-msgstr "Keine Beschreibung vorhanden."
-
-#: apps/projects/templates/projects/project_detail_memberships.html:8
-msgid "Members"
-msgstr "Mitglieder"
-
-#: apps/projects/templates/projects/project_detail_memberships.html:13
-msgid "E-Mail"
-msgstr "E-Mail"
-
-#: apps/projects/templates/projects/project_detail_snapshots.html:15
-#: apps/projects/templates/projects/projects.html:33
-msgid "Created"
-msgstr "Erstellt"
-
-#: apps/projects/templates/projects/project_detail_snapshots.html:36
-#: apps/projects/templates/projects/snapshot_form.html:9
-#: apps/projects/templates/projects/snapshot_form.html:11
-msgid "Update snapshot"
-msgstr "Snapshot bearbeiten"
-
-#: apps/projects/templates/projects/project_detail_snapshots.html:41
-#: apps/projects/templates/projects/snapshot_rollback.html:7
-msgid "Rollback to snapshot"
-msgstr "Auf Snapshot zurücksetzen"
-
-#: apps/projects/templates/projects/project_detail_snapshots.html:52
-msgid "No snapshots found."
-msgstr "Keine Snapshots gefunden."
-
-#: apps/projects/templates/projects/project_detail_tasks.html:9
-#: apps/tasks/models.py:75 apps/tasks/models.py:110
-#: apps/tasks/templates/tasks/tasks.html:93
-#: apps/tasks/templates/tasks/tasks_export.html:10
-#: apps/tasks/templates/tasks/tasks_modal_form_tasks.html:11
-#: apps/tasks/templates/tasks/tasks_modal_form_timeframes.html:11
-msgid "Task"
-msgstr "Aufgabe"
-
-#: apps/projects/templates/projects/project_detail_tasks.html:11
-#: apps/tasks/models.py:136
-msgid "Time frame"
-msgstr "Zeitraum"
-
-#: apps/projects/templates/projects/project_detail_tasks.html:34
-msgid "No active tasks found."
-msgstr "Keine aktiven Aufgaben gefunden."
-
-#: apps/projects/templates/projects/project_detail_views.html:9
-#: apps/views/models.py:68 apps/views/templates/views/views.html:96
-#: apps/views/templates/views/views_export.html:10
-#: apps/views/templates/views/views_modal_form_views.html:11
-msgid "View"
-msgstr "Ansicht"
-
-#: apps/projects/templates/projects/project_detail_views.html:22
-msgid "Display view"
-msgstr "Ansicht anzeigen"
-
-#: apps/projects/templates/projects/project_detail_views.html:32
-msgid "No views found."
-msgstr "Keine Ansichten gefunden."
-
-#: apps/projects/templates/projects/project_form.html:9
-#: apps/projects/templates/projects/project_form.html:11
-msgid "Update project"
-msgstr "Projekt bearbeiten"
-
-#: apps/projects/templates/projects/project_form.html:15
-#: apps/projects/templates/projects/projects.html:18
-msgid "Create new project"
-msgstr "Neues Projekt erstellen"
-
-#: apps/projects/templates/projects/project_form.html:17
-msgid "Create project"
-msgstr "Neues Projekt erstellen"
-
-#: apps/projects/templates/projects/project_questions.html:44
-msgid "Questionnaire for project {$ service.project.title $}"
-msgstr "Fragebogen für Projekt {$ service.project.title $}"
-
-#: apps/projects/templates/projects/project_questions.html:76
-msgid "Save and proceed"
-msgstr "Sichern und fortfahren"
-
-#: apps/projects/templates/projects/project_questions.html:82
-msgid "Back"
-msgstr "Zurück"
-
-#: apps/projects/templates/projects/project_questions.html:85
-msgid "Skip"
-msgstr "Überspringen"
-
-#: apps/projects/templates/projects/project_questions_add_field_button.html:6
-#: apps/projects/templates/projects/project_questions_questionset_head.html:15
-#: apps/projects/templates/projects/project_questions_questionset_head.html:36
-#, python-format
-msgid "Add %(name)s"
-msgstr "%(name)s hinzufügen"
-
-#: apps/projects/templates/projects/project_questions_add_field_help.html:4
-#, python-format
-msgid ""
-"Please enter the %(name_plural)s line by line. You can add %(name_plural)s "
-"using the green button and remove them using the red cross (×)."
-msgstr ""
-"Bitte nutzen Sie für die %(name_plural)s jeweils eine eigene Zeile. Sie "
-"können weitere %(name_plural)s mit dem grünen Knopf hinzufügen und mit dem "
-"roten Kreuz (×) entfernen."
-
-#: apps/projects/templates/projects/project_questions_done.html:5
-msgid "Thank you for filling out the questionnaire."
-msgstr "Vielen Dank für das Beantworten der Fragen."
-
-#: apps/projects/templates/projects/project_questions_form_group_select.html:16
-#: apps/projects/templates/projects/project_questions_form_group_select.html:41
-msgid "Please select"
-msgstr "Bitte auswählen"
-
-#: apps/projects/templates/projects/project_questions_form_group_yesno.html:18
-#: apps/projects/templates/projects/project_questions_form_group_yesno.html:50
-msgid "Yes"
-msgstr "Ja"
-
-#: apps/projects/templates/projects/project_questions_form_group_yesno.html:24
-#: apps/projects/templates/projects/project_questions_form_group_yesno.html:56
-msgid "No"
-msgstr "Nein"
-
-#: apps/projects/templates/projects/project_questions_modal_delete_valuesets.html:17
-#, python-format
-msgid ""
-"You are about to permanently delete the %(name)s %(object)s."
-msgstr ""
-"Sie sind dabei den %(name)s %(object)s permanent zu "
-"entfernen."
-
-#: apps/projects/templates/projects/project_questions_modal_delete_valuesets.html:23
-#, python-format
-msgid "You are about to permanently delete this %(name)s."
-msgstr "Sie sind dabei diesen %(name)s permanent zu entfernen."
-
-#: apps/projects/templates/projects/project_questions_modal_delete_valuesets.html:29
-#, python-format
-msgid ""
-"This includes all given answers for this %(name)s on all pages, not just "
-"this one."
-msgstr ""
-"Dies umfasst alle gegebenen Antworten für dieses %(name)s auf allen Seiten, "
-"nicht nur dieser."
-
-#: apps/projects/templates/projects/project_questions_modal_form_valuesets.html:20
-#, python-format
-msgid "Please give the %(name)s a meaningful name."
-msgstr "Bitte geben Sie dem %(name)s einen aussagekräftigen Namen."
-
-#: apps/projects/templates/projects/project_questions_questionset_head.html:7
-#, python-format
-msgid ""
-"Please fill in the form for each %(name)s. The different %(name_plural)s "
-"will be referred to in following questions. You can add a new %(name)s using "
-"the green button. Once created, you can edit or delete %(name_plural)s using "
-"the buttons in the top right corner."
-msgstr ""
-"Bitte füllen Sie das Formular für jeden %(name)s aus. Die verschiedenen "
-"%(name_plural)s werden eventuell in späteren Fragen wieder verwendet. Sie "
-"können einen neuen %(name)s mit dem grünen Knopf hinzufügen. Bereits "
-"angelegte %(name_plural)s können mit den Knöpfen oben rechts bearbeitet oder "
-"wieder entfernt werden."
-
-#: apps/projects/templates/projects/project_questions_questionset_head.html:43
-#, python-format
-msgid "Update %(name)s"
-msgstr "%(name)s bearbeiten"
-
-#: apps/projects/templates/projects/project_questions_questionset_head.html:48
-#: apps/projects/templates/projects/project_questions_remove_field.html:4
-#, python-format
-msgid "Remove %(name)s"
-msgstr "%(name)s entfernen"
-
-#: apps/projects/templates/projects/project_questions_sidebar.html:4
-msgid "Progress"
-msgstr "Fortschritt"
-
-#: apps/projects/templates/projects/project_questions_sidebar.html:13
-msgid "Navigation"
-msgstr "Navigation"
-
-#: apps/projects/templates/projects/project_questions_sidebar.html:16
-msgid "Please note that using the navigation will discard any usaved input."
-msgstr ""
-"Bitte beachten sie das durch die Benutzung der Navigation ungesicherte "
-"Eingaben verworfen werden."
-
-#: apps/projects/templates/projects/project_questions_sidebar.html:22
-msgid "skip to previous page"
-msgstr "Zur vorherigen Frage springen"
-
-#: apps/projects/templates/projects/project_questions_sidebar.html:27
-msgid "skip to next page"
-msgstr "Zur nächsten Frage springen"
-
-#: apps/projects/templates/projects/project_questions_sidebar.html:38
-msgid "Overview"
-msgstr "Übersicht"
-
-#: apps/projects/templates/projects/project_view.html:61
-msgid "Error"
-msgstr "Fehler"
-
-#: apps/projects/templates/projects/project_view.html:64
-msgid "There has been a problem creating the view. Please contact support."
-msgstr ""
-"Beim Erstellen der Ansicht ist ein Fehler aufgetreten. Bitte kontaktieren "
-"Sie den Support."
-
-#: apps/projects/templates/projects/projects.html:8
-msgid "My Data"
-msgstr "Meine Daten"
-
-#: apps/projects/templates/projects/projects.html:12
-msgid "My Groups"
-msgstr "Meine Gruppen"
-
-#: apps/projects/templates/projects/projects.html:26
-msgid "My Projects"
-msgstr "Meine Projekte"
-
-#: apps/projects/templates/projects/snapshot_form.html:15
-msgid "Create new snapshot"
-msgstr "Neuen Snapshot erstellen"
-
-#: apps/projects/templates/projects/snapshot_rollback.html:10
-#, python-format
-msgid ""
-"You are about to reset all values to the snapshot %(title)s"
-"strong>. All newer values will be deleted."
-msgstr ""
-"Sie sind dabei alle Werte auf den Snapshot %(title)s "
-"zurückzusetzen. Alle neueren Werte werden entfernt."
-
-#: apps/projects/templates/projects/snapshot_rollback.html:17
-msgid "Rollback"
-msgstr "Zurücksetzen"
-
-#: apps/projects/views.py:351 apps/projects/views.py:373
-msgid "This field is required."
-msgstr "Dieses Feld wird benötigt."
-
-#: apps/questions/models.py:28
-msgid "The Uniform Resource Identifier of this catalog (auto-generated)."
-msgstr ""
-"Der Uniform Resource Identifier dieses Katalogs (automatisch erstellt)."
-
-#: apps/questions/models.py:33
-msgid "The prefix for the URI of this catalog."
-msgstr "Das Präfix für die URI dieses Katalogs."
-
-#: apps/questions/models.py:38
-msgid "The internal identifier of this catalog."
-msgstr "Der interne Bezeichner für diesen Katalog."
-
-#: apps/questions/models.py:43
-msgid "Additional internal information about this catalog."
-msgstr "Zusätzliche interne Informationen über diesen Katalog."
-
-#: apps/questions/models.py:48
-msgid "The position of this catalog in lists."
-msgstr "Die Position von diesem Katalog in Listen."
-
-#: apps/questions/models.py:52 apps/questions/models.py:125
-#: apps/questions/models.py:205 apps/tasks/models.py:51
-#: apps/views/models.py:47
-msgid "Title (en)"
-msgstr "Titel (en)"
-
-#: apps/questions/models.py:53
-msgid "The English title for this catalog."
-msgstr "Der englische Titel für diesen Katalog."
-
-#: apps/questions/models.py:57 apps/questions/models.py:130
-#: apps/questions/models.py:210 apps/tasks/models.py:56
-#: apps/views/models.py:52
-msgid "Title (de)"
-msgstr "Titel (de)"
-
-#: apps/questions/models.py:58
-msgid "The German title for this catalog."
-msgstr "Der deutsche Titel für diesen Katalog."
-
-#: apps/questions/models.py:64
-msgid "Catalogs"
-msgstr "Kataloge"
-
-#: apps/questions/models.py:91
-msgid "The Uniform Resource Identifier of this section (auto-generated)."
-msgstr ""
-"Der Uniform Resource Identifier diese Abschnitts (automatisch erstellt)."
-
-#: apps/questions/models.py:96
-msgid "The prefix for the URI of this section."
-msgstr "Das Präfix für die URI die dieses Abschnitts."
-
-#: apps/questions/models.py:101
-msgid "The internal identifier of this section."
-msgstr "Der interne Bezeichner für diesen Abschnitt."
-
-#: apps/questions/models.py:105 apps/questions/models.py:185
-msgid "Label"
-msgstr "Label"
-
-#: apps/questions/models.py:106
-msgid "The path part of the URI of this section (auto-generated)."
-msgstr "Der Pfad-Teil der URI für diesen Abschnitt (automatisch erstellt)."
-
-#: apps/questions/models.py:111
-msgid "Additional internal information about this section."
-msgstr "Zusätzliche interne Informationen über diesen Abschnitt."
-
-#: apps/questions/models.py:116
-msgid "The catalog this section belongs to."
-msgstr "Der Katalog zu dem dieser Abschnitt gehört."
-
-#: apps/questions/models.py:126
-msgid "The English title for this section."
-msgstr "Der englische Titel für diesen Abschnitt."
-
-#: apps/questions/models.py:131
-msgid "The German title for this section."
-msgstr "Der deutsche Titel für diesen Unterabschnitt."
-
-#: apps/questions/models.py:136 apps/questions/models.py:195
-#: apps/questions/templates/questions/catalog_tree.html:15
-#: apps/questions/templates/questions/catalogs.html:42
-#: apps/questions/templates/questions/catalogs_modal_delete_catalogs.html:31
-#: apps/questions/templates/questions/catalogs_modal_delete_sections.html:11
-#: apps/questions/templates/questions/catalogs_modal_form_sections.html:11
-msgid "Section"
-msgstr "Abschnitt"
-
-#: apps/questions/models.py:137
-msgid "Sections"
-msgstr "Unterabschnitt"
-
-#: apps/questions/models.py:171
-msgid "The Uniform Resource Identifier of this subsection (auto-generated)."
-msgstr ""
-"Der Uniform Resource Identifier dieses Unterabschnitts (automatisch "
-"erstellt)."
-
-#: apps/questions/models.py:176
-msgid "The prefix for the URI of this subsection."
-msgstr "Das Präfix für die URI dieses Unterabschnitts."
-
-#: apps/questions/models.py:181
-msgid "The internal identifier of this subsection."
-msgstr "Der interne Bezeichner für diesen Unterabschnitt."
-
-#: apps/questions/models.py:186
-msgid "The path part of the URI of this subsection (auto-generated)."
-msgstr ""
-"Der Pfad-Teil der URI für diesen Unterabschnitt (automatisch erstellt)."
-
-#: apps/questions/models.py:191
-msgid "Additional internal information about this subsection."
-msgstr "Zusätzliche interne Informationen über diesen Unterabschnitt."
-
-#: apps/questions/models.py:196
-msgid "The section this subsection belongs to."
-msgstr "Der Abschnitt zu dem dieser Unterabschnitt gehört."
-
-#: apps/questions/models.py:206
-msgid "The English title for this subsection."
-msgstr "Der englische Titel für diesen Unterabschnitt."
-
-#: apps/questions/models.py:211
-msgid "The German title for this subsection."
-msgstr "Der deutsche Titel für diesen Unterabschnitt."
-
-#: apps/questions/models.py:216 apps/questions/models.py:281
-#: apps/questions/templates/questions/catalog_tree.html:27
-#: apps/questions/templates/questions/catalogs.html:55
-#: apps/questions/templates/questions/catalogs_modal_delete_catalogs.html:35
-#: apps/questions/templates/questions/catalogs_modal_delete_sections.html:30
-#: apps/questions/templates/questions/catalogs_modal_delete_subsections.html:11
-#: apps/questions/templates/questions/catalogs_modal_form_subsections.html:11
-msgid "Subsection"
-msgstr "Unterabschnitt"
-
-#: apps/questions/models.py:217
-msgid "Subsections"
-msgstr "Unterabschnitte"
-
-#: apps/questions/models.py:252
-msgid ""
-"The Uniform Resource Identifier of this question/questionset (auto-"
-"generated)."
-msgstr ""
-"Der Uniform Resource Identifier dieser Frage/dieses Fragensets (automatisch "
-"erstellt)."
-
-#: apps/questions/models.py:257
-msgid "The prefix for the URI of this question/questionset."
-msgstr "Das Präfix für die URI dieser Frage/dieses Fragensets."
-
-#: apps/questions/models.py:262
-msgid "The internal identifier of this question/questionset."
-msgstr "Der interne Bezeichner für diese Frage/dieses Fragenset."
-
-#: apps/questions/models.py:267
-msgid "The path part of the URI of this question/questionset (auto-generated)."
-msgstr ""
-"Der Pfad-Teil der URI für diese Frage/Fragenset (automatisch erstellt)."
-
-#: apps/questions/models.py:272
-msgid "Additional internal information about this question/questionset."
-msgstr "Zusätzliche interne Informationen über diese Frage/dieses Fragenset."
-
-#: apps/questions/models.py:277
-msgid "The attribute/entity this question/questionset belongs to."
-msgstr "Das Attribut/die Entität zu dem diese Frage/dieses Fragenset gehört."
-
-#: apps/questions/models.py:282
-msgid "The subsection this question/questionset belongs to."
-msgstr "Der Unterabschnitt zu dem diese Frage/dieses Fragenset gehört."
-
-#: apps/questions/models.py:287
-msgid "The position of this question/questionset in lists."
-msgstr "Die Position von dieser Frage/diesem Fragenset in Listen."
-
-#: apps/questions/models.py:291 apps/views/models.py:57
-msgid "Help (en)"
-msgstr "Hilfe (en)"
-
-#: apps/questions/models.py:292
-msgid "The English help text for this question/questionset."
-msgstr "Der englische Hilfetext für diese Frage/dieses Fragenset."
-
-#: apps/questions/models.py:296 apps/views/models.py:62
-msgid "Help (de)"
-msgstr "Hilfe (de)"
-
-#: apps/questions/models.py:297
-msgid "The German help text for this question/questionset."
-msgstr "Der deutsche Hilfetext für diese Frage/dieses Fragenset."
-
-#: apps/questions/models.py:302
-msgid "Question entity"
-msgstr "Fragenobjekt"
-
-#: apps/questions/models.py:303
-msgid "Question entities"
-msgstr "Fragenobjekte"
-
-#: apps/questions/models.py:382
-msgid "Parent"
-msgstr "Übergeordnete Entität"
-
-#: apps/questions/models.py:383
-msgid "The question set this question belongs to."
-msgstr "Das Fragenset zu dem diese Frage gehört."
-
-#: apps/questions/models.py:387
-msgid "The English text for this question."
-msgstr "Der englische Text für diese Frage."
-
-#: apps/questions/models.py:391
-msgid "The German text for this question."
-msgstr "Der deutsche Text für diese Frage."
-
-#: apps/questions/models.py:395
-msgid "Widget type"
-msgstr "Widget-Typ"
-
-#: apps/questions/models.py:396
-msgid "Type of widget for this question."
-msgstr "Art von Widget für diese Frage."
-
-#: apps/questions/models.py:400
-#: apps/questions/templates/questions/catalog_tree.html:124
-#: apps/questions/templates/questions/catalogs.html:86
-#: apps/questions/templates/questions/catalogs.html:105
-#: apps/questions/templates/questions/catalogs_modal_delete_catalogs.html:43
-#: apps/questions/templates/questions/catalogs_modal_delete_questions.html:11
-#: apps/questions/templates/questions/catalogs_modal_delete_questionsets.html:30
-#: apps/questions/templates/questions/catalogs_modal_delete_sections.html:38
-#: apps/questions/templates/questions/catalogs_modal_delete_subsections.html:34
-#: apps/questions/templates/questions/catalogs_modal_form_questions.html:11
-msgid "Question"
-msgstr "Frage"
-
-#: apps/questions/serializers.py:202 apps/questions/serializers.py:244
-msgid "No attribute selected."
-msgstr "Kein Attribut ausgewählt."
-
-#: apps/questions/serializers.py:232
-msgid "No entity selected."
-msgstr "Keine Entität ausgewählt."
-
-#: apps/questions/serializers.py:238
-msgid "Entity and questions attributes mismatch."
-msgstr "Entität und Attribute der Fragen passen nicht."
-
-#: apps/questions/templates/questions/catalog_tree.html:41
-#: apps/questions/templates/questions/catalogs.html:72
-#: apps/questions/templates/questions/catalogs_modal_delete_catalogs.html:40
-#: apps/questions/templates/questions/catalogs_modal_delete_questionsets.html:11
-#: apps/questions/templates/questions/catalogs_modal_delete_sections.html:35
-#: apps/questions/templates/questions/catalogs_modal_delete_subsections.html:31
-#: apps/questions/templates/questions/catalogs_modal_form_questionsets.html:11
-msgid "Question set"
-msgstr "Fragenset"
-
-#: apps/questions/templates/questions/catalog_tree.html:46
-#: apps/questions/templates/questions/catalog_tree.html:73
-#: apps/questions/templates/questions/catalog_tree.html:133
-msgid "Help"
-msgstr "Hilfe"
-
-#: apps/questions/templates/questions/catalogs_modal_delete_catalogs.html:17
-#, python-format
-msgid ""
-"You are about to permanently delete the catalog "
-"%(object)s
."
-msgstr ""
-"Sie sind dabei den Katalog %(object)s
"
-"permanent zu entfernen."
-
-#: apps/questions/templates/questions/catalogs_modal_delete_questions.html:17
-#, python-format
-msgid ""
-"You are about to permanently delete the question %(object)s
."
-msgstr ""
-"Sie sind dabei die Frage %(object)s
"
-"permanent zu entfernen."
-
-#: apps/questions/templates/questions/catalogs_modal_delete_questionsets.html:17
-#, python-format
-msgid ""
-"You are about to permanently delete the question set %(object)s
."
-msgstr ""
-"Sie sind dabei das Fragenset %(object)s
"
-"permanent zu entfernen."
-
-#: apps/questions/templates/questions/catalogs_modal_delete_sections.html:17
-#, python-format
-msgid ""
-"You are about to permanently delete the section "
-"%(object)s
."
-msgstr ""
-"Sie sind dabei den Abschnitt %(object)s
"
-"permanent zu entfernen."
-
-#: apps/questions/templates/questions/catalogs_modal_delete_subsections.html:17
-#, python-format
-msgid ""
-"You are about to permanently delete the subsection %(object)s
."
-msgstr ""
-"Sie sind dabei den Unterabschnitt %(object)s"
-"code> permanent zu entfernen."
-
-#: apps/questions/templates/questions/catalogs_modal_form_questions.html:22
-msgid "The prefix for the URI of this question."
-msgstr "Das Präfix für die URI dieser Frage."
-
-#: apps/questions/templates/questions/catalogs_modal_form_questions.html:31
-msgid "The internal identifier of this question."
-msgstr "Der interne Bezeichner für diese Frage."
-
-#: apps/questions/templates/questions/catalogs_modal_form_questions.html:40
-msgid "Additional internal information about this question."
-msgstr "Zusätzliche interne Informationen über diesen Abschnitt."
-
-#: apps/questions/templates/questions/catalogs_modal_form_questions.html:50
-msgid "The subsection this question belongs to."
-msgstr "Der Unterabschnitt für diese Frage."
-
-#: apps/questions/templates/questions/catalogs_modal_form_questions.html:73
-msgid "The position of this question in lists."
-msgstr "Die Position dieser Frage in Listen."
-
-#: apps/questions/templates/questions/catalogs_modal_form_questions.html:84
-msgid "The attribute this question belongs to."
-msgstr "Das Attribut zu dem diese Frage gehört."
-
-#: apps/questions/templates/questions/catalogs_modal_form_questions.html:129
-msgid "The English help text for this question."
-msgstr "Der englische Hilfetext für diese Frage."
-
-#: apps/questions/templates/questions/catalogs_modal_form_questions.html:138
-msgid "The German help text for this question."
-msgstr "Der deutsche Hilfetext für diese Frage."
-
-#: apps/questions/templates/questions/catalogs_modal_form_questions.html:151
-#: apps/questions/templates/questions/catalogs_modal_form_questionsets.html:106
-msgid "Copy"
-msgstr "Kopieren"
-
-#: apps/questions/templates/questions/catalogs_modal_form_questionsets.html:22
-msgid "The prefix for the URI of this questionset."
-msgstr "Das Präfix für die URI dieses Fragensets."
-
-#: apps/questions/templates/questions/catalogs_modal_form_questionsets.html:31
-msgid "The internal identifier of this questionset."
-msgstr "Der interne Bezeichner für dieses Fragenset."
-
-#: apps/questions/templates/questions/catalogs_modal_form_questionsets.html:40
-msgid "Additional internal information about this questionset."
-msgstr "Zusätzliche interne Informationen über diese Fragenset."
-
-#: apps/questions/templates/questions/catalogs_modal_form_questionsets.html:50
-msgid "The subsection this questionset belongs to."
-msgstr "Der Unterabschnitt für dieses Fragenset."
-
-#: apps/questions/templates/questions/catalogs_modal_form_questionsets.html:62
-msgid "The position of this questionset in lists."
-msgstr "Die Position von diesem Fragenset in Listen."
-
-#: apps/questions/templates/questions/catalogs_modal_form_questionsets.html:71
-msgid "The entity this questionset belongs to."
-msgstr "Das Entität zu dem dieses Fragenset gehört."
-
-#: apps/questions/templates/questions/catalogs_modal_form_questionsets.html:84
-msgid "The English help text for this questionset."
-msgstr "Der englische Hilfetext für dieses Fragenset."
-
-#: apps/questions/templates/questions/catalogs_modal_form_questionsets.html:93
-msgid "The German help text for this questionset."
-msgstr "Der deutsche Hilfetext für dieses Fragenset."
-
-#: apps/questions/templates/questions/catalogs_options_questions.html:4
-msgid "Update question"
-msgstr "Frage bearbeiten"
-
-#: apps/questions/templates/questions/catalogs_options_questions.html:9
-msgid "Copy question"
-msgstr "Frage kopieren"
-
-#: apps/questions/templates/questions/catalogs_options_questions.html:14
-msgid "Delete question"
-msgstr "Frage entfernen"
-
-#: apps/questions/templates/questions/catalogs_options_questionsets.html:4
-#: apps/questions/templates/questions/catalogs_options_subsections.html:12
-msgid "Add question"
-msgstr "Frage hinzufügen"
-
-#: apps/questions/templates/questions/catalogs_options_questionsets.html:9
-msgid "Update question set"
-msgstr "Fragenset bearbeiten"
-
-#: apps/questions/templates/questions/catalogs_options_questionsets.html:14
-msgid "Copy question set"
-msgstr "Fragenset kopieren"
-
-#: apps/questions/templates/questions/catalogs_options_questionsets.html:19
-msgid "Delete question set"
-msgstr "Fragenset entfernen"
-
-#: apps/questions/templates/questions/catalogs_options_sections.html:4
-msgid "Add subsection"
-msgstr "Unterabschnitt hinzufügen"
-
-#: apps/questions/templates/questions/catalogs_options_sections.html:9
-msgid "Update section"
-msgstr "Abschnitt bearbeiten"
-
-#: apps/questions/templates/questions/catalogs_options_sections.html:14
-msgid "Delete section"
-msgstr "Abschnitt entfernen"
-
-#: apps/questions/templates/questions/catalogs_options_subsections.html:6
-msgid "Show options"
-msgstr "Optionen anzeigen"
-
-#: apps/questions/templates/questions/catalogs_options_subsections.html:17
-msgid "Add question set"
-msgstr "Fragenset hinzufügen"
-
-#: apps/questions/templates/questions/catalogs_options_subsections.html:24
-msgid "Update subsection"
-msgstr "Unterabschnitt bearbeiten"
-
-#: apps/questions/templates/questions/catalogs_options_subsections.html:29
-msgid "Delete subsection"
-msgstr "Unterabschnitt entfernen"
-
-#: apps/questions/templates/questions/catalogs_sidebar.html:25
-msgid "Update catalog details"
-msgstr "Katalogeigenschaften bearbeiten"
-
-#: apps/questions/templates/questions/catalogs_sidebar.html:30
-msgid "Delete catalog"
-msgstr "Katalog entfernen"
-
-#: apps/questions/templates/questions/catalogs_sidebar.html:38
-msgid "Create new catalog"
-msgstr "Neuen Katalog erstellen"
-
-#: apps/questions/templates/questions/catalogs_sidebar.html:43
-msgid "Create new section"
-msgstr "Neuen Abschnitt erstellen"
-
-#: apps/questions/templates/questions/catalogs_sidebar.html:48
-msgid "Create new subsection"
-msgstr "Neuen Unterabschnitt erstellen"
-
-#: apps/questions/templates/questions/catalogs_sidebar.html:53
-msgid "Create new questionset"
-msgstr "Neues Fragenset erstellen"
-
-#: apps/questions/templates/questions/catalogs_sidebar.html:58
-msgid "Create new question"
-msgstr "Neue Frage erstellen"
-
-#: apps/tasks/models.py:32
-msgid "The Uniform Resource Identifier of this task (auto-generated)."
-msgstr "Der Uniform Resource Identifier dieser Aufgabe (automatisch erstellt)."
-
-#: apps/tasks/models.py:37
-msgid "The prefix for the URI of this task."
-msgstr "Das Präfix für die URI dieser Aufgabe."
-
-#: apps/tasks/models.py:42
-msgid "The internal identifier of this task."
-msgstr "Der interne Bezeichner für diese Aufgabe."
-
-#: apps/tasks/models.py:47
-msgid "Additional internal information about this task."
-msgstr "Zusätzliche interne Informationen über diese Aufgabe."
-
-#: apps/tasks/models.py:52
-msgid "The English title for this task."
-msgstr "Der englische Titel für diese Aufgabe."
-
-#: apps/tasks/models.py:57
-msgid "The German title for this task."
-msgstr "Der deutsche Titel für diese Aufgabe."
-
-#: apps/tasks/models.py:61
-msgid "The English text for this task."
-msgstr "Der englische Text für diese Aufgabe."
-
-#: apps/tasks/models.py:65
-msgid "The German text for this task."
-msgstr "Der deutsche Text für diese Aufgabe."
-
-#: apps/tasks/models.py:70
-msgid "The list of conditions evaluated for this task."
-msgstr "Die Liste der Bedingungen die für diese Aufgabe ausgewertet werden."
-
-#: apps/tasks/models.py:111
-msgid "The task this time frame belongs to."
-msgstr "Die Aufgabe zu der dieser Zeitraum gehört."
-
-#: apps/tasks/models.py:115 apps/tasks/templates/tasks/tasks_export.html:55
-msgid "Start date attribute"
-msgstr "Anfangsdatums-Attribut"
-
-#: apps/tasks/models.py:116
-msgid "The Attribute that is setting the start date for this task."
-msgstr "Das Attribut das des Anfangsdatum für die Aufgabe festlegt."
-
-#: apps/tasks/models.py:120 apps/tasks/templates/tasks/tasks_export.html:56
-msgid "End date attribute"
-msgstr "Enddatums-Attribute"
-
-#: apps/tasks/models.py:121
-msgid ""
-"The Attribute that is setting the end date for this task (optional, if no "
-"end date attribute is given, the start date attribute sets also the end "
-"date)."
-msgstr ""
-"Das Attribut das des Enddatum für die Aufgabe festlegt (Optional, wenn kein "
-"Enddatums-Attribut angegeben wird, bestimmt das Anfangsdatums-Attribut auch "
-"das Enddatum)."
-
-#: apps/tasks/models.py:125 apps/tasks/templates/tasks/tasks_export.html:57
-msgid "Days before"
-msgstr "Tage davor"
-
-#: apps/tasks/models.py:126
-msgid "Additional days before the start date."
-msgstr "Zusätzliche Tage vor dem Anfangsdatum."
-
-#: apps/tasks/models.py:130 apps/tasks/templates/tasks/tasks_export.html:58
-msgid "Days after"
-msgstr "Tage danach"
-
-#: apps/tasks/models.py:131
-msgid "Additional days after the end date."
-msgstr "Zusätzliche Tage nach dem Enddatum."
-
-#: apps/tasks/models.py:137
-msgid "Time frames"
-msgstr "Zeiträume"
-
-#: apps/tasks/templates/tasks/tasks.html:39
-msgid "Create new task"
-msgstr "Neue Aufgabe erstellen"
-
-#: apps/tasks/templates/tasks/tasks.html:77
-msgid "Update task"
-msgstr "Aufgabe bearbeiten"
-
-#: apps/tasks/templates/tasks/tasks.html:85
-msgid "Update time frame"
-msgstr "Zeitrahmen bearbeiten."
-
-#: apps/tasks/templates/tasks/tasks.html:89
-#: apps/tasks/templates/tasks/tasks_modal_delete_tasks.html:11
-msgid "Delete task"
-msgstr "Aufgabe entfernen"
-
-#: apps/tasks/templates/tasks/tasks_export.html:51
-msgid "Timeframe"
-msgstr "Zeitraum"
-
-#: apps/tasks/templates/tasks/tasks_modal_delete_tasks.html:17
-msgid ""
-"You are about to permanently delete the task {$ service.values.title "
-"$}."
-msgstr ""
-"Sie sind dabei die Aufgabe %(object)s
permanent zu entfernen."
-
-#: apps/views/models.py:23
-msgid "The Uniform Resource Identifier of this view (auto-generated)."
-msgstr "Der Uniform Resource Identifier dieser Ansicht (automatisch erstellt)."
-
-#: apps/views/models.py:28
-msgid "The prefix for the URI of this view."
-msgstr "Das Präfix für die URI dieser Ansicht."
-
-#: apps/views/models.py:33
-msgid "The internal identifier of this view."
-msgstr "Der interne Bezeichner für diese Ansicht."
-
-#: apps/views/models.py:38
-msgid "Additional internal information about this view."
-msgstr "Zusätzliche interne Informationen über diese Ansicht."
-
-#: apps/views/models.py:42 apps/views/templates/views/views_export.html:33
-#: apps/views/templates/views/views_modal_form_templates.html:11
-msgid "Template"
-msgstr "Vorlage"
-
-#: apps/views/models.py:43
-msgid "The template for this view, written in Django template language."
-msgstr ""
-"Das Template für diese Ansicht, in der Django-Template-Language verfasst."
-
-#: apps/views/models.py:48
-msgid "The English title for this view."
-msgstr "Der englische Titel für diese Ansicht."
-
-#: apps/views/models.py:53
-msgid "The German title for this view."
-msgstr "Der deutsche Titel für diesen Ansicht."
-
-#: apps/views/models.py:58
-msgid "The English help text for this view."
-msgstr "Der englische Hilfetext für diese Ansicht."
-
-#: apps/views/models.py:63
-msgid "The German help text for this view."
-msgstr "Der deutsche Hilfetext für diese Ansicht."
-
-#: apps/views/templates/views/views.html:45
-msgid "Create new view"
-msgstr "Neue Ansicht erstellen"
-
-#: apps/views/templates/views/views.html:83
-msgid "Update view"
-msgstr "Ansicht bearbeiten"
-
-#: apps/views/templates/views/views.html:87
-msgid "Edit template"
-msgstr "Template bearbeiten"
-
-#: apps/views/templates/views/views.html:91
-#: apps/views/templates/views/views_modal_delete_views.html:11
-msgid "Delete view"
-msgstr "Ansicht entfernen"
-
-#: apps/views/templates/views/views_export.html:29
-msgid "Help text"
-msgstr "Hilfetext"
-
-#: apps/views/templates/views/views_modal_delete_views.html:17
-msgid ""
-"You are about to permanently delete the view {$ service.values.title "
-"$}."
-msgstr ""
-"Sie sind dabei die Ansicht %(object)s
permanent zu entfernen."
-
-#: apps/views/templates/views/views_modal_form_templates.html:37
-msgid "Save and close"
-msgstr "Sichern und schließen"
-
-#: rdmo/settings/base.py:123
-msgid "German"
-msgstr "Deutsch"
-
-#: rdmo/settings/base.py:124
-msgid "English"
-msgstr "Englisch"
-
-#: rdmo/settings/base.py:201
-msgid "PDF"
-msgstr "PDF"
-
-#: rdmo/settings/base.py:202
-msgid "Rich Text Format"
-msgstr "Rich Text Format"
-
-#: rdmo/settings/base.py:203
-msgid "Open Office"
-msgstr "Open Office"
-
-#: rdmo/settings/base.py:204
-msgid "Microsoft Office"
-msgstr "Microsoft Office"
-
-#: rdmo/settings/base.py:205
-msgid "HTML"
-msgstr "HTML"
-
-#: rdmo/settings/base.py:206
-msgid "Markdown"
-msgstr "Markdown"
-
-#: rdmo/settings/base.py:207
-msgid "mediawiki"
-msgstr "mediawiki"
-
-#: rdmo/settings/base.py:208
-msgid "LaTeX"
-msgstr "LaTeX"
-
-#, fuzzy
-#~| msgid "Optionsets "
-#~ msgid "Optionsets"
-#~ msgstr "Optionensets"
-
-#~ msgid "Optionset"
-#~ msgstr "Optionenset"
-
-#~ msgid "Tasks "
-#~ msgstr "Aufgaben"
-
-#~ msgid "Task "
-#~ msgstr "Aufgabe"
-
-#~ msgid "Views "
-#~ msgstr "Ansichten"
-
-#~ msgid "Domain "
-#~ msgstr "Domäne"
-
-#~ msgid "Condition "
-#~ msgstr "Bedingung"
-
-#~ msgid "Conditions "
-#~ msgstr "Bedingungen"
-
-#~ msgid ""
-#~ "You are about to permanently delete the attribute set %(object)s"
-#~ "code>."
-#~ msgstr ""
-#~ "Sie sind dabei die Entität %(object)s
permanent zu entfernen."
-
-#~ msgid ""
-#~ "The internal identifier of this condition. The URI will be generated from "
-#~ "this key."
-#~ msgstr ""
-#~ "Der interne Identifikator für diese Bedingung. Die URI wird hieraus "
-#~ "generiert."
-
-#~ msgid "Prefix"
-#~ msgstr "Präfix"
-
-#~ msgid "Source Attribute"
-#~ msgstr "Quell-Attribut"
-
-#~ msgid "Target text"
-#~ msgstr "Ziel Text"
-
-#~ msgid "Target option"
-#~ msgstr "Ziel Option"
-
-#~ msgid ""
-#~ "The internal identifier of this attribute/entity. The URI will be "
-#~ "generated from this key."
-#~ msgstr ""
-#~ "Der interne Identifikator für dieses Attribute/diese Entität. Die URI "
-#~ "wird hieraus generiert."
-
-#~ msgid "Type"
-#~ msgstr "Typ"
-
-#~ msgid ""
-#~ "You are about to permanently delete the attribute {$ service.values."
-#~ "title $}
."
-#~ msgstr ""
-#~ "Sie sind dabei das Attribut {$ service.values.title $}
"
-#~ "permanent zu entfernen."
-
-#~ msgid ""
-#~ "You are about to permanently delete the attribute set {$ service."
-#~ "values.title $}
."
-#~ msgstr ""
-#~ "Sie sind dabei die Entität {$ service.values.title $}
"
-#~ "permanent zu entfernen."
-
-#~ msgid "Parent Entity"
-#~ msgstr "Übergeordnete Entität"
-
-#~ msgid "is a Collection"
-#~ msgstr "ist eine Sammlung"
-
-#~ msgid "English name"
-#~ msgstr "Englischer Name"
-
-#~ msgid "English name (plural)"
-#~ msgstr "Englischer Name (Plural)"
-
-#~ msgid "German name"
-#~ msgstr "Deutscher Name"
-
-#~ msgid "German name (plural)"
-#~ msgstr "Deutscher Name (Plural)"
-
-#~ msgid ""
-#~ "The internal identifier of this option set. The URI will be generated "
-#~ "from this key."
-#~ msgstr ""
-#~ "Der interne Identifikator für dieses Optionenset. Die URI wird hieraus "
-#~ "generiert."
-
-#~ msgid "Options "
-#~ msgstr "Optionen"
-
-#~ msgid "Title (English)"
-#~ msgstr "Titel (Englisch)"
-
-#~ msgid "Title (German)"
-#~ msgstr "Titel (Deutsch)"
-
-#~ msgid ""
-#~ "The internal identifier of this catalog. The URI will be generated from "
-#~ "this key."
-#~ msgstr ""
-#~ "Der interne Identifikator für diesen Katalog. Die URI wird hieraus "
-#~ "generiert."
-
-#~ msgid ""
-#~ "The internal identifier of this section. The URI will be generated from "
-#~ "this key."
-#~ msgstr ""
-#~ "Der interne Identifikator für diesen Abschnitt. Die URI wird hieraus "
-#~ "generiert."
-
-#~ msgid ""
-#~ "The internal identifier of this subsection. The URI will be generated "
-#~ "from this key."
-#~ msgstr ""
-#~ "Der interne Identifikator für diesen Unterabschnitt. Die URI wird hieraus "
-#~ "generiert."
-
-#~ msgid "The position of this subsection in lists."
-#~ msgstr "Die Position von diesem Unterabschnitt in Listen."
-
-#~ msgid ""
-#~ "The internal identifier of this question/questionset. The URI will be "
-#~ "generated from this key."
-#~ msgstr ""
-#~ "Der interne Identifikator für diese Frage/dieses Fragenset. Die URI wird "
-#~ "hieraus generiert."
-
-#~ msgid ""
-#~ "You are about to permanently delete the catalog {$ service."
-#~ "catalog.title $}."
-#~ msgstr ""
-#~ "Sie sind dabei den Katalog %(object)s
permanent zu entfernen."
-
-#~ msgid ""
-#~ "You are about to permanently delete the question {$ service."
-#~ "values.text $}."
-#~ msgstr ""
-#~ "Sie sind dabei die Frage %(object)s
permanent zu entfernen."
-
-#~ msgid ""
-#~ "You are about to permanently delete the question set {$ service."
-#~ "values.title $}."
-#~ msgstr ""
-#~ "Sie sind dabei das Fragenset %(object)s
permanent zu "
-#~ "entfernen."
-
-#~ msgid ""
-#~ "You are about to permanently delete the section {$ service.values."
-#~ "title $}."
-#~ msgstr ""
-#~ "Sie sind dabei den Abschnitt %(object)s
permanent zu "
-#~ "entfernen."
-
-#~ msgid ""
-#~ "You are about to permanently delete the subsection {$ service."
-#~ "values.title $}."
-#~ msgstr ""
-#~ "Sie sind dabei den Unterabschnitt %(object)s
permanent zu "
-#~ "entfernen."
-
-#~ msgid "Question text (English)"
-#~ msgstr "Fragentext (Englisch)"
-
-#~ msgid "Question text (German)"
-#~ msgstr "Fragentext (Deutsch)"
-
-#~ msgid "Help text (English)"
-#~ msgstr "Hilfetext (Englisch)"
-
-#~ msgid "Description text (English)"
-#~ msgstr "Beschreibungstext (Englisch)"
-
-#~ msgid "Description text (German)"
-#~ msgstr "Beschreibungstext (Deutsch)"
-
-#~ msgid "Additional days before"
-#~ msgstr "Zusätzliche Tage vorher"
-
-#~ msgid "Additional days after"
-#~ msgstr "Zusätzliche Tage danach"
-
-#~ msgid ""
-#~ "The internal identifier of this view. The URI will be generated from this "
-#~ "key."
-#~ msgstr ""
-#~ "Der interne Identifikator für diese Ansicht. Die URI wird hieraus "
-#~ "generiert."
-
-#~ msgid "Days before start date."
-#~ msgstr "Tage vor dem Start-Datum"
-
-#~ msgid "Profile update not possible"
-#~ msgstr "Profil bearbeiten nicht möglich"
-
-#~ msgid "Deadline"
-#~ msgstr "Termin"
-
-#~ msgid "The attribute this task is refering to."
-#~ msgstr "Das Attribut auf das diese Aufgabe verweist."
-
-#~ msgid "Time period"
-#~ msgstr "Zeitraum"
-
-#~ msgid "The the time period after this task becomes active."
-#~ msgstr "Die Zweitspanne nach der diese Aufgabe aktiv wird."
-
-#~ msgid ""
-#~ "RDMO is published on github.com."
-#~ msgstr ""
-#~ "RDMO ist auf github.com "
-#~ "veröffentlicht."
-
-#~ msgid "Email"
-#~ msgstr "E-Mail"
-
-#~ msgid "Save input"
-#~ msgstr "Eingabe speichern"
-
-#~ msgid "Delete attribute set"
-#~ msgstr "Attribut-Set entfernen"
diff --git a/manage.py b/manage.py
deleted file mode 100755
index 36f1459e9..000000000
--- a/manage.py
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/usr/bin/env python
-import os
-import sys
-
-if __name__ == "__main__":
- os.environ.setdefault("DJANGO_SETTINGS_MODULE", "rdmo.settings")
-
- from django.core.management import execute_from_command_line
-
- execute_from_command_line(sys.argv)
diff --git a/rdmo/__init__.py b/rdmo/__init__.py
index e69de29bb..8dfb4252f 100644
--- a/rdmo/__init__.py
+++ b/rdmo/__init__.py
@@ -0,0 +1,8 @@
+__title__ = 'rdmo'
+__version__ = '0.9.0'
+__author__ = 'Jochen Klar'
+__email__ = 'jklar@aip.de'
+__license__ = 'Apache-2.0'
+__copyright__ = 'Copyright 2015-2017 Leibniz Institute for Astrophysics Potsdam (AIP)'
+
+VERSION = __version__
diff --git a/rdmo/accounts/__init__.py b/rdmo/accounts/__init__.py
new file mode 100644
index 000000000..ded192917
--- /dev/null
+++ b/rdmo/accounts/__init__.py
@@ -0,0 +1 @@
+default_app_config = 'rdmo.accounts.app_config.AccountsConfig'
diff --git a/apps/accounts/adapter.py b/rdmo/accounts/adapter.py
similarity index 100%
rename from apps/accounts/adapter.py
rename to rdmo/accounts/adapter.py
diff --git a/apps/accounts/admin.py b/rdmo/accounts/admin.py
similarity index 100%
rename from apps/accounts/admin.py
rename to rdmo/accounts/admin.py
diff --git a/apps/accounts/app_config.py b/rdmo/accounts/app_config.py
similarity index 85%
rename from apps/accounts/app_config.py
rename to rdmo/accounts/app_config.py
index 02704c503..40e2233ca 100644
--- a/apps/accounts/app_config.py
+++ b/rdmo/accounts/app_config.py
@@ -3,5 +3,5 @@
class AccountsConfig(AppConfig):
- name = 'apps.accounts'
+ name = 'rdmo.accounts'
verbose_name = _('Accounts')
diff --git a/apps/accounts/forms.py b/rdmo/accounts/forms.py
similarity index 100%
rename from apps/accounts/forms.py
rename to rdmo/accounts/forms.py
diff --git a/apps/accounts/migrations/0001_initial.py b/rdmo/accounts/migrations/0001_initial.py
similarity index 100%
rename from apps/accounts/migrations/0001_initial.py
rename to rdmo/accounts/migrations/0001_initial.py
diff --git a/apps/accounts/migrations/0002_detail_key_type_field_length_increased.py b/rdmo/accounts/migrations/0002_detail_key_type_field_length_increased.py
similarity index 100%
rename from apps/accounts/migrations/0002_detail_key_type_field_length_increased.py
rename to rdmo/accounts/migrations/0002_detail_key_type_field_length_increased.py
diff --git a/apps/accounts/migrations/0003_hint_renamed_to_help_text.py b/rdmo/accounts/migrations/0003_hint_renamed_to_help_text.py
similarity index 100%
rename from apps/accounts/migrations/0003_hint_renamed_to_help_text.py
rename to rdmo/accounts/migrations/0003_hint_renamed_to_help_text.py
diff --git a/apps/accounts/migrations/0004_permission_added.py b/rdmo/accounts/migrations/0004_permission_added.py
similarity index 100%
rename from apps/accounts/migrations/0004_permission_added.py
rename to rdmo/accounts/migrations/0004_permission_added.py
diff --git a/apps/accounts/migrations/0005_field_type.py b/rdmo/accounts/migrations/0005_field_type.py
similarity index 100%
rename from apps/accounts/migrations/0005_field_type.py
rename to rdmo/accounts/migrations/0005_field_type.py
diff --git a/apps/accounts/migrations/0006_permissions_removed.py b/rdmo/accounts/migrations/0006_permissions_removed.py
similarity index 100%
rename from apps/accounts/migrations/0006_permissions_removed.py
rename to rdmo/accounts/migrations/0006_permissions_removed.py
diff --git a/apps/accounts/migrations/0007_additional_fields.py b/rdmo/accounts/migrations/0007_additional_fields.py
similarity index 94%
rename from apps/accounts/migrations/0007_additional_fields.py
rename to rdmo/accounts/migrations/0007_additional_fields.py
index 8faf7bf2e..e87eb0d06 100644
--- a/apps/accounts/migrations/0007_additional_fields.py
+++ b/rdmo/accounts/migrations/0007_additional_fields.py
@@ -2,7 +2,11 @@
# Generated by Django 1.9 on 2016-11-14 12:13
from __future__ import unicode_literals
-import apps.core.models
+try:
+ import rdmo.core.models
+except ImportError:
+ import rdmo.core.models
+
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
@@ -33,7 +37,7 @@ class Migration(migrations.Migration):
'verbose_name': 'Additional field',
'verbose_name_plural': 'Additional fields',
},
- bases=(models.Model, apps.core.models.TranslationMixin),
+ bases=(models.Model, rdmo.core.models.TranslationMixin),
),
migrations.CreateModel(
name='AdditionalFieldValue',
diff --git a/apps/accounts/migrations/0008_related_name.py b/rdmo/accounts/migrations/0008_related_name.py
similarity index 100%
rename from apps/accounts/migrations/0008_related_name.py
rename to rdmo/accounts/migrations/0008_related_name.py
diff --git a/apps/accounts/migrations/0009_proxyuser.py b/rdmo/accounts/migrations/0009_proxyuser.py
similarity index 100%
rename from apps/accounts/migrations/0009_proxyuser.py
rename to rdmo/accounts/migrations/0009_proxyuser.py
diff --git a/apps/__init__.py b/rdmo/accounts/migrations/__init__.py
similarity index 100%
rename from apps/__init__.py
rename to rdmo/accounts/migrations/__init__.py
diff --git a/apps/accounts/models.py b/rdmo/accounts/models.py
similarity index 97%
rename from apps/accounts/models.py
rename to rdmo/accounts/models.py
index ebc5e5212..e7a0e26ad 100644
--- a/apps/accounts/models.py
+++ b/rdmo/accounts/models.py
@@ -5,7 +5,7 @@
from django.utils.encoding import python_2_unicode_compatible
from django.utils.translation import ugettext_lazy as _
-from apps.core.models import TranslationMixin
+from rdmo.core.models import TranslationMixin
class ProxyUser(User):
diff --git a/apps/accounts/migrations/__init__.py b/rdmo/accounts/serializers/__init__.py
similarity index 100%
rename from apps/accounts/migrations/__init__.py
rename to rdmo/accounts/serializers/__init__.py
diff --git a/apps/accounts/serializers/api.py b/rdmo/accounts/serializers/api.py
similarity index 100%
rename from apps/accounts/serializers/api.py
rename to rdmo/accounts/serializers/api.py
diff --git a/apps/accounts/settings.py b/rdmo/accounts/settings.py
similarity index 100%
rename from apps/accounts/settings.py
rename to rdmo/accounts/settings.py
diff --git a/apps/accounts/templates/account/email.html b/rdmo/accounts/templates/account/email.html
similarity index 100%
rename from apps/accounts/templates/account/email.html
rename to rdmo/accounts/templates/account/email.html
diff --git a/apps/accounts/templates/account/email/password_reset_key_message.txt b/rdmo/accounts/templates/account/email/password_reset_key_message.txt
similarity index 100%
rename from apps/accounts/templates/account/email/password_reset_key_message.txt
rename to rdmo/accounts/templates/account/email/password_reset_key_message.txt
diff --git a/apps/accounts/templates/account/email/password_reset_key_subject.txt b/rdmo/accounts/templates/account/email/password_reset_key_subject.txt
similarity index 100%
rename from apps/accounts/templates/account/email/password_reset_key_subject.txt
rename to rdmo/accounts/templates/account/email/password_reset_key_subject.txt
diff --git a/apps/accounts/templates/account/email_confirm.html b/rdmo/accounts/templates/account/email_confirm.html
similarity index 100%
rename from apps/accounts/templates/account/email_confirm.html
rename to rdmo/accounts/templates/account/email_confirm.html
diff --git a/apps/accounts/templates/account/login.html b/rdmo/accounts/templates/account/login.html
similarity index 100%
rename from apps/accounts/templates/account/login.html
rename to rdmo/accounts/templates/account/login.html
diff --git a/apps/accounts/templates/account/login_form.html b/rdmo/accounts/templates/account/login_form.html
similarity index 100%
rename from apps/accounts/templates/account/login_form.html
rename to rdmo/accounts/templates/account/login_form.html
diff --git a/apps/accounts/templates/account/login_form_account.html b/rdmo/accounts/templates/account/login_form_account.html
similarity index 100%
rename from apps/accounts/templates/account/login_form_account.html
rename to rdmo/accounts/templates/account/login_form_account.html
diff --git a/apps/accounts/templates/account/login_form_socialaccount.html b/rdmo/accounts/templates/account/login_form_socialaccount.html
similarity index 100%
rename from apps/accounts/templates/account/login_form_socialaccount.html
rename to rdmo/accounts/templates/account/login_form_socialaccount.html
diff --git a/apps/accounts/templates/account/logout.html b/rdmo/accounts/templates/account/logout.html
similarity index 100%
rename from apps/accounts/templates/account/logout.html
rename to rdmo/accounts/templates/account/logout.html
diff --git a/apps/accounts/templates/account/logout_form.html b/rdmo/accounts/templates/account/logout_form.html
similarity index 100%
rename from apps/accounts/templates/account/logout_form.html
rename to rdmo/accounts/templates/account/logout_form.html
diff --git a/apps/accounts/templates/account/password_change.html b/rdmo/accounts/templates/account/password_change.html
similarity index 100%
rename from apps/accounts/templates/account/password_change.html
rename to rdmo/accounts/templates/account/password_change.html
diff --git a/apps/accounts/templates/account/password_reset.html b/rdmo/accounts/templates/account/password_reset.html
similarity index 100%
rename from apps/accounts/templates/account/password_reset.html
rename to rdmo/accounts/templates/account/password_reset.html
diff --git a/apps/accounts/templates/account/password_reset_done.html b/rdmo/accounts/templates/account/password_reset_done.html
similarity index 100%
rename from apps/accounts/templates/account/password_reset_done.html
rename to rdmo/accounts/templates/account/password_reset_done.html
diff --git a/apps/accounts/templates/account/password_reset_from_key.html b/rdmo/accounts/templates/account/password_reset_from_key.html
similarity index 100%
rename from apps/accounts/templates/account/password_reset_from_key.html
rename to rdmo/accounts/templates/account/password_reset_from_key.html
diff --git a/apps/accounts/templates/account/password_reset_from_key_done.html b/rdmo/accounts/templates/account/password_reset_from_key_done.html
similarity index 100%
rename from apps/accounts/templates/account/password_reset_from_key_done.html
rename to rdmo/accounts/templates/account/password_reset_from_key_done.html
diff --git a/apps/accounts/templates/account/password_set.html b/rdmo/accounts/templates/account/password_set.html
similarity index 100%
rename from apps/accounts/templates/account/password_set.html
rename to rdmo/accounts/templates/account/password_set.html
diff --git a/apps/accounts/templates/account/signup.html b/rdmo/accounts/templates/account/signup.html
similarity index 100%
rename from apps/accounts/templates/account/signup.html
rename to rdmo/accounts/templates/account/signup.html
diff --git a/apps/accounts/templates/account/signup_closed.html b/rdmo/accounts/templates/account/signup_closed.html
similarity index 100%
rename from apps/accounts/templates/account/signup_closed.html
rename to rdmo/accounts/templates/account/signup_closed.html
diff --git a/apps/accounts/templates/account/verification_sent.html b/rdmo/accounts/templates/account/verification_sent.html
similarity index 100%
rename from apps/accounts/templates/account/verification_sent.html
rename to rdmo/accounts/templates/account/verification_sent.html
diff --git a/apps/accounts/templates/account/verified_email_required.html b/rdmo/accounts/templates/account/verified_email_required.html
similarity index 100%
rename from apps/accounts/templates/account/verified_email_required.html
rename to rdmo/accounts/templates/account/verified_email_required.html
diff --git a/apps/accounts/templates/profile/profile_update_closed.html b/rdmo/accounts/templates/profile/profile_update_closed.html
similarity index 100%
rename from apps/accounts/templates/profile/profile_update_closed.html
rename to rdmo/accounts/templates/profile/profile_update_closed.html
diff --git a/apps/accounts/templates/profile/profile_update_form.html b/rdmo/accounts/templates/profile/profile_update_form.html
similarity index 100%
rename from apps/accounts/templates/profile/profile_update_form.html
rename to rdmo/accounts/templates/profile/profile_update_form.html
diff --git a/apps/accounts/templates/socialaccount/authentication_error.html b/rdmo/accounts/templates/socialaccount/authentication_error.html
similarity index 100%
rename from apps/accounts/templates/socialaccount/authentication_error.html
rename to rdmo/accounts/templates/socialaccount/authentication_error.html
diff --git a/apps/accounts/templates/socialaccount/connections.html b/rdmo/accounts/templates/socialaccount/connections.html
similarity index 100%
rename from apps/accounts/templates/socialaccount/connections.html
rename to rdmo/accounts/templates/socialaccount/connections.html
diff --git a/apps/accounts/templates/socialaccount/login_cancelled.html b/rdmo/accounts/templates/socialaccount/login_cancelled.html
similarity index 100%
rename from apps/accounts/templates/socialaccount/login_cancelled.html
rename to rdmo/accounts/templates/socialaccount/login_cancelled.html
diff --git a/apps/accounts/templates/socialaccount/signup.html b/rdmo/accounts/templates/socialaccount/signup.html
similarity index 100%
rename from apps/accounts/templates/socialaccount/signup.html
rename to rdmo/accounts/templates/socialaccount/signup.html
diff --git a/apps/accounts/templates/socialaccount/snippets/provider_list.html b/rdmo/accounts/templates/socialaccount/snippets/provider_list.html
similarity index 100%
rename from apps/accounts/templates/socialaccount/snippets/provider_list.html
rename to rdmo/accounts/templates/socialaccount/snippets/provider_list.html
diff --git a/apps/accounts/serializers/__init__.py b/rdmo/accounts/templatetags/__init__.py
similarity index 100%
rename from apps/accounts/serializers/__init__.py
rename to rdmo/accounts/templatetags/__init__.py
diff --git a/apps/accounts/templatetags/accounts_tags.py b/rdmo/accounts/templatetags/accounts_tags.py
similarity index 100%
rename from apps/accounts/templatetags/accounts_tags.py
rename to rdmo/accounts/templatetags/accounts_tags.py
diff --git a/apps/accounts/templatetags/__init__.py b/rdmo/accounts/tests/__init__.py
similarity index 100%
rename from apps/accounts/templatetags/__init__.py
rename to rdmo/accounts/tests/__init__.py
diff --git a/apps/accounts/tests.py b/rdmo/accounts/tests/test_views.py
similarity index 90%
rename from apps/accounts/tests.py
rename to rdmo/accounts/tests/test_views.py
index 57ca030c9..4b94e549b 100644
--- a/apps/accounts/tests.py
+++ b/rdmo/accounts/tests/test_views.py
@@ -8,14 +8,11 @@
from django.core import mail
from test_generator.core import TestModelStringMixin
-from test_generator.viewsets import TestListViewsetMixin, TestRetrieveViewsetMixin
-from apps.accounts.utils import set_group_permissions
+from rdmo.accounts.utils import set_group_permissions
-class AccountsTestCase(TestCase):
-
- lang = 'en'
+class AccountsViewTestCase(TestCase):
fixtures = (
'users.json',
@@ -35,7 +32,7 @@ def setUp(self):
set_group_permissions()
-class ProfileTests(TestModelStringMixin, AccountsTestCase):
+class ProfileTests(TestModelStringMixin, AccountsViewTestCase):
instances = User.objects.all()
@@ -165,14 +162,14 @@ def test_post_profile_update_next2(self):
self.assertEqual(response.status_code, 200)
-class AdditionalFieldTests(TestModelStringMixin, AccountsTestCase):
+class AdditionalFieldTests(TestModelStringMixin, AccountsViewTestCase):
def setUp(self):
translation.activate('en')
self.instances = User.objects.all()
-class PasswordTests(AccountsTestCase):
+class PasswordTests(AccountsViewTestCase):
def setUp(self):
translation.activate('en')
@@ -243,19 +240,3 @@ def test_password_reset_post_valid(self):
# get the password_reset page
response = self.client.get(urls[0])
self.assertEqual(response.status_code, 200)
-
-
-class UserAPITests(TestListViewsetMixin, TestRetrieveViewsetMixin, AccountsTestCase):
-
- instances = User.objects.all()
- url_names = {
- 'viewset': 'api-v1-accounts:user'
- }
- status_map = {
- 'list_viewset': {
- 'editor': 403, 'reviewer': 403, 'api': 200, 'user': 403, 'anonymous': 403
- },
- 'retrieve_viewset': {
- 'editor': 403, 'reviewer': 403, 'api': 200, 'user': 403, 'anonymous': 403
- },
- }
diff --git a/rdmo/accounts/tests/test_viewsets.py b/rdmo/accounts/tests/test_viewsets.py
new file mode 100644
index 000000000..841db17ee
--- /dev/null
+++ b/rdmo/accounts/tests/test_viewsets.py
@@ -0,0 +1,44 @@
+from django.contrib.auth.models import User
+from django.test import TestCase
+
+from test_generator.viewsets import TestReadOnlyModelViewsetMixin
+
+from rdmo.accounts.utils import set_group_permissions
+
+
+class AccountsViewsetTestCase(TestCase):
+
+ lang = 'en'
+
+ fixtures = (
+ 'users.json',
+ 'groups.json',
+ 'accounts.json'
+ )
+
+ users = (
+ ('editor', 'editor'),
+ ('reviewer', 'reviewer'),
+ ('user', 'user'),
+ ('api', 'api'),
+ ('anonymous', None),
+ )
+
+ def setUp(self):
+ set_group_permissions()
+
+
+class UserAPITests(TestReadOnlyModelViewsetMixin, AccountsViewsetTestCase):
+
+ instances = User.objects.all()
+ url_names = {
+ 'viewset': 'api-v1-accounts:user'
+ }
+ status_map = {
+ 'list_viewset': {
+ 'editor': 403, 'reviewer': 403, 'api': 200, 'user': 403, 'anonymous': 403
+ },
+ 'detail_viewset': {
+ 'editor': 403, 'reviewer': 403, 'api': 200, 'user': 403, 'anonymous': 403
+ },
+ }
diff --git a/apps/accounts/urls.py b/rdmo/accounts/urls.py
similarity index 100%
rename from apps/accounts/urls.py
rename to rdmo/accounts/urls.py
diff --git a/apps/accounts/utils.py b/rdmo/accounts/utils.py
similarity index 100%
rename from apps/accounts/utils.py
rename to rdmo/accounts/utils.py
diff --git a/apps/accounts/views.py b/rdmo/accounts/views.py
similarity index 93%
rename from apps/accounts/views.py
rename to rdmo/accounts/views.py
index c75a679d2..397a48f0c 100644
--- a/apps/accounts/views.py
+++ b/rdmo/accounts/views.py
@@ -2,7 +2,7 @@
from django.shortcuts import render
from django.contrib.auth.decorators import login_required
from django.http import HttpResponseRedirect
-from apps.core.utils import get_referer_path_info, get_next
+from rdmo.core.utils import get_referer_path_info, get_next
from .forms import ProfileForm
diff --git a/apps/accounts/viewsets.py b/rdmo/accounts/viewsets.py
similarity index 92%
rename from apps/accounts/viewsets.py
rename to rdmo/accounts/viewsets.py
index 22a583c96..fc87912c1 100644
--- a/apps/accounts/viewsets.py
+++ b/rdmo/accounts/viewsets.py
@@ -4,7 +4,7 @@
from rest_framework.filters import DjangoFilterBackend
from rest_framework.authentication import SessionAuthentication, TokenAuthentication
-from apps.core.permissions import HasModelPermission
+from rdmo.core.permissions import HasModelPermission
from .serializers.api import (
UserSerializer as UserApiSerializer,
diff --git a/rdmo/conditions/__init__.py b/rdmo/conditions/__init__.py
new file mode 100644
index 000000000..5a1e57750
--- /dev/null
+++ b/rdmo/conditions/__init__.py
@@ -0,0 +1 @@
+default_app_config = 'rdmo.conditions.app_config.ConditionsConfig'
diff --git a/apps/conditions/admin.py b/rdmo/conditions/admin.py
similarity index 100%
rename from apps/conditions/admin.py
rename to rdmo/conditions/admin.py
diff --git a/apps/conditions/app_config.py b/rdmo/conditions/app_config.py
similarity index 84%
rename from apps/conditions/app_config.py
rename to rdmo/conditions/app_config.py
index 26084152c..b03842b3a 100644
--- a/apps/conditions/app_config.py
+++ b/rdmo/conditions/app_config.py
@@ -3,5 +3,5 @@
class ConditionsConfig(AppConfig):
- name = 'apps.conditions'
+ name = 'rdmo.conditions'
verbose_name = _('Conditions')
diff --git a/apps/conditions/migrations/0001_initial.py b/rdmo/conditions/migrations/0001_initial.py
similarity index 100%
rename from apps/conditions/migrations/0001_initial.py
rename to rdmo/conditions/migrations/0001_initial.py
diff --git a/apps/conditions/migrations/0002_many_to_many_for_conditions.py b/rdmo/conditions/migrations/0002_many_to_many_for_conditions.py
similarity index 100%
rename from apps/conditions/migrations/0002_many_to_many_for_conditions.py
rename to rdmo/conditions/migrations/0002_many_to_many_for_conditions.py
diff --git a/apps/conditions/migrations/0003_meta.py b/rdmo/conditions/migrations/0003_meta.py
similarity index 100%
rename from apps/conditions/migrations/0003_meta.py
rename to rdmo/conditions/migrations/0003_meta.py
diff --git a/apps/conditions/migrations/0004_condition_title.py b/rdmo/conditions/migrations/0004_condition_title.py
similarity index 100%
rename from apps/conditions/migrations/0004_condition_title.py
rename to rdmo/conditions/migrations/0004_condition_title.py
diff --git a/apps/conditions/migrations/0005_empty_relation.py b/rdmo/conditions/migrations/0005_empty_relation.py
similarity index 100%
rename from apps/conditions/migrations/0005_empty_relation.py
rename to rdmo/conditions/migrations/0005_empty_relation.py
diff --git a/apps/conditions/migrations/0006_db_constraint_false.py b/rdmo/conditions/migrations/0006_db_constraint_false.py
similarity index 100%
rename from apps/conditions/migrations/0006_db_constraint_false.py
rename to rdmo/conditions/migrations/0006_db_constraint_false.py
diff --git a/apps/conditions/migrations/0007_ordering.py b/rdmo/conditions/migrations/0007_ordering.py
similarity index 100%
rename from apps/conditions/migrations/0007_ordering.py
rename to rdmo/conditions/migrations/0007_ordering.py
diff --git a/apps/conditions/migrations/0008_validator.py b/rdmo/conditions/migrations/0008_validator.py
similarity index 100%
rename from apps/conditions/migrations/0008_validator.py
rename to rdmo/conditions/migrations/0008_validator.py
diff --git a/apps/conditions/migrations/0009_options.py b/rdmo/conditions/migrations/0009_options.py
similarity index 100%
rename from apps/conditions/migrations/0009_options.py
rename to rdmo/conditions/migrations/0009_options.py
diff --git a/apps/conditions/migrations/0010_refactoring.py b/rdmo/conditions/migrations/0010_refactoring.py
similarity index 100%
rename from apps/conditions/migrations/0010_refactoring.py
rename to rdmo/conditions/migrations/0010_refactoring.py
diff --git a/apps/conditions/migrations/0011_refactoring.py b/rdmo/conditions/migrations/0011_refactoring.py
similarity index 100%
rename from apps/conditions/migrations/0011_refactoring.py
rename to rdmo/conditions/migrations/0011_refactoring.py
diff --git a/apps/conditions/migrations/0012_permissions.py b/rdmo/conditions/migrations/0012_permissions.py
similarity index 100%
rename from apps/conditions/migrations/0012_permissions.py
rename to rdmo/conditions/migrations/0012_permissions.py
diff --git a/apps/conditions/migrations/0013_meta.py b/rdmo/conditions/migrations/0013_meta.py
similarity index 100%
rename from apps/conditions/migrations/0013_meta.py
rename to rdmo/conditions/migrations/0013_meta.py
diff --git a/apps/conditions/migrations/__init__.py b/rdmo/conditions/migrations/__init__.py
similarity index 100%
rename from apps/conditions/migrations/__init__.py
rename to rdmo/conditions/migrations/__init__.py
diff --git a/apps/conditions/models.py b/rdmo/conditions/models.py
similarity index 99%
rename from apps/conditions/models.py
rename to rdmo/conditions/models.py
index 84134307f..43490a14f 100644
--- a/apps/conditions/models.py
+++ b/rdmo/conditions/models.py
@@ -4,7 +4,7 @@
from django.utils.encoding import python_2_unicode_compatible
from django.utils.translation import ugettext_lazy as _
-from apps.core.utils import get_uri_prefix
+from rdmo.core.utils import get_uri_prefix
from .validators import ConditionUniqueKeyValidator
diff --git a/apps/conditions/renderers.py b/rdmo/conditions/renderers.py
similarity index 95%
rename from apps/conditions/renderers.py
rename to rdmo/conditions/renderers.py
index 3374af8fe..f22a3ff55 100644
--- a/apps/conditions/renderers.py
+++ b/rdmo/conditions/renderers.py
@@ -1,4 +1,4 @@
-from apps.core.renderers import BaseXMLRenderer
+from rdmo.core.renderers import BaseXMLRenderer
class XMLRenderer(BaseXMLRenderer):
diff --git a/apps/conditions/serializers/__init__.py b/rdmo/conditions/serializers/__init__.py
similarity index 95%
rename from apps/conditions/serializers/__init__.py
rename to rdmo/conditions/serializers/__init__.py
index 2995f2052..c94cd2966 100644
--- a/apps/conditions/serializers/__init__.py
+++ b/rdmo/conditions/serializers/__init__.py
@@ -1,7 +1,7 @@
from rest_framework import serializers
-from apps.domain.models import Attribute
-from apps.options.models import OptionSet, Option
+from rdmo.domain.models import Attribute
+from rdmo.options.models import OptionSet, Option
from ..models import Condition
from ..validators import ConditionUniqueKeyValidator
diff --git a/apps/conditions/serializers/api.py b/rdmo/conditions/serializers/api.py
similarity index 100%
rename from apps/conditions/serializers/api.py
rename to rdmo/conditions/serializers/api.py
diff --git a/apps/conditions/serializers/export.py b/rdmo/conditions/serializers/export.py
similarity index 100%
rename from apps/conditions/serializers/export.py
rename to rdmo/conditions/serializers/export.py
diff --git a/apps/conditions/static/conditions/css/conditions.scss b/rdmo/conditions/static/conditions/css/conditions.scss
similarity index 100%
rename from apps/conditions/static/conditions/css/conditions.scss
rename to rdmo/conditions/static/conditions/css/conditions.scss
diff --git a/apps/conditions/static/conditions/js/conditions.js b/rdmo/conditions/static/conditions/js/conditions.js
similarity index 100%
rename from apps/conditions/static/conditions/js/conditions.js
rename to rdmo/conditions/static/conditions/js/conditions.js
diff --git a/apps/conditions/templates/conditions/conditions.html b/rdmo/conditions/templates/conditions/conditions.html
similarity index 92%
rename from apps/conditions/templates/conditions/conditions.html
rename to rdmo/conditions/templates/conditions/conditions.html
index 0075ddb04..5ac97d97e 100644
--- a/apps/conditions/templates/conditions/conditions.html
+++ b/rdmo/conditions/templates/conditions/conditions.html
@@ -2,18 +2,21 @@
{% load staticfiles %}
{% load compress %}
{% load i18n %}
+{% load core_tags %}
{% block head %}
+ {% vendor 'angular' %}
+
{% compress css %}
{% endcompress %}
-
-
+ {% compress js %}
+ {% endcompress %}
{% endblock %}
{% block bodyattr %} ng-app="conditions" ng-controller="ConditionsController" {% endblock %}
@@ -44,7 +47,7 @@ {% trans 'Options' %}
{% trans 'Export' %}
- {% for format, text in export_formats.items %}
+ {% for format, text in export_formats %}
-
{{ text }}
diff --git a/apps/conditions/templates/conditions/conditions_export.html b/rdmo/conditions/templates/conditions/conditions_export.html
similarity index 100%
rename from apps/conditions/templates/conditions/conditions_export.html
rename to rdmo/conditions/templates/conditions/conditions_export.html
diff --git a/apps/conditions/templates/conditions/conditions_modal_delete_conditions.html b/rdmo/conditions/templates/conditions/conditions_modal_delete_conditions.html
similarity index 100%
rename from apps/conditions/templates/conditions/conditions_modal_delete_conditions.html
rename to rdmo/conditions/templates/conditions/conditions_modal_delete_conditions.html
diff --git a/apps/conditions/templates/conditions/conditions_modal_form_conditions.html b/rdmo/conditions/templates/conditions/conditions_modal_form_conditions.html
similarity index 100%
rename from apps/conditions/templates/conditions/conditions_modal_form_conditions.html
rename to rdmo/conditions/templates/conditions/conditions_modal_form_conditions.html
diff --git a/apps/core/__init__.py b/rdmo/conditions/tests/__init__.py
similarity index 100%
rename from apps/core/__init__.py
rename to rdmo/conditions/tests/__init__.py
diff --git a/rdmo/conditions/tests/test_views.py b/rdmo/conditions/tests/test_views.py
new file mode 100644
index 000000000..9f9e58d3f
--- /dev/null
+++ b/rdmo/conditions/tests/test_views.py
@@ -0,0 +1,58 @@
+from django.test import TestCase
+
+from test_generator.views import TestListViewMixin
+
+from rdmo.core.testing.mixins import TestExportViewMixin, TestImportViewMixin
+from rdmo.accounts.utils import set_group_permissions
+
+
+class ConditionsViewTestCase(TestCase):
+
+ fixtures = (
+ 'users.json',
+ 'groups.json',
+ 'accounts.json',
+ 'conditions.json',
+ 'domain.json',
+ 'options.json',
+ )
+
+ users = (
+ ('editor', 'editor'),
+ ('reviewer', 'reviewer'),
+ ('user', 'user'),
+ ('api', 'api'),
+ ('anonymous', None),
+ )
+
+ status_map = {
+ 'list_view': {
+ 'editor': 200, 'reviewer': 200, 'api': 200, 'user': 403, 'anonymous': 302
+ },
+ 'export_view': {
+ 'editor': 200, 'reviewer': 200, 'api': 200, 'user': 403, 'anonymous': 302
+ }
+ }
+
+ @classmethod
+ def setUpTestData(cls):
+ set_group_permissions()
+
+
+class ConditionsTests(TestListViewMixin, ConditionsViewTestCase):
+
+ url_names = {
+ 'list_view': 'conditions'
+ }
+
+
+class ConditionExportTests(TestExportViewMixin, ConditionsViewTestCase):
+
+ url_names = {
+ 'export_view': 'conditions_export'
+ }
+
+
+class ConditionImportTests(TestImportViewMixin, ConditionsViewTestCase):
+
+ import_file = 'testing/xml/conditions.xml'
diff --git a/apps/conditions/tests.py b/rdmo/conditions/tests/test_viewsets.py
similarity index 52%
rename from apps/conditions/tests.py
rename to rdmo/conditions/tests/test_viewsets.py
index 1fe160466..406205564 100644
--- a/apps/conditions/tests.py
+++ b/rdmo/conditions/tests/test_viewsets.py
@@ -1,16 +1,18 @@
from django.test import TestCase
-from test_generator.views import TestListViewMixin
-from test_generator.viewsets import TestModelViewsetMixin, TestListViewsetMixin, TestRetrieveViewsetMixin
+from test_generator.viewsets import (
+ TestModelViewsetMixin,
+ TestListViewsetMixin,
+ TestReadOnlyModelViewsetMixin
+)
-from apps.core.testing.mixins import TestExportViewMixin, TestImportViewMixin
-from apps.accounts.utils import set_group_permissions
-from apps.domain.models import Attribute
+from rdmo.accounts.utils import set_group_permissions
+from rdmo.domain.models import Attribute
-from .models import Condition
+from ..models import Condition
-class ConditionsTestCase(TestCase):
+class ConditionsViewsetTestCase(TestCase):
fixtures = (
'users.json',
@@ -21,10 +23,6 @@ class ConditionsTestCase(TestCase):
'options.json',
)
- languages = (
- 'en',
- )
-
users = (
('editor', 'editor'),
('reviewer', 'reviewer'),
@@ -34,16 +32,10 @@ class ConditionsTestCase(TestCase):
)
status_map = {
- 'list_view': {
- 'editor': 200, 'reviewer': 200, 'api': 200, 'user': 403, 'anonymous': 302
- },
- 'export_view': {
- 'editor': 200, 'reviewer': 200, 'api': 200, 'user': 403, 'anonymous': 302
- },
'list_viewset': {
'editor': 200, 'reviewer': 200, 'api': 200, 'user': 403, 'anonymous': 403
},
- 'retrieve_viewset': {
+ 'detail_viewset': {
'editor': 200, 'reviewer': 200, 'api': 200, 'user': 403, 'anonymous': 403
},
'create_viewset': {
@@ -62,26 +54,20 @@ def setUpTestData(cls):
set_group_permissions()
-class ConditionsTests(TestListViewMixin, ConditionsTestCase):
-
- url_names = {
- 'list_view': 'conditions'
- }
-
-
-class ConditionTests(TestModelViewsetMixin, ConditionsTestCase):
+class ConditionTests(TestModelViewsetMixin, ConditionsViewsetTestCase):
instances = Condition.objects.all()
url_names = {
'viewset': 'internal-conditions:condition'
}
- def prepare_create_instance(self, instance):
- instance.key += '_new'
- return instance
+ def _test_create_viewset(self, username):
+ for instance in self.instances:
+ instance.key += '_new'
+ self.assert_create_viewset(username, data=self.get_instance_as_dict(instance))
-class AttributeTests(TestListViewsetMixin, ConditionsTestCase):
+class AttributeTests(TestListViewsetMixin, ConditionsViewsetTestCase):
instances = Attribute.objects.all()
url_names = {
@@ -89,7 +75,7 @@ class AttributeTests(TestListViewsetMixin, ConditionsTestCase):
}
-class RelationTests(TestListViewsetMixin, ConditionsTestCase):
+class RelationTests(TestListViewsetMixin, ConditionsViewsetTestCase):
url_names = {
'viewset': 'internal-conditions:relation'
@@ -99,19 +85,7 @@ class RelationTests(TestListViewsetMixin, ConditionsTestCase):
}
-class ConditionExportTests(TestExportViewMixin, ConditionsTestCase):
-
- url_names = {
- 'export_view': 'conditions_export'
- }
-
-
-class ConditionImportTests(TestImportViewMixin, TestCase):
-
- import_file = 'testing/xml/conditions.xml'
-
-
-class ConditionAPITests(TestListViewsetMixin, TestRetrieveViewsetMixin, ConditionsTestCase):
+class ConditionAPITests(TestReadOnlyModelViewsetMixin, ConditionsViewsetTestCase):
instances = Condition.objects.all()
url_names = {
diff --git a/apps/conditions/urls.py b/rdmo/conditions/urls.py
similarity index 100%
rename from apps/conditions/urls.py
rename to rdmo/conditions/urls.py
diff --git a/apps/conditions/utils.py b/rdmo/conditions/utils.py
similarity index 91%
rename from apps/conditions/utils.py
rename to rdmo/conditions/utils.py
index 13c3527bb..50b807695 100644
--- a/apps/conditions/utils.py
+++ b/rdmo/conditions/utils.py
@@ -1,6 +1,6 @@
-from apps.core.utils import get_ns_tag
-from apps.domain.models import Attribute
-from apps.options.models import Option
+from rdmo.core.utils import get_ns_tag
+from rdmo.domain.models import Attribute
+from rdmo.options.models import Option
from .models import Condition
diff --git a/apps/conditions/validators.py b/rdmo/conditions/validators.py
similarity index 69%
rename from apps/conditions/validators.py
rename to rdmo/conditions/validators.py
index cd0483e60..7ff3aaa18 100644
--- a/apps/conditions/validators.py
+++ b/rdmo/conditions/validators.py
@@ -1,4 +1,4 @@
-from apps.core.validators import UniqueKeyValidator
+from rdmo.core.validators import UniqueKeyValidator
class ConditionUniqueKeyValidator(UniqueKeyValidator):
diff --git a/apps/conditions/views.py b/rdmo/conditions/views.py
similarity index 93%
rename from apps/conditions/views.py
rename to rdmo/conditions/views.py
index ced83c38a..d28c32d39 100644
--- a/apps/conditions/views.py
+++ b/rdmo/conditions/views.py
@@ -3,8 +3,8 @@
from django.utils.translation import ugettext_lazy as _
from django.views.generic import TemplateView, ListView
-from apps.core.views import ModelPermissionMixin
-from apps.core.utils import get_model_field_meta, render_to_format
+from rdmo.core.views import ModelPermissionMixin
+from rdmo.core.utils import get_model_field_meta, render_to_format
from .models import Condition
from .serializers.export import ConditionSerializer as ExportSerializer
diff --git a/apps/conditions/viewsets.py b/rdmo/conditions/viewsets.py
similarity index 92%
rename from apps/conditions/viewsets.py
rename to rdmo/conditions/viewsets.py
index a55b61fed..2b210e766 100644
--- a/apps/conditions/viewsets.py
+++ b/rdmo/conditions/viewsets.py
@@ -6,12 +6,12 @@
from rest_framework.status import HTTP_400_BAD_REQUEST, HTTP_404_NOT_FOUND
from rest_framework.authentication import SessionAuthentication, TokenAuthentication
-from apps.core.views import ChoicesViewSet
-from apps.core.permissions import HasModelPermission
+from rdmo.core.views import ChoicesViewSet
+from rdmo.core.permissions import HasModelPermission
-from apps.domain.models import Attribute
-from apps.options.models import OptionSet
-from apps.projects.models import Snapshot
+from rdmo.domain.models import Attribute
+from rdmo.options.models import OptionSet
+from rdmo.projects.models import Snapshot
from .models import Condition
from .serializers import (
diff --git a/apps/core/management/__init__.py b/rdmo/core/__init__.py
similarity index 100%
rename from apps/core/management/__init__.py
rename to rdmo/core/__init__.py
diff --git a/apps/core/exceptions.py b/rdmo/core/exceptions.py
similarity index 100%
rename from apps/core/exceptions.py
rename to rdmo/core/exceptions.py
diff --git a/locale/de/LC_MESSAGES/django.mo b/rdmo/core/locale/de/LC_MESSAGES/django.mo
similarity index 100%
rename from locale/de/LC_MESSAGES/django.mo
rename to rdmo/core/locale/de/LC_MESSAGES/django.mo
diff --git a/rdmo/core/locale/de/LC_MESSAGES/django.po b/rdmo/core/locale/de/LC_MESSAGES/django.po
new file mode 100644
index 000000000..0266c0491
--- /dev/null
+++ b/rdmo/core/locale/de/LC_MESSAGES/django.po
@@ -0,0 +1,3174 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR
, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: DMPwerkzeug\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-08-23 16:47+0200\n"
+"PO-Revision-Date: 2017-04-05 16:44+0100\n"
+"Last-Translator: Jochen Klar \n"
+"Language-Team: DMPwerkzeug \n"
+"Language: de\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Poedit 1.6.10\n"
+
+#: env/lib/python2.7/site-packages/django/contrib/messages/apps.py:7
+msgid "Messages"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/contrib/sitemaps/apps.py:7
+msgid "Site Maps"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/contrib/staticfiles/apps.py:7
+msgid "Static Files"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/contrib/syndication/apps.py:7
+#, fuzzy
+#| msgid "Condition"
+msgid "Syndication"
+msgstr "Bedingung"
+
+#: env/lib/python2.7/site-packages/django/core/paginator.py:43
+msgid "That page number is not an integer"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/core/paginator.py:45
+msgid "That page number is less than 1"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/core/paginator.py:50
+msgid "That page contains no results"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/core/validators.py:34
+msgid "Enter a valid value."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/core/validators.py:107
+#: env/lib/python2.7/site-packages/django/forms/fields.py:667
+msgid "Enter a valid URL."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/core/validators.py:160
+msgid "Enter a valid integer."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/core/validators.py:171
+#, fuzzy
+#| msgid "Verify your e-mail address"
+msgid "Enter a valid email address."
+msgstr "Betätigen Sie Ihre E-Mail Adresse"
+
+#: env/lib/python2.7/site-packages/django/core/validators.py:245
+msgid ""
+"Enter a valid 'slug' consisting of letters, numbers, underscores or hyphens."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/core/validators.py:252
+msgid ""
+"Enter a valid 'slug' consisting of Unicode letters, numbers, underscores, or "
+"hyphens."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/core/validators.py:257
+#: env/lib/python2.7/site-packages/django/core/validators.py:277
+msgid "Enter a valid IPv4 address."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/core/validators.py:262
+#: env/lib/python2.7/site-packages/django/core/validators.py:278
+msgid "Enter a valid IPv6 address."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/core/validators.py:272
+#: env/lib/python2.7/site-packages/django/core/validators.py:276
+msgid "Enter a valid IPv4 or IPv6 address."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/core/validators.py:308
+#: env/lib/python2.7/site-packages/django/db/models/fields/__init__.py:1127
+msgid "Enter only digits separated by commas."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/core/validators.py:314
+#, python-format
+msgid "Ensure this value is %(limit_value)s (it is %(show_value)s)."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/core/validators.py:345
+#, python-format
+msgid "Ensure this value is less than or equal to %(limit_value)s."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/core/validators.py:354
+#, python-format
+msgid "Ensure this value is greater than or equal to %(limit_value)s."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/core/validators.py:364
+#, python-format
+msgid ""
+"Ensure this value has at least %(limit_value)d character (it has "
+"%(show_value)d)."
+msgid_plural ""
+"Ensure this value has at least %(limit_value)d characters (it has "
+"%(show_value)d)."
+msgstr[0] ""
+msgstr[1] ""
+
+#: env/lib/python2.7/site-packages/django/core/validators.py:379
+#, python-format
+msgid ""
+"Ensure this value has at most %(limit_value)d character (it has "
+"%(show_value)d)."
+msgid_plural ""
+"Ensure this value has at most %(limit_value)d characters (it has "
+"%(show_value)d)."
+msgstr[0] ""
+msgstr[1] ""
+
+#: env/lib/python2.7/site-packages/django/core/validators.py:399
+#, python-format
+msgid "Ensure that there are no more than %(max)s digit in total."
+msgid_plural "Ensure that there are no more than %(max)s digits in total."
+msgstr[0] ""
+msgstr[1] ""
+
+#: env/lib/python2.7/site-packages/django/core/validators.py:404
+#, python-format
+msgid "Ensure that there are no more than %(max)s decimal place."
+msgid_plural "Ensure that there are no more than %(max)s decimal places."
+msgstr[0] ""
+msgstr[1] ""
+
+#: env/lib/python2.7/site-packages/django/core/validators.py:409
+#, python-format
+msgid ""
+"Ensure that there are no more than %(max)s digit before the decimal point."
+msgid_plural ""
+"Ensure that there are no more than %(max)s digits before the decimal point."
+msgstr[0] ""
+msgstr[1] ""
+
+#: env/lib/python2.7/site-packages/django/core/validators.py:463
+#, python-format
+msgid ""
+"File extension '%(extension)s' is not allowed. Allowed extensions are: "
+"'%(allowed_extensions)s'."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/db/models/base.py:1207
+#: env/lib/python2.7/site-packages/django/forms/models.py:732
+msgid "and"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/db/models/base.py:1209
+#, fuzzy, python-format
+#| msgid "%(model)s with this key already exists."
+msgid "%(model_name)s with this %(field_labels)s already exists."
+msgstr "%(model)s mit diesem Schlüssel existiert bereits."
+
+#: env/lib/python2.7/site-packages/django/db/models/fields/__init__.py:116
+#, python-format
+msgid "Value %(value)r is not a valid choice."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/db/models/fields/__init__.py:117
+#, fuzzy
+#| msgid "This field may not be blank."
+msgid "This field cannot be null."
+msgstr "Dieses Feld darf nicht leer sein."
+
+#: env/lib/python2.7/site-packages/django/db/models/fields/__init__.py:118
+#, fuzzy
+#| msgid "This field may not be blank."
+msgid "This field cannot be blank."
+msgstr "Dieses Feld darf nicht leer sein."
+
+#: env/lib/python2.7/site-packages/django/db/models/fields/__init__.py:119
+#, fuzzy, python-format
+#| msgid "%(model)s with this key already exists."
+msgid "%(model_name)s with this %(field_label)s already exists."
+msgstr "%(model)s mit diesem Schlüssel existiert bereits."
+
+#. Translators: The 'lookup_type' is one of 'date', 'year' or 'month'.
+#. Eg: "Title must be unique for pub_date year"
+#: env/lib/python2.7/site-packages/django/db/models/fields/__init__.py:123
+#, python-format
+msgid ""
+"%(field_label)s must be unique for %(date_field_label)s %(lookup_type)s."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/db/models/fields/__init__.py:140
+#, python-format
+msgid "Field of type: %(field_type)s"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/db/models/fields/__init__.py:897
+#: env/lib/python2.7/site-packages/django/db/models/fields/__init__.py:1805
+msgid "Integer"
+msgstr "Ganzzahl"
+
+#: env/lib/python2.7/site-packages/django/db/models/fields/__init__.py:901
+#: env/lib/python2.7/site-packages/django/db/models/fields/__init__.py:1803
+#, python-format
+msgid "'%(value)s' value must be an integer."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/db/models/fields/__init__.py:974
+#: env/lib/python2.7/site-packages/django/db/models/fields/__init__.py:1874
+msgid "Big (8 byte) integer"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/db/models/fields/__init__.py:986
+#, python-format
+msgid "'%(value)s' value must be either True or False."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/db/models/fields/__init__.py:988
+msgid "Boolean (Either True or False)"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/db/models/fields/__init__.py:1054
+#, python-format
+msgid "String (up to %(max_length)s)"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/db/models/fields/__init__.py:1111
+msgid "Comma-separated integers"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/db/models/fields/__init__.py:1168
+#, python-format
+msgid ""
+"'%(value)s' value has an invalid date format. It must be in YYYY-MM-DD "
+"format."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/db/models/fields/__init__.py:1170
+#: env/lib/python2.7/site-packages/django/db/models/fields/__init__.py:1315
+#, python-format
+msgid ""
+"'%(value)s' value has the correct format (YYYY-MM-DD) but it is an invalid "
+"date."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/db/models/fields/__init__.py:1173
+msgid "Date (without time)"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/db/models/fields/__init__.py:1313
+#, python-format
+msgid ""
+"'%(value)s' value has an invalid format. It must be in YYYY-MM-DD HH:MM[:ss[."
+"uuuuuu]][TZ] format."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/db/models/fields/__init__.py:1317
+#, python-format
+msgid ""
+"'%(value)s' value has the correct format (YYYY-MM-DD HH:MM[:ss[.uuuuuu]]"
+"[TZ]) but it is an invalid date/time."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/db/models/fields/__init__.py:1321
+#, fuzzy
+#| msgid "Datetime"
+msgid "Date (with time)"
+msgstr "Datum und Zeit"
+
+#: env/lib/python2.7/site-packages/django/db/models/fields/__init__.py:1471
+#, python-format
+msgid "'%(value)s' value must be a decimal number."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/db/models/fields/__init__.py:1473
+msgid "Decimal number"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/db/models/fields/__init__.py:1624
+#, python-format
+msgid ""
+"'%(value)s' value has an invalid format. It must be in [DD] [HH:[MM:]]ss[."
+"uuuuuu] format."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/db/models/fields/__init__.py:1627
+#, fuzzy
+#| msgid "Description"
+msgid "Duration"
+msgstr "Beschreibung"
+
+#: env/lib/python2.7/site-packages/django/db/models/fields/__init__.py:1679
+#, fuzzy
+#| msgid "E-mail Addresses"
+msgid "Email address"
+msgstr "E-mail Adressen"
+
+#: env/lib/python2.7/site-packages/django/db/models/fields/__init__.py:1703
+#, fuzzy
+#| msgid "Profile update"
+msgid "File path"
+msgstr "Profil bearbeiten"
+
+#: env/lib/python2.7/site-packages/django/db/models/fields/__init__.py:1769
+#, python-format
+msgid "'%(value)s' value must be a float."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/db/models/fields/__init__.py:1771
+msgid "Floating point number"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/db/models/fields/__init__.py:1889
+msgid "IPv4 address"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/db/models/fields/__init__.py:1920
+msgid "IP address"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/db/models/fields/__init__.py:2002
+#, python-format
+msgid "'%(value)s' value must be either None, True or False."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/db/models/fields/__init__.py:2004
+msgid "Boolean (Either True, False or None)"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/db/models/fields/__init__.py:2067
+msgid "Positive integer"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/db/models/fields/__init__.py:2079
+msgid "Positive small integer"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/db/models/fields/__init__.py:2092
+#, python-format
+msgid "Slug (up to %(max_length)s)"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/db/models/fields/__init__.py:2126
+#, fuzzy
+#| msgid "Integer"
+msgid "Small integer"
+msgstr "Ganzzahl"
+
+#: env/lib/python2.7/site-packages/django/db/models/fields/__init__.py:2133
+msgid "Text"
+msgstr "Text"
+
+#: env/lib/python2.7/site-packages/django/db/models/fields/__init__.py:2159
+#, python-format
+msgid ""
+"'%(value)s' value has an invalid format. It must be in HH:MM[:ss[.uuuuuu]] "
+"format."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/db/models/fields/__init__.py:2161
+#, python-format
+msgid ""
+"'%(value)s' value has the correct format (HH:MM[:ss[.uuuuuu]]) but it is an "
+"invalid time."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/db/models/fields/__init__.py:2164
+#, fuzzy
+#| msgid "Timeframe"
+msgid "Time"
+msgstr "Zeitraum"
+
+#: env/lib/python2.7/site-packages/django/db/models/fields/__init__.py:2292
+msgid "URL"
+msgstr "URL"
+
+#: env/lib/python2.7/site-packages/django/db/models/fields/__init__.py:2315
+msgid "Raw binary data"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/db/models/fields/__init__.py:2362
+#, python-format
+msgid "'%(value)s' is not a valid UUID."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/db/models/fields/files.py:229
+msgid "File"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/db/models/fields/files.py:393
+msgid "Image"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/db/models/fields/related.py:788
+#, python-format
+msgid "%(model)s instance with %(field)s %(value)r does not exist."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/db/models/fields/related.py:790
+msgid "Foreign Key (type determined by related field)"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/db/models/fields/related.py:1029
+msgid "One-to-one relationship"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/db/models/fields/related.py:1104
+#, python-format
+msgid "%(from)s-%(to)s relationship"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/db/models/fields/related.py:1105
+#, python-format
+msgid "%(from)s-%(to)s relationships"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/db/models/fields/related.py:1147
+msgid "Many-to-many relationship"
+msgstr ""
+
+#. Translators: If found as last label character, these punctuation
+#. characters will prevent the default label_suffix to be appended to the label
+#: env/lib/python2.7/site-packages/django/forms/boundfield.py:181
+msgid ":?.!"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/forms/fields.py:56
+msgid "This field is required."
+msgstr "Dieses Feld wird benötigt."
+
+#: env/lib/python2.7/site-packages/django/forms/fields.py:257
+msgid "Enter a whole number."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/forms/fields.py:302
+#: env/lib/python2.7/site-packages/django/forms/fields.py:339
+msgid "Enter a number."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/forms/fields.py:417
+#: env/lib/python2.7/site-packages/django/forms/fields.py:1139
+msgid "Enter a valid date."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/forms/fields.py:441
+#: env/lib/python2.7/site-packages/django/forms/fields.py:1140
+msgid "Enter a valid time."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/forms/fields.py:463
+msgid "Enter a valid date/time."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/forms/fields.py:492
+msgid "Enter a valid duration."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/forms/fields.py:546
+msgid "No file was submitted. Check the encoding type on the form."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/forms/fields.py:547
+msgid "No file was submitted."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/forms/fields.py:548
+msgid "The submitted file is empty."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/forms/fields.py:550
+#, python-format
+msgid "Ensure this filename has at most %(max)d character (it has %(length)d)."
+msgid_plural ""
+"Ensure this filename has at most %(max)d characters (it has %(length)d)."
+msgstr[0] ""
+msgstr[1] ""
+
+#: env/lib/python2.7/site-packages/django/forms/fields.py:553
+msgid "Please either submit a file or check the clear checkbox, not both."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/forms/fields.py:615
+msgid ""
+"Upload a valid image. The file you uploaded was either not an image or a "
+"corrupted image."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/forms/fields.py:770
+#: env/lib/python2.7/site-packages/django/forms/fields.py:866
+#: env/lib/python2.7/site-packages/django/forms/models.py:1246
+#, python-format
+msgid "Select a valid choice. %(value)s is not one of the available choices."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/forms/fields.py:867
+#: env/lib/python2.7/site-packages/django/forms/fields.py:982
+#: env/lib/python2.7/site-packages/django/forms/models.py:1245
+msgid "Enter a list of values."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/forms/fields.py:983
+msgid "Enter a complete value."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/forms/fields.py:1198
+msgid "Enter a valid UUID."
+msgstr ""
+
+#. Translators: This is the default suffix added to form field labels
+#: env/lib/python2.7/site-packages/django/forms/forms.py:87
+msgid ":"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/forms/forms.py:213
+#, python-format
+msgid "(Hidden field %(name)s) %(error)s"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/forms/formsets.py:97
+msgid "ManagementForm data is missing or has been tampered with"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/forms/formsets.py:355
+#, python-format
+msgid "Please submit %d or fewer forms."
+msgid_plural "Please submit %d or fewer forms."
+msgstr[0] ""
+msgstr[1] ""
+
+#: env/lib/python2.7/site-packages/django/forms/formsets.py:362
+#, python-format
+msgid "Please submit %d or more forms."
+msgid_plural "Please submit %d or more forms."
+msgstr[0] ""
+msgstr[1] ""
+
+#: env/lib/python2.7/site-packages/django/forms/formsets.py:390
+#: env/lib/python2.7/site-packages/django/forms/formsets.py:392
+msgid "Order"
+msgstr "Reihenfolge"
+
+#: env/lib/python2.7/site-packages/django/forms/formsets.py:394
+msgid "Delete"
+msgstr "Entfernen"
+
+#: env/lib/python2.7/site-packages/django/forms/models.py:727
+#, python-format
+msgid "Please correct the duplicate data for %(field)s."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/forms/models.py:731
+#, python-format
+msgid "Please correct the duplicate data for %(field)s, which must be unique."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/forms/models.py:737
+#, python-format
+msgid ""
+"Please correct the duplicate data for %(field_name)s which must be unique "
+"for the %(lookup)s in %(date_field)s."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/forms/models.py:746
+msgid "Please correct the duplicate values below."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/forms/models.py:1076
+msgid "The inline foreign key did not match the parent instance primary key."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/forms/models.py:1137
+msgid "Select a valid choice. That choice is not one of the available choices."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/forms/models.py:1248
+#, python-format
+msgid "\"%(pk)s\" is not a valid value for a primary key."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/forms/utils.py:172
+#, python-format
+msgid ""
+"%(datetime)s couldn't be interpreted in time zone %(current_timezone)s; it "
+"may be ambiguous or it may not exist."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/forms/widgets.py:377
+msgid "Clear"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/forms/widgets.py:378
+#, fuzzy
+#| msgid "Current"
+msgid "Currently"
+msgstr "Aktuell"
+
+#: env/lib/python2.7/site-packages/django/forms/widgets.py:379
+#, fuzzy
+#| msgid "Range"
+msgid "Change"
+msgstr "Bereich"
+
+#: env/lib/python2.7/site-packages/django/forms/widgets.py:697
+msgid "Unknown"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/forms/widgets.py:698
+msgid "Yes"
+msgstr "Ja"
+
+#: env/lib/python2.7/site-packages/django/forms/widgets.py:699
+msgid "No"
+msgstr "Nein"
+
+#: env/lib/python2.7/site-packages/django/template/defaultfilters.py:849
+msgid "yes,no,maybe"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/template/defaultfilters.py:878
+#: env/lib/python2.7/site-packages/django/template/defaultfilters.py:895
+#, python-format
+msgid "%(size)d byte"
+msgid_plural "%(size)d bytes"
+msgstr[0] ""
+msgstr[1] ""
+
+#: env/lib/python2.7/site-packages/django/template/defaultfilters.py:897
+#, python-format
+msgid "%s KB"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/template/defaultfilters.py:899
+#, python-format
+msgid "%s MB"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/template/defaultfilters.py:901
+#, python-format
+msgid "%s GB"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/template/defaultfilters.py:903
+#, python-format
+msgid "%s TB"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/template/defaultfilters.py:905
+#, python-format
+msgid "%s PB"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dateformat.py:66
+msgid "p.m."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dateformat.py:67
+msgid "a.m."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dateformat.py:72
+msgid "PM"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dateformat.py:73
+msgid "AM"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dateformat.py:158
+msgid "midnight"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dateformat.py:160
+msgid "noon"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:6
+msgid "Monday"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:6
+msgid "Tuesday"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:6
+msgid "Wednesday"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:6
+msgid "Thursday"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:6
+msgid "Friday"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:7
+msgid "Saturday"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:7
+msgid "Sunday"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:10
+msgid "Mon"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:10
+msgid "Tue"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:10
+msgid "Wed"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:10
+msgid "Thu"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:10
+msgid "Fri"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:11
+msgid "Sat"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:11
+msgid "Sun"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:18
+msgid "January"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:18
+msgid "February"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:18
+msgid "March"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:18
+msgid "April"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:18
+msgid "May"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:18
+msgid "June"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:19
+msgid "July"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:19
+msgid "August"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:19
+#, fuzzy
+#| msgid "Members"
+msgid "September"
+msgstr "Mitglieder"
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:19
+msgid "October"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:19
+#, fuzzy
+#| msgid "Members"
+msgid "November"
+msgstr "Mitglieder"
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:20
+#, fuzzy
+#| msgid "Members"
+msgid "December"
+msgstr "Mitglieder"
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:23
+msgid "jan"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:23
+msgid "feb"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:23
+#, fuzzy
+#| msgid "Primary"
+msgid "mar"
+msgstr "Primär"
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:23
+msgid "apr"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:23
+#, fuzzy
+#| msgid "Primary"
+msgid "may"
+msgstr "Primär"
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:23
+msgid "jun"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:24
+msgid "jul"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:24
+msgid "aug"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:24
+#, fuzzy
+#| msgid "set"
+msgid "sep"
+msgstr "Set"
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:24
+#, fuzzy
+#| msgid "Contact"
+msgid "oct"
+msgstr "Kontakt"
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:24
+#, fuzzy
+#| msgid "no"
+msgid "nov"
+msgstr "Nein"
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:24
+msgid "dec"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:31
+msgctxt "abbrev. month"
+msgid "Jan."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:32
+msgctxt "abbrev. month"
+msgid "Feb."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:33
+msgctxt "abbrev. month"
+msgid "March"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:34
+msgctxt "abbrev. month"
+msgid "April"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:35
+msgctxt "abbrev. month"
+msgid "May"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:36
+msgctxt "abbrev. month"
+msgid "June"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:37
+msgctxt "abbrev. month"
+msgid "July"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:38
+msgctxt "abbrev. month"
+msgid "Aug."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:39
+msgctxt "abbrev. month"
+msgid "Sept."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:40
+msgctxt "abbrev. month"
+msgid "Oct."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:41
+msgctxt "abbrev. month"
+msgid "Nov."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:42
+msgctxt "abbrev. month"
+msgid "Dec."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:45
+msgctxt "alt. month"
+msgid "January"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:46
+msgctxt "alt. month"
+msgid "February"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:47
+msgctxt "alt. month"
+msgid "March"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:48
+msgctxt "alt. month"
+msgid "April"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:49
+msgctxt "alt. month"
+msgid "May"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:50
+msgctxt "alt. month"
+msgid "June"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:51
+msgctxt "alt. month"
+msgid "July"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:52
+msgctxt "alt. month"
+msgid "August"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:53
+#, fuzzy
+#| msgid "Members"
+msgctxt "alt. month"
+msgid "September"
+msgstr "Mitglieder"
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:54
+msgctxt "alt. month"
+msgid "October"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:55
+#, fuzzy
+#| msgid "Members"
+msgctxt "alt. month"
+msgid "November"
+msgstr "Mitglieder"
+
+#: env/lib/python2.7/site-packages/django/utils/dates.py:56
+#, fuzzy
+#| msgid "Members"
+msgctxt "alt. month"
+msgid "December"
+msgstr "Mitglieder"
+
+#: env/lib/python2.7/site-packages/django/utils/ipv6.py:12
+msgid "This is not a valid IPv6 address."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/text.py:81
+#, python-format
+msgctxt "String to return when truncating text"
+msgid "%(truncated_text)s..."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/text.py:251
+msgid "or"
+msgstr ""
+
+#. Translators: This string is used as a separator between list elements
+#: env/lib/python2.7/site-packages/django/utils/text.py:270
+#: env/lib/python2.7/site-packages/django/utils/timesince.py:71
+msgid ", "
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/utils/timesince.py:11
+#, python-format
+msgid "%d year"
+msgid_plural "%d years"
+msgstr[0] ""
+msgstr[1] ""
+
+#: env/lib/python2.7/site-packages/django/utils/timesince.py:12
+#, python-format
+msgid "%d month"
+msgid_plural "%d months"
+msgstr[0] ""
+msgstr[1] ""
+
+#: env/lib/python2.7/site-packages/django/utils/timesince.py:13
+#, python-format
+msgid "%d week"
+msgid_plural "%d weeks"
+msgstr[0] ""
+msgstr[1] ""
+
+#: env/lib/python2.7/site-packages/django/utils/timesince.py:14
+#, python-format
+msgid "%d day"
+msgid_plural "%d days"
+msgstr[0] ""
+msgstr[1] ""
+
+#: env/lib/python2.7/site-packages/django/utils/timesince.py:15
+#, python-format
+msgid "%d hour"
+msgid_plural "%d hours"
+msgstr[0] ""
+msgstr[1] ""
+
+#: env/lib/python2.7/site-packages/django/utils/timesince.py:16
+#, python-format
+msgid "%d minute"
+msgid_plural "%d minutes"
+msgstr[0] ""
+msgstr[1] ""
+
+#: env/lib/python2.7/site-packages/django/utils/timesince.py:60
+msgid "0 minutes"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/views/csrf.py:109
+msgid "Forbidden"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/views/csrf.py:110
+msgid "CSRF verification failed. Request aborted."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/views/csrf.py:114
+msgid ""
+"You are seeing this message because this HTTPS site requires a 'Referer "
+"header' to be sent by your Web browser, but none was sent. This header is "
+"required for security reasons, to ensure that your browser is not being "
+"hijacked by third parties."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/views/csrf.py:119
+msgid ""
+"If you have configured your browser to disable 'Referer' headers, please re-"
+"enable them, at least for this site, or for HTTPS connections, or for 'same-"
+"origin' requests."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/views/csrf.py:124
+msgid ""
+"You are seeing this message because this site requires a CSRF cookie when "
+"submitting forms. This cookie is required for security reasons, to ensure "
+"that your browser is not being hijacked by third parties."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/views/csrf.py:129
+msgid ""
+"If you have configured your browser to disable cookies, please re-enable "
+"them, at least for this site, or for 'same-origin' requests."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/views/csrf.py:134
+msgid "More information is available with DEBUG=True."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/views/debug.py:520
+msgid "Welcome to Django"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/views/debug.py:521
+msgid "It worked!"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/views/debug.py:522
+msgid "Congratulations on your first Django-powered page."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/views/debug.py:524
+msgid ""
+"Next, start your first app by running python manage.py startapp "
+"[app_label]
."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/views/debug.py:527
+msgid ""
+"You're seeing this message because you have DEBUG = True
in "
+"your Django settings file and you haven't configured any URLs. Get to work!"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/views/generic/dates.py:48
+msgid "No year specified"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/views/generic/dates.py:104
+msgid "No month specified"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/views/generic/dates.py:163
+msgid "No day specified"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/views/generic/dates.py:219
+msgid "No week specified"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/views/generic/dates.py:378
+#: env/lib/python2.7/site-packages/django/views/generic/dates.py:406
+#, python-format
+msgid "No %(verbose_name_plural)s available"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/views/generic/dates.py:660
+#, python-format
+msgid ""
+"Future %(verbose_name_plural)s not available because %(class_name)s."
+"allow_future is False."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/views/generic/dates.py:694
+#, python-format
+msgid "Invalid date string '%(datestr)s' given format '%(format)s'"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/views/generic/detail.py:55
+#, python-format
+msgid "No %(verbose_name)s found matching the query"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/views/generic/list.py:76
+msgid "Page is not 'last', nor can it be converted to an int."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/views/generic/list.py:81
+#, python-format
+msgid "Invalid page (%(page_number)s): %(message)s"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/views/generic/list.py:171
+#, python-format
+msgid "Empty list and '%(class_name)s.allow_empty' is False."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/views/static.py:44
+msgid "Directory indexes are not allowed here."
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/views/static.py:46
+#, python-format
+msgid "\"%(path)s\" does not exist"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/django/views/static.py:86
+#, python-format
+msgid "Index of %(directory)s"
+msgstr ""
+
+#: env/lib/python2.7/site-packages/jsonfield/fields.py:31
+#: env/lib/python2.7/site-packages/jsonfield/fields.py:43
+#: env/lib/python2.7/site-packages/jsonfield/fields.py:80
+msgid "Enter valid JSON"
+msgstr ""
+
+#: testing/config/settings/base.py:159
+msgid "PDF"
+msgstr "PDF"
+
+#: testing/config/settings/base.py:160
+msgid "Rich Text Format"
+msgstr "Rich Text Format"
+
+#: testing/config/settings/base.py:161
+msgid "Open Office"
+msgstr "Open Office"
+
+#: testing/config/settings/base.py:162
+msgid "Microsoft Office"
+msgstr "Microsoft Office"
+
+#: testing/config/settings/base.py:163
+msgid "HTML"
+msgstr "HTML"
+
+#: testing/config/settings/base.py:164
+msgid "Markdown"
+msgstr "Markdown"
+
+#: testing/config/settings/base.py:165
+msgid "mediawiki"
+msgstr "mediawiki"
+
+#: testing/config/settings/base.py:166
+msgid "LaTeX"
+msgstr "LaTeX"
+
+#~ msgid "Accounts"
+#~ msgstr "Benutzerkonten"
+
+#~ msgid "First name"
+#~ msgstr "Vorname"
+
+#~ msgid "Last name"
+#~ msgstr "Nachname"
+
+#~ msgid "Enter a help text to be displayed next to the input element"
+#~ msgstr ""
+#~ "Geben Sie einen Hilfetext, der neben dem Eingabefeld angezeigt wird, ein"
+
+#~ msgid "Additional field"
+#~ msgstr "Zusätzliches Feld"
+
+#~ msgid "Additional fields"
+#~ msgstr "Zusätzliche Felder"
+
+#~ msgid "Additional field value"
+#~ msgstr "Wert für zusätzliches Feld"
+
+#~ msgid "Additional field values"
+#~ msgstr "Werte für zusätzliches Felder"
+
+#~ msgid "The following e-mail addresses are associated with your account:"
+#~ msgstr ""
+#~ "Die folgenden E-Mail Adressen sind mit Ihrem Benutzerkonto verknüpft:"
+
+#~ msgid "Verified"
+#~ msgstr "Bestätigt"
+
+#~ msgid "Unverified"
+#~ msgstr "Unbestätigt"
+
+#~ msgid "Make Primary"
+#~ msgstr "Zur primären Adresse machen"
+
+#~ msgid "Re-send Verification"
+#~ msgstr "Bestätigungsmail nochmal senden"
+
+#~ msgid "Remove"
+#~ msgstr "Entfernen"
+
+#~ msgid "Warning:"
+#~ msgstr "Warnung:"
+
+#~ msgid ""
+#~ "You currently do not have any e-mail address set up. You should really "
+#~ "add an e-mail address so you can receive notifications, reset your "
+#~ "password, etc."
+#~ msgstr ""
+#~ "Sie haben zur Zeit keine E-Mail Adresse angegeben. Sie sollten dies "
+#~ "unbedingt tun, um Benachrichtigungen zu erhalten oder Ihr Password "
+#~ "zurücksetzen zu lassen."
+
+#~ msgid "Add E-mail Address"
+#~ msgstr "E-Mail Adresse hinzufügen"
+
+#~ msgid "Add E-mail"
+#~ msgstr "E-Mail hinzufügen"
+
+#~ msgid "Do you really want to remove the selected e-mail address?"
+#~ msgstr "Wollen sie wirklich die ausgewählte E-Mail Adresse entfernen?"
+
+#~ msgid "Dear"
+#~ msgstr "Liebe(r)"
+
+#~ msgid ""
+#~ "You are receiving this e-mail because you requested that your password on "
+#~ "%(site_domain)s will be reset. It can be safely ignored if you did not "
+#~ "request a password reset. Click the link below to reset your password."
+#~ msgstr ""
+#~ "Wir haben Ihnen dies E-Mail geschickt, weil sie Ihr Password auf "
+#~ "%(site_domain)s zurücksetzen möchten. Falls Sie das nicht getan haben, "
+#~ "können Sie diese E-Mail einfach ignorieren. Bitte klicken sie auf den "
+#~ "unten stehenden Link um Ihr Password zurückzusetzen."
+
+#~ msgid "In case you forgot, your username is '%(username)s'."
+#~ msgstr ""
+#~ "Falls Sie Ihren Benutzernamen vergessen haben, er lautet \"%(username)s\"."
+
+#~ msgid "Sincerely"
+#~ msgstr "Mit freundlichen Grüßen"
+
+#~ msgid "Password reset"
+#~ msgstr "Passwort zurücksetzen"
+
+#~ msgid "Confirm E-mail Address"
+#~ msgstr "E-Mail bestätigen"
+
+#~ msgid ""
+#~ "Please confirm that %(email)s is an e-"
+#~ "mail address for user %(user_display)s."
+#~ msgstr ""
+#~ "Bitte bestätigen sie, dass %(email)s "
+#~ "eine gültige E-Mail Adresse für den Benutzer %(user_display)s"
+#~ "strong> ist."
+
+#~ msgid "Confirm"
+#~ msgstr "Bestätigen"
+
+#~ msgid ""
+#~ "This e-mail confirmation link expired or is invalid. Please issue a new e-mail confirmation request."
+#~ msgstr ""
+#~ "Dieser Bestätigungs-Link ist abgelaufen oder ungültig. Bitte fordern sie eine neue Betätigungs-E-Mail an."
+
+#~ msgid "Login"
+#~ msgstr "Anmelden"
+
+#~ msgid "Login with Shibboleth"
+#~ msgstr "Mit Shibboleth einloggen"
+
+#~ msgid ""
+#~ "If you have not created an account yet, then please sign up first."
+#~ msgstr ""
+#~ "Falls Sie noch kein Benutzerkonto haben, registrieren Sie sich bitte zunächst."
+
+#~ msgid ""
+#~ "If you forgot your password and want to reset it, click here."
+#~ msgstr ""
+#~ "Falls Sie Ihr Passwort vergessen haben und es zurücksetzen wollen, "
+#~ "klicken Sie bitte hier."
+
+#~ msgid ""
+#~ "Alternatively, you can login using one of the following third party "
+#~ "accounts:"
+#~ msgstr "Sie können sich auch mit einem der folgenden Accounts anmelden:"
+
+#~ msgid "Logout"
+#~ msgstr "Abmelden"
+
+#~ msgid "Are you sure you want to sign out?"
+#~ msgstr "Sind sie sicher, dass Sie sich abmelden wollen?"
+
+#~ msgid "Change password"
+#~ msgstr "Passwort ändern"
+
+#~ msgid ""
+#~ "Please enter your old password, and then enter your new password twice so "
+#~ "we can verify you typed it in correctly."
+#~ msgstr ""
+#~ "Bitte geben Sie das alte Passwort und das gewünschte neue Passwort an. "
+#~ "Das neue Passwort muss aus Sicherheitsgründen wiederholt werden."
+
+#~ msgid ""
+#~ "Forgotten your password? Enter your e-mail address below, and we'll send "
+#~ "you an e-mail allowing you to reset it."
+#~ msgstr ""
+#~ "Haben Sie Ihr Passwort vergessen? Bitte geben Sie die E-Mail-Adresse an, "
+#~ "mit der Sie bei uns registriert sind, und wir senden Ihnen eine E-Mail "
+#~ "mit Instruktionen, wie sie Ihr Password neu setzen können."
+
+#~ msgid "Reset my password"
+#~ msgstr "Passwort neu setzen"
+
+#~ msgid "Password reset sent"
+#~ msgstr "Email gesendet"
+
+#~ msgid ""
+#~ "We have sent you an e-mail. Please contact us if you do not receive it "
+#~ "within a few minutes."
+#~ msgstr ""
+#~ "Wir haben Ihnen eine E-Mail geschickt. Bitte kontaktieren Sie uns, falls "
+#~ "Sie die E-Mail nicht in den nächsten Minuten erhalten sollten."
+
+#~ msgid ""
+#~ "If you don't receive an e-mail, please make sure you've entered the "
+#~ "address you registered with, and check your spam folder."
+#~ msgstr ""
+#~ "Sollten Sie keine E-Mail erhalten haben, vergewissern Sie sich, dass Sie "
+#~ "die E-Mail angegeben haben, mit der Sie bei uns registriert sind und "
+#~ "sehen Sie ggf. in Ihrem Spam-Ordner nach."
+
+#~ msgid "Bad token"
+#~ msgstr "Ungültiges Token"
+
+#~ msgid ""
+#~ "The password reset link was invalid, possibly because it has already been "
+#~ "used. Please request a new password "
+#~ "reset."
+#~ msgstr ""
+#~ "Der Password-Link was ungültig. Wahrscheinlich wurde er bereits "
+#~ "verwendet. Bitte fordern Sie einen neuen "
+#~ "Link an."
+
+#~ msgid "Enter new password"
+#~ msgstr "Passwort eingeben"
+
+#~ msgid "Change my password"
+#~ msgstr "Passwort ändern"
+
+#~ msgid "Your password is now changed."
+#~ msgstr "Ihr Password wurde geändert."
+
+#~ msgid "Password reset complete"
+#~ msgstr "Passwort neu gesetzt"
+
+#~ msgid "Your password has been set. You may go ahead and log in now."
+#~ msgstr "Ihr Passwort wurde geändert. Sie können sich jetzt einloggen."
+
+#~ msgid "Set new password"
+#~ msgstr "Neues Password setzen"
+
+#~ msgid ""
+#~ "Please enter your new password twice so we can verify you typed it in "
+#~ "correctly."
+#~ msgstr ""
+#~ "Bitte geben sie Ihr neues Passwort doppelt ein damit wir sichergehen "
+#~ "können, dass Sie sich nicht vertippt haben."
+
+#~ msgid "Set password"
+#~ msgstr "Passwort neu setzen"
+
+#~ msgid "Create a new account"
+#~ msgstr "Neues Benutzerkonto erstellen"
+
+#~ msgid ""
+#~ "Already have an account? Then please sign in"
+#~ "a>."
+#~ msgstr ""
+#~ "Falls Sie schon eine Benutzerkonto haben können Sie sich hier anmelden."
+
+#~ msgid "Create account"
+#~ msgstr "Benutzerkonto erstellen"
+
+#~ msgid "Sign up closed"
+#~ msgstr "Anmeldung geschlossen"
+
+#~ msgid "We are sorry, but the sign up is currently closed."
+#~ msgstr ""
+#~ "Es tut uns Leid, aber die Anmeldung ist zur Zeit leider geschlossen."
+
+#~ msgid ""
+#~ "We have sent an e-mail to you for verification. Follow the link provided "
+#~ "to finalize the signup process. Please contact us if you do not receive "
+#~ "it within a few minutes."
+#~ msgstr ""
+#~ "Wir haben Ihnen eine E-Mail zur Bestätigung geschickt. Folgen sie dem "
+#~ "Link in der E-Mail um die Registrierung abzuschließen. Bitte kontaktieren "
+#~ "Sie uns, falls Sie die E-Mail nicht in den nächsten Minuten erhalten "
+#~ "sollten."
+
+#~ msgid ""
+#~ "This part of the site requires us to verify that you are who you claim to "
+#~ "be. For this purpose, we require that you verify ownership of your e-mail "
+#~ "address. "
+#~ msgstr ""
+#~ "Für diesen Bereich muss Ihre E-Mail Adresse bestätigt sein. Bitte "
+#~ "bestätigen Sie die Ihre E-Mail Adresse."
+
+#~ msgid ""
+#~ "We have sent an e-mail to you for verification. Please click on the link "
+#~ "inside this e-mail. Please contact us if you do not receive it within a "
+#~ "few minutes."
+#~ msgstr ""
+#~ "Zur Bestätigung Ihrer E-Mail Adresse haben wir Ihnen eine E-Mail "
+#~ "geschickt. Bitte folgen sie den Anweisungen in dieser E-Mail. Bitte "
+#~ "kontaktieren Sie uns, falls Sie die E-Mail nicht in den nächsten Minuten "
+#~ "erhalten sollten."
+
+#~ msgid ""
+#~ "Note: you can still change "
+#~ "your e-mail address."
+#~ msgstr ""
+#~ "Hinweis: Sie können immer noch Ihre E-Mail Adresse ändern."
+
+#~ msgid "We are sorry, but you cannot update your profile here."
+#~ msgstr "Es tut uns Leid, aber sie können Ihr Profil hier nicht bearbeiten."
+
+#~ msgid "Update profile"
+#~ msgstr "Profil bearbeiten"
+
+#~ msgid ""
+#~ "Please enter your updated account information. You can change your "
+#~ "password using the password form and "
+#~ "update your e-mail using the e-mail form."
+#~ msgstr ""
+#~ "Bitte aktualisieren Sie die in Ihrem Benutzerkonto gespeicherten "
+#~ "Informationen. Sie könne Ihr Password hier"
+#~ "a> ändern und ihre E-Mail Adressen hier "
+#~ "verwalten."
+
+#~ msgid "Cancel"
+#~ msgstr "Abbrechen"
+
+#~ msgid "Social Network Login Failure"
+#~ msgstr "Fehler bei der Anmeldung zum externen Konto"
+
+#~ msgid ""
+#~ "An error occurred while attempting to login via your social network "
+#~ "account."
+#~ msgstr ""
+#~ "Während des Anmeldeprozesses zu dem externen Konto ist ein Fehler "
+#~ "aufgetreten."
+
+#~ msgid "Account connections"
+#~ msgstr "Verknüpfungen mit externen Konten"
+
+#~ msgid "Current connections"
+#~ msgstr "Derzeitige Verbindungen zu externen Konten"
+
+#~ msgid ""
+#~ "You can sign in to your account using any of the following third party "
+#~ "accounts:"
+#~ msgstr "Sie können sich mit den folgenden externen Konten anmelden:"
+
+#~ msgid "Remove selected account"
+#~ msgstr "Ausgewähltes Konto entfernen"
+
+#~ msgid ""
+#~ "You currently have no social network accounts connected to this account."
+#~ msgstr ""
+#~ "Zur Zeit haben Sie keine externen Konten mit Ihrem Benutzerkonto "
+#~ "verbunden."
+
+#~ msgid "Add an additional account"
+#~ msgstr "Externes Konto hinzufügen"
+
+#~ msgid "Login Cancelled"
+#~ msgstr "Anmeldung abgebrochen"
+
+#~ msgid ""
+#~ "You decided to cancel logging in to our site using one of your existing "
+#~ "accounts. If this was a mistake, please proceed to sign in."
+#~ msgstr ""
+#~ "Sie haben sich entschieden, die Anmeldung mit einem externen Konto "
+#~ "abzubrechen. Falls dies versehentlich geschehen ist, könne Sie hier fortsetzen."
+
+#~ msgid ""
+#~ "You are about to use your %(provider_name)s account to "
+#~ "login to %(site_name)s. As a final step, please complete the following "
+#~ "form:"
+#~ msgstr ""
+#~ "Sie sind dabei sich mit ihrem %(provider_name)s Konto "
+#~ "auf %(site_name)s anzumelden. Es sind noch zusätzliche Angaben von Ihnen "
+#~ "nötig:"
+
+#~ msgid "Name"
+#~ msgstr "Name"
+
+#~ msgid "Conditions"
+#~ msgstr "Bedingungen"
+
+#~ msgid "URI"
+#~ msgstr "URI"
+
+#~ msgid "The Uniform Resource Identifier of this option set (auto-generated)."
+#~ msgstr ""
+#~ "Der Uniform Resource Identifier dieses Optionssets (automatisch erstellt)."
+
+#~ msgid "URI Prefix"
+#~ msgstr "URI Prefix"
+
+#~ msgid "The prefix for the URI of this condition."
+#~ msgstr "Das Präfix für die URI dieser Bedingung."
+
+#~ msgid "Key"
+#~ msgstr "Schlüssel"
+
+#~ msgid "The internal identifier of this condition."
+#~ msgstr "Der interne Bezeichner dieser Bedingung."
+
+#~ msgid "Comment"
+#~ msgstr "Kommentar"
+
+#~ msgid "Additional internal information about this condition."
+#~ msgstr "Zusätzliche interne Informationen über diese Bedingung."
+
+#~ msgid "Source"
+#~ msgstr "Quelle"
+
+#~ msgid "The Attribute this condition is evaluating."
+#~ msgstr "Das Attribut das diese Bedingung auswertet."
+
+#~ msgid "Relation"
+#~ msgstr "Verknüpfung"
+
+#~ msgid "The Relation this condition is using."
+#~ msgstr "Die von dieser Bedingung verwendete Verknüpfung."
+
+#~ msgid "Target (Text)"
+#~ msgstr "Ziel (Text)"
+
+#~ msgid ""
+#~ "If using a regular attibute, the text value this condition is checking "
+#~ "against."
+#~ msgstr ""
+#~ "Falls ein normales Attribut verwendet wird: Der Text gegen den diese "
+#~ "Bedingung ausgewertet wird."
+
+#~ msgid "Target (Option)"
+#~ msgstr "Ziel (Option)"
+
+#~ msgid ""
+#~ "If using an options attribute, the option this condition is checking "
+#~ "against."
+#~ msgstr ""
+#~ "Falls ein Optionen-Attribut verwendet wird, die Option gegen die diese "
+#~ "Bedingung ausgewertet wird."
+
+#~ msgid "Filter"
+#~ msgstr "Filter"
+
+#~ msgid "Options"
+#~ msgstr "Optionen"
+
+#~ msgid "Create new condition"
+#~ msgstr "Neue Bedingung erstellen"
+
+#~ msgid "Export"
+#~ msgstr "Export"
+
+#~ msgid "XML"
+#~ msgstr "XML"
+
+#~ msgid "Update condition"
+#~ msgstr "Bedingung bearbeiten"
+
+#~ msgid "Delete condition"
+#~ msgstr "Bedingung entfernen"
+
+#~ msgid "Target"
+#~ msgstr "Ziel"
+
+#~ msgid ""
+#~ "You are about to permanently delete the condition %(object)s
."
+#~ msgstr ""
+#~ "Sie sind dabei die Bedingung %(object)s
permanent zu "
+#~ "entfernen."
+
+#~ msgid "This action cannot be undone!"
+#~ msgstr "Diese Aktion kann nicht rückgängig gemacht werden!"
+
+#~ msgid "Close"
+#~ msgstr "Schließen"
+
+#~ msgid "Save"
+#~ msgstr "Speichern"
+
+#~ msgid "created"
+#~ msgstr "erstellt"
+
+#~ msgid "updated"
+#~ msgstr "zuletzt geändert"
+
+#~ msgid "Not found"
+#~ msgstr "Seite nicht gefunden"
+
+#~ msgid "The requested URL was not found on this server."
+#~ msgstr "Die gewünschte URL konnte nicht gefunden werden."
+
+#~ msgid "Project RDMO"
+#~ msgstr "Projekt RDMO"
+
+#~ msgid ""
+#~ "The project aims to develop a tool to support the planning of the "
+#~ "research data management. In addition, the tool will create a textual "
+#~ "data management plan."
+#~ msgstr ""
+#~ "Ziel des Projekts ist es, ein Werkzeug zur Verfügung zu stellen, das die "
+#~ "strukturierte Planung des Forschungsdatenmanagements unterstützt und "
+#~ "zusätzlich die textuelle Ausgabe eines Datenmanagementplans ermöglicht."
+
+#~ msgid "The project is funded by the German Research Foundation."
+#~ msgstr ""
+#~ "Das Projekt wird von der Deutschen Forschungsgemeinschaft gefördert."
+
+#~ msgid "Open Source"
+#~ msgstr "Open Source"
+
+#~ msgid "RDMO is published on:"
+#~ msgstr "RDMO ist veröffentlicht auf:"
+
+#~ msgid "Management"
+#~ msgstr "Management"
+
+#~ msgid "Domain"
+#~ msgstr "Domäne"
+
+#~ msgid "Questions"
+#~ msgstr "Fragen"
+
+#~ msgid "Tasks"
+#~ msgstr "Aufgaben"
+
+#~ msgid "Views"
+#~ msgstr "Ansichten"
+
+#~ msgid "Admin"
+#~ msgstr "Admin"
+
+#~ msgid "Language"
+#~ msgstr "Sprache"
+
+#~ msgid "Update email"
+#~ msgstr "E-Mail bearbeiten"
+
+#~ msgid ""
+#~ "A tool to support the planning, implementation, and organisation of "
+#~ "research data management."
+#~ msgstr ""
+#~ "Ein Werkzeug zur Planung, Umsetzung und der Verwaltung des "
+#~ "Forschungsdatenmanagements."
+
+#~ msgid "This format is not supported."
+#~ msgstr "Dieses Format wird nicht unterstützt."
+
+#~ msgid ""
+#~ "%(model)s with the path \"%(path)s\" already exists. Please adjust the "
+#~ "the Key."
+#~ msgstr ""
+#~ "%(model)s mit dem Pfad \"%(path)s\" existiert bereits. Bitte passen Sie "
+#~ "den Schlüssel an."
+
+#~ msgid ""
+#~ "The Uniform Resource Identifier of this attribute/entity set (auto-"
+#~ "generated)."
+#~ msgstr ""
+#~ "Der Uniform Resource Identifier dieses Attributs/dieser Entität "
+#~ "(automatisch erstellt)."
+
+#~ msgid "The prefix for the URI of this attribute/entity."
+#~ msgstr "Das Präfix für die URI dieses Attributs/dieser Entität."
+
+#~ msgid "The internal identifier of this attribute/entity."
+#~ msgstr "Das interne Bezeichner für dieses Attributs/diese Entität."
+
+#~ msgid "Additional information about this attribute/entity."
+#~ msgstr "Zusätzliche Informationen über dieses Attribut/diese Entität."
+
+#~ msgid "Parent entity"
+#~ msgstr "Übergeordnete Entität"
+
+#~ msgid "Parent entity in the domain model."
+#~ msgstr "Übergeordnete Entität im Domänenmodell."
+
+#~ msgid "Parent collection"
+#~ msgstr "Übergeordnete Sammlung"
+
+#~ msgid "Next collection entity upwards in the domain model (auto-generated)."
+#~ msgstr ""
+#~ "Nächste Sammlungs-Entität aufwärts im Domänenmodell (automatisch "
+#~ "generiert)"
+
+#~ msgid "is collection"
+#~ msgstr "Ist eine Sammlung"
+
+#~ msgid "Designates whether this attribute/entity is a collection."
+#~ msgstr "Legt fest, ob dieses Objekt eine Sammlung ist."
+
+#~ msgid "is attribute"
+#~ msgstr "ist ein Attribut"
+
+#~ msgid ""
+#~ "Designates whether this attribute/entity is an attribute (auto-generated)."
+#~ msgstr "Legt fest, ob dieses Objekt ein Attribut ist."
+
+#~ msgid "List of conditions evaluated for this attribute/entity."
+#~ msgstr ""
+#~ "Liste der Bedingungen die für dieses Attribut/ diese Entität ausgewertet "
+#~ "werden."
+
+#~ msgid "Path"
+#~ msgstr "Pfad"
+
+#~ msgid "The path part of the URI of this attribute/entity (auto-generated)."
+#~ msgstr ""
+#~ "Der Pfad-Teil der URI für dieses Attribut/diese Entität (automatisch "
+#~ "erstellt)."
+
+#~ msgid "Attribute entity"
+#~ msgstr "Attribut-Entitäten"
+
+#~ msgid "Attribute entities"
+#~ msgstr "Attribut-Entität"
+
+#~ msgid "Float"
+#~ msgstr "Kommazahl"
+
+#~ msgid "Boolean"
+#~ msgstr "Boolsche Variable"
+
+#~ msgid "Value type"
+#~ msgstr "Wert-Typ"
+
+#~ msgid "Type of value for this attribute."
+#~ msgstr "Art von Wert für dieses Attribut."
+
+#~ msgid "Unit"
+#~ msgstr "Einheit"
+
+#~ msgid "Unit for this attribute."
+#~ msgstr "Maßeinheit dieses Attributes."
+
+#~ msgid "Option sets"
+#~ msgstr "Optionensets"
+
+#~ msgid "Option sets for this attribute."
+#~ msgstr "Optionenset für dieses Attribut."
+
+#~ msgid "Attribute"
+#~ msgstr "Attribut"
+
+#~ msgid "Attributes"
+#~ msgstr "Attribute"
+
+#~ msgid "Attribute/entity this verbose name belongs to."
+#~ msgstr "Attribut/Entität zu dem dieser Anzeigenname gehört."
+
+#~ msgid "Name (en)"
+#~ msgstr "Name (en)"
+
+#~ msgid "English name displayed for this attribute/entity (e.g. project)."
+#~ msgstr ""
+#~ "Englischer Name der für dieses Attribut/diese Entität angezeigt wird."
+
+#~ msgid "Name (de)"
+#~ msgstr "Name (de)"
+
+#~ msgid "German name displayed for this attribute/entity (e.g. Projekt)."
+#~ msgstr ""
+#~ "Deutscher Name der für dieses Attribut/diese Entität angezeigt wird."
+
+#~ msgid "Plural name (en)"
+#~ msgstr "Name (Plural, en)"
+
+#~ msgid ""
+#~ "English plural name displayed for this attribute/entity (e.g. projects)."
+#~ msgstr ""
+#~ "Englischer Name (Plural) der für dieses Attribut/diese Entität angezeigt "
+#~ "wird."
+
+#~ msgid "Plural name (de)"
+#~ msgstr "Name (Plural, de)"
+
+#~ msgid ""
+#~ "German plural name displayed for this attribute/entity (e.g. Projekte)."
+#~ msgstr ""
+#~ "Deutscher Name (Plural) der für dieses Attribut/diese Entität angezeigt "
+#~ "wird."
+
+#~ msgid "Verbose name"
+#~ msgstr "Anzeigename"
+
+#~ msgid "Verbose names"
+#~ msgstr "Anzeigename"
+
+#~ msgid "Attribute this verbose name belongs to."
+#~ msgstr "Attribute zu dem dieser Anzeigenname gehört."
+
+#~ msgid "Minimum"
+#~ msgstr "Minimum"
+
+#~ msgid "Minimal value for this attribute."
+#~ msgstr "Minimaler Wert für dieses Attribut."
+
+#~ msgid "Maximum"
+#~ msgstr "Maximum"
+
+#~ msgid "Maximum value for this attribute."
+#~ msgstr "Maximaler Wert für dieses Attribut."
+
+#~ msgid "Step"
+#~ msgstr "Schrittgröße"
+
+#~ msgid "Step in which this attribute can be incremented/decremented."
+#~ msgstr ""
+#~ "Schritte in denen dieses Attribut erhöht oder verringert werden kann."
+
+#~ msgid "Ranges"
+#~ msgstr "Bereiche"
+
+#~ msgid "Create new entity"
+#~ msgstr "Neue Entität erstellen"
+
+#~ msgid "Create new attribute"
+#~ msgstr "Neues Attribut erstellen"
+
+#~ msgid "CSV"
+#~ msgstr "CSV"
+
+#~ msgid "Entity"
+#~ msgstr "Entität"
+
+#~ msgid "Collection"
+#~ msgstr "Sammlung"
+
+#~ msgid "yes"
+#~ msgstr "Ja"
+
+#~ msgid "Verbose name plural"
+#~ msgstr "Anzeigename, plural"
+
+#~ msgid "Delete attribute"
+#~ msgstr "Attribut entfernen"
+
+#~ msgid ""
+#~ "You are about to permanently delete the attribute %(object)s
."
+#~ msgstr ""
+#~ "Sie sind dabei das Attribut %(object)s
permanent zu "
+#~ "entfernen."
+
+#~ msgid "Delete entity"
+#~ msgstr "Entität entfernen"
+
+#~ msgid ""
+#~ "You are about to permanently delete the entity %(object)s
."
+#~ msgstr ""
+#~ "Sie sind dabei die Entität %(object)s
permanent zu entfernen."
+
+#~ msgid "This will also delete the following attributes:"
+#~ msgstr "Es werden auch die folgenden Attribute entfernt:"
+
+#~ msgid "The prefix for the URI of this attribute."
+#~ msgstr "Das Präfix für die URI dieses Attributs."
+
+#~ msgid "The internal identifier of this attribute."
+#~ msgstr "Der interne Bezeichner diese Attributs."
+
+#~ msgid "Additional internal information about this attribute."
+#~ msgstr "Zusätzliche interne Informationen über dieses Attribut."
+
+#~ msgid ""
+#~ "Designates whether this attribute can have several values (for checkboxes "
+#~ "or multiple answers)."
+#~ msgstr ""
+#~ "Legt fest, ob dieses Objekt mehrere Werte haben kann (für Ankreuzkästchen "
+#~ "oder mehrere Antworten)."
+
+#~ msgid "Hold down Control, or Command on a Mac, to select more than one."
+#~ msgstr ""
+#~ "Halten Sie die Strg-Taste (⌘ für Mac) während des Klickens gedrückt, um "
+#~ "mehrere Einträge auszuwählen."
+
+#~ msgid "The prefix for the URI of this entity."
+#~ msgstr "Das Präfix für die URI die dieser Entität."
+
+#~ msgid "The internal identifier of this entity."
+#~ msgstr "Der interne Bezeichner für diese Entität."
+
+#~ msgid "Additional internal information about this entity."
+#~ msgstr "Zusätzliche interne Informationen über diese Entität."
+
+#~ msgid "Designates whether this entity can have several sets of values."
+#~ msgstr "Legt fest, ob dieses Objekt mehrere Sets von Werten haben kann."
+
+#~ msgid "Add attribute or entity"
+#~ msgstr "Attribut oder Entität hinzufügen"
+
+#~ msgid "Add attribute"
+#~ msgstr "Attribut hinzufügen"
+
+#~ msgid "Add entity"
+#~ msgstr "Entität hinzufügen"
+
+#~ msgid "Update entity"
+#~ msgstr "Entität bearbeiten"
+
+#~ msgid "Update verbose name"
+#~ msgstr "Anzeigename bearbeiten"
+
+#~ msgid "Update conditions"
+#~ msgstr "Bedingung bearbeiten"
+
+#~ msgid "Update attribute"
+#~ msgstr "Attribut bearbeiten"
+
+#~ msgid "Update range"
+#~ msgstr "Bereich bearbeiten"
+
+#~ msgid "Update options"
+#~ msgstr "Optionen bearbeiten"
+
+#~ msgid "collection"
+#~ msgstr "Sammlung"
+
+#~ msgid "The prefix for the URI of this option set."
+#~ msgstr "Das Präfix für die URI dieses Optionenset."
+
+#~ msgid "The internal identifier of this option set."
+#~ msgstr "Der interne Bezeichner für dieses Optionenset."
+
+#~ msgid "Additional internal information about this option set."
+#~ msgstr "Zusätzliche interne Informationen über dieses Optionenset."
+
+#~ msgid "The position of this option set in lists."
+#~ msgstr "Die Position von diesem Optionenset in Listen."
+
+#~ msgid "The list of conditions evaluated for this option set."
+#~ msgstr ""
+#~ "Die Liste der Bedingungen die für dieses Optionenset ausgewertet werden."
+
+#~ msgid "Option set"
+#~ msgstr "Optionenset"
+
+#~ msgid "The Uniform Resource Identifier of this option (auto-generated)."
+#~ msgstr ""
+#~ "Der Uniform Resource Identifier dieser Option (automatisch erstellt)."
+
+#~ msgid "The prefix for the URI of this option."
+#~ msgstr "Das Präfix für die URI dieser Option."
+
+#~ msgid "The internal identifier of this option."
+#~ msgstr "Der interne Bezeichner für diese Option."
+
+#~ msgid "The path part of the URI for this option (auto-generated)."
+#~ msgstr "Der Pfad-Teil der URI für diese Option (automatisch erstellt)."
+
+#~ msgid "Additional internal information about this option."
+#~ msgstr "Zusätzliche interne Informationen über diese Option."
+
+#~ msgid "The option set this option belongs to."
+#~ msgstr "Das Optionenset zu dem diese Option gehört."
+
+#~ msgid "Position in lists."
+#~ msgstr "Position in Listen."
+
+#~ msgid "Text (en)"
+#~ msgstr "Text (en)"
+
+#~ msgid "The English text displayed for this option."
+#~ msgstr "Der englische Text für diese Option."
+
+#~ msgid "Text (de)"
+#~ msgstr "Text (de)"
+
+#~ msgid "The German text displayed for this option."
+#~ msgstr "Der deutsche Text für diese Option."
+
+#~ msgid "Additional input"
+#~ msgstr "Zusätzliche Eingabe"
+
+#~ msgid "Designates whether an additional input is possible for this option."
+#~ msgstr ""
+#~ "Legt fest, ob eine zusätzliche Eingabe für diese Option möglich ist."
+
+#~ msgid "Option"
+#~ msgstr "Option"
+
+#~ msgid "Create new option set"
+#~ msgstr "Neues Optionenset erstellen"
+
+#~ msgid "Create new option"
+#~ msgstr "Neue Option erstellen"
+
+#~ msgid "Add option"
+#~ msgstr "Option hinzufügen"
+
+#~ msgid "Update option set"
+#~ msgstr "Optionenset bearbeiten"
+
+#~ msgid "Delete option set"
+#~ msgstr "Optionenset entfernen"
+
+#~ msgid "Update option"
+#~ msgstr "Option bearbeiten"
+
+#~ msgid "Delete option"
+#~ msgstr "Option entfernen"
+
+#~ msgid ""
+#~ "You are about to permanently delete the option %(object)s
."
+#~ msgstr ""
+#~ "Sie sind dabei die Option %(object)s
permanent zu entfernen."
+
+#~ msgid ""
+#~ "You are about to permanently delete the option set %(object)s"
+#~ "code>."
+#~ msgstr ""
+#~ "Sie sind dabei das Optionenset %(object)s
permanent zu "
+#~ "entfernen."
+
+#~ msgid ""
+#~ "Important! This will also delete the following items:"
+#~ msgstr ""
+#~ "Important! Es werden auch die folgenden Objekte entfernt:"
+
+#~ msgid "Projects"
+#~ msgstr "Projekte"
+
+#~ msgid "Username or email"
+#~ msgstr "Benutzername oder E-Mail"
+
+#~ msgid "User"
+#~ msgstr "Benutzer"
+
+#~ msgid "The username or email for the user of this membership."
+#~ msgstr "Der Benutzername oder die Email für diese Mitgliedschaft."
+
+#~ msgid "Please enter a valid username or email."
+#~ msgstr "Bitte geben Sie einen gültigen Benutzernamen oder Email ein."
+
+#~ msgid "The user is already a member of the project."
+#~ msgstr "Der Benutzer ist bereits ein Mitglied dieses Projektes."
+
+#~ msgid "The list of users for this project."
+#~ msgstr "Die Liste der Benutzer für dieses Projekt."
+
+#~ msgid "Title"
+#~ msgstr "Titel"
+
+#~ msgid "The title for this project."
+#~ msgstr "Der Titel für dieses Projekt."
+
+#~ msgid "A description for this project (optional)."
+#~ msgstr "Ein Beschreibung für dieses Projekt (optional)."
+
+#~ msgid "Catalog"
+#~ msgstr "Katalog"
+
+#~ msgid "The catalog which will be used for this project."
+#~ msgstr "Der Fragenkatalog der für dieses Projekt verwendet wird."
+
+#~ msgid "Project"
+#~ msgstr "Projekt"
+
+#~ msgid "Owner"
+#~ msgstr "Besitzer"
+
+#~ msgid "Manager"
+#~ msgstr "Manager"
+
+#~ msgid "Author"
+#~ msgstr "Autor"
+
+#~ msgid "Guest"
+#~ msgstr "Gast"
+
+#~ msgid "The project for this membership."
+#~ msgstr "Das Projekt zu dem diese Mitgliedschaft gehört."
+
+#~ msgid "The user for this membership."
+#~ msgstr "Der Benutzer für diese Mitgliedschaft."
+
+#~ msgid "Role"
+#~ msgstr "Rolle"
+
+#~ msgid "The role for this membership."
+#~ msgstr "Die Rolle für diese Mitgliedschaft."
+
+#~ msgid "Membership"
+#~ msgstr "Mitgliedschaft"
+
+#~ msgid "Memberships"
+#~ msgstr "Mitgliedschaften"
+
+#~ msgid "The project this snapshot belongs to."
+#~ msgstr "Das Projekt zu dem dieser Snapshot gehört."
+
+#~ msgid "The title for this snapshot."
+#~ msgstr "Der Titel für diesen Snapshot."
+
+#~ msgid "A description for this snapshot (optional)."
+#~ msgstr "Ein Beschreibung für diesen Snapshot (optional)."
+
+#~ msgid "Snapshot"
+#~ msgstr "Snapshot"
+
+#~ msgid "Snapshots"
+#~ msgstr "Snapshots"
+
+#~ msgid "The project this value belongs to."
+#~ msgstr "Das Projekt zu dem dieser Wert gehört."
+
+#~ msgid "The snapshot this value belongs to."
+#~ msgstr "Der Snapshot zu dem dieser Wert gehört."
+
+#~ msgid "The attribute this value belongs to."
+#~ msgstr "Das Attribut zu dem dieser Wert gehört."
+
+#~ msgid "Set index"
+#~ msgstr "Set-Index"
+
+#~ msgid ""
+#~ "The position of this value in an entity collection (i.e. in the question "
+#~ "set)"
+#~ msgstr ""
+#~ "Die Position von diesem Wert in einer Entität (einem Fragenset) in Listen."
+
+#~ msgid "Collection index"
+#~ msgstr "Sammlungs-Index"
+
+#~ msgid "The position of this value in an attribute collection."
+#~ msgstr "Die Position von diesem Wert in einem Sammlungs-Attribut."
+
+#~ msgid "The string stored for this value."
+#~ msgstr "Die Zeichenkette die für diesen Wert gespeichert wird."
+
+#~ msgid "The option stored for this value."
+#~ msgstr "Die Option die für diesen Wert gespeichert wird."
+
+#~ msgid "Value"
+#~ msgstr "Wert"
+
+#~ msgid "Values"
+#~ msgstr "Werte"
+
+#~ msgid "current"
+#~ msgstr "aktuell"
+
+#~ msgid "item"
+#~ msgstr "Eintrag"
+
+#~ msgid "items"
+#~ msgstr "Einträge"
+
+#~ msgid "sets"
+#~ msgstr "Sets"
+
+#~ msgid "Delete membership"
+#~ msgstr "Mitgliedschaft entfernen"
+
+#~ msgid ""
+#~ "You are about to remove the user %(user)s from the "
+#~ "project %(title)s."
+#~ msgstr ""
+#~ "Sie sind dabei den User %(user)s aud dem Projekt "
+#~ "%(title)s zu entfernen."
+
+#~ msgid "Update membership"
+#~ msgstr "Mitgliedschaft bearbeiten"
+
+#~ msgid "Add member to project"
+#~ msgstr "Mitglied zu Projekt hinzufügen"
+
+#~ msgid "Add member"
+#~ msgstr "Mitglied hinzufügen"
+
+#~ msgid "Back to project overview"
+#~ msgstr "Zurück zum Projekt"
+
+#~ msgid "Answers for %(title)s"
+#~ msgstr "Antworten für %(title)s"
+
+#~ msgid ""
+#~ "In the following, we have summarized the information about the project as "
+#~ "given by you and your collaborators."
+#~ msgstr ""
+#~ "Im Folgenden haben wir die von Ihnen eingegebenen Informationen über das "
+#~ "Projekt noch einmal zusammengefasst."
+
+#~ msgid "Delete project"
+#~ msgstr "Projekt entfernen"
+
+#~ msgid ""
+#~ "You are about to permanently delete the project %(object)s"
+#~ "strong>."
+#~ msgstr ""
+#~ "Sie sind dabei das Projekt %(object)s
permanent zu entfernen."
+
+#~ msgid "Update project information"
+#~ msgstr "Projektinformationen bearbeiten"
+
+#~ msgid "Answer questions"
+#~ msgstr "Fragen beantworten"
+
+#~ msgid "View answers"
+#~ msgstr "Antworten anzeigen"
+
+#~ msgid "Create snapshot"
+#~ msgstr "Snapshot erstellen"
+
+#~ msgid "Export project as XML"
+#~ msgstr "Projekt als XML exportieren"
+
+#~ msgid "Back to projects overview"
+#~ msgstr "Zurück zu den Projekten"
+
+#~ msgid "No description available."
+#~ msgstr "Keine Beschreibung vorhanden."
+
+#~ msgid "E-Mail"
+#~ msgstr "E-Mail"
+
+#~ msgid "Created"
+#~ msgstr "Erstellt"
+
+#~ msgid "Update snapshot"
+#~ msgstr "Snapshot bearbeiten"
+
+#~ msgid "Rollback to snapshot"
+#~ msgstr "Auf Snapshot zurücksetzen"
+
+#~ msgid "No snapshots found."
+#~ msgstr "Keine Snapshots gefunden."
+
+#~ msgid "Task"
+#~ msgstr "Aufgabe"
+
+#~ msgid "Time frame"
+#~ msgstr "Zeitraum"
+
+#~ msgid "No active tasks found."
+#~ msgstr "Keine aktiven Aufgaben gefunden."
+
+#~ msgid "View"
+#~ msgstr "Ansicht"
+
+#~ msgid "Display view"
+#~ msgstr "Ansicht anzeigen"
+
+#~ msgid "No views found."
+#~ msgstr "Keine Ansichten gefunden."
+
+#~ msgid "Update project"
+#~ msgstr "Projekt bearbeiten"
+
+#~ msgid "Create new project"
+#~ msgstr "Neues Projekt erstellen"
+
+#~ msgid "Create project"
+#~ msgstr "Neues Projekt erstellen"
+
+#~ msgid "Questionnaire for project {$ service.project.title $}"
+#~ msgstr "Fragebogen für Projekt {$ service.project.title $}"
+
+#~ msgid "Save and proceed"
+#~ msgstr "Sichern und fortfahren"
+
+#~ msgid "Back"
+#~ msgstr "Zurück"
+
+#~ msgid "Skip"
+#~ msgstr "Überspringen"
+
+#~ msgid "Add %(name)s"
+#~ msgstr "%(name)s hinzufügen"
+
+#~ msgid ""
+#~ "Please enter the %(name_plural)s line by line. You can add "
+#~ "%(name_plural)s using the green button and remove them using the red "
+#~ "cross (×)."
+#~ msgstr ""
+#~ "Bitte nutzen Sie für die %(name_plural)s jeweils eine eigene Zeile. Sie "
+#~ "können weitere %(name_plural)s mit dem grünen Knopf hinzufügen und mit "
+#~ "dem roten Kreuz (×) entfernen."
+
+#~ msgid "Thank you for filling out the questionnaire."
+#~ msgstr "Vielen Dank für das Beantworten der Fragen."
+
+#~ msgid "Please select"
+#~ msgstr "Bitte auswählen"
+
+#~ msgid ""
+#~ "You are about to permanently delete the %(name)s %(object)s"
+#~ "strong>."
+#~ msgstr ""
+#~ "Sie sind dabei den %(name)s %(object)s permanent zu "
+#~ "entfernen."
+
+#~ msgid "You are about to permanently delete this %(name)s."
+#~ msgstr "Sie sind dabei diesen %(name)s permanent zu entfernen."
+
+#~ msgid ""
+#~ "This includes all given answers for this %(name)s on all pages, not just "
+#~ "this one."
+#~ msgstr ""
+#~ "Dies umfasst alle gegebenen Antworten für dieses %(name)s auf allen "
+#~ "Seiten, nicht nur dieser."
+
+#~ msgid "Please give the %(name)s a meaningful name."
+#~ msgstr "Bitte geben Sie dem %(name)s einen aussagekräftigen Namen."
+
+#~ msgid ""
+#~ "Please fill in the form for each %(name)s. The different %(name_plural)s "
+#~ "will be referred to in following questions. You can add a new %(name)s "
+#~ "using the green button. Once created, you can edit or delete "
+#~ "%(name_plural)s using the buttons in the top right corner."
+#~ msgstr ""
+#~ "Bitte füllen Sie das Formular für jeden %(name)s aus. Die verschiedenen "
+#~ "%(name_plural)s werden eventuell in späteren Fragen wieder verwendet. Sie "
+#~ "können einen neuen %(name)s mit dem grünen Knopf hinzufügen. Bereits "
+#~ "angelegte %(name_plural)s können mit den Knöpfen oben rechts bearbeitet "
+#~ "oder wieder entfernt werden."
+
+#~ msgid "Update %(name)s"
+#~ msgstr "%(name)s bearbeiten"
+
+#~ msgid "Remove %(name)s"
+#~ msgstr "%(name)s entfernen"
+
+#~ msgid "Progress"
+#~ msgstr "Fortschritt"
+
+#~ msgid "Navigation"
+#~ msgstr "Navigation"
+
+#~ msgid "Please note that using the navigation will discard any usaved input."
+#~ msgstr ""
+#~ "Bitte beachten sie das durch die Benutzung der Navigation ungesicherte "
+#~ "Eingaben verworfen werden."
+
+#~ msgid "skip to previous page"
+#~ msgstr "Zur vorherigen Frage springen"
+
+#~ msgid "skip to next page"
+#~ msgstr "Zur nächsten Frage springen"
+
+#~ msgid "Overview"
+#~ msgstr "Übersicht"
+
+#~ msgid "Error"
+#~ msgstr "Fehler"
+
+#~ msgid "There has been a problem creating the view. Please contact support."
+#~ msgstr ""
+#~ "Beim Erstellen der Ansicht ist ein Fehler aufgetreten. Bitte kontaktieren "
+#~ "Sie den Support."
+
+#~ msgid "My Data"
+#~ msgstr "Meine Daten"
+
+#~ msgid "My Groups"
+#~ msgstr "Meine Gruppen"
+
+#~ msgid "My Projects"
+#~ msgstr "Meine Projekte"
+
+#~ msgid "Create new snapshot"
+#~ msgstr "Neuen Snapshot erstellen"
+
+#~ msgid ""
+#~ "You are about to reset all values to the snapshot %(title)s"
+#~ "strong>. All newer values will be deleted."
+#~ msgstr ""
+#~ "Sie sind dabei alle Werte auf den Snapshot %(title)s "
+#~ "zurückzusetzen. Alle neueren Werte werden entfernt."
+
+#~ msgid "Rollback"
+#~ msgstr "Zurücksetzen"
+
+#~ msgid "The Uniform Resource Identifier of this catalog (auto-generated)."
+#~ msgstr ""
+#~ "Der Uniform Resource Identifier dieses Katalogs (automatisch erstellt)."
+
+#~ msgid "The prefix for the URI of this catalog."
+#~ msgstr "Das Präfix für die URI dieses Katalogs."
+
+#~ msgid "The internal identifier of this catalog."
+#~ msgstr "Der interne Bezeichner für diesen Katalog."
+
+#~ msgid "Additional internal information about this catalog."
+#~ msgstr "Zusätzliche interne Informationen über diesen Katalog."
+
+#~ msgid "The position of this catalog in lists."
+#~ msgstr "Die Position von diesem Katalog in Listen."
+
+#~ msgid "Title (en)"
+#~ msgstr "Titel (en)"
+
+#~ msgid "The English title for this catalog."
+#~ msgstr "Der englische Titel für diesen Katalog."
+
+#~ msgid "Title (de)"
+#~ msgstr "Titel (de)"
+
+#~ msgid "The German title for this catalog."
+#~ msgstr "Der deutsche Titel für diesen Katalog."
+
+#~ msgid "Catalogs"
+#~ msgstr "Kataloge"
+
+#~ msgid "The Uniform Resource Identifier of this section (auto-generated)."
+#~ msgstr ""
+#~ "Der Uniform Resource Identifier diese Abschnitts (automatisch erstellt)."
+
+#~ msgid "The prefix for the URI of this section."
+#~ msgstr "Das Präfix für die URI die dieses Abschnitts."
+
+#~ msgid "The internal identifier of this section."
+#~ msgstr "Der interne Bezeichner für diesen Abschnitt."
+
+#~ msgid "Label"
+#~ msgstr "Label"
+
+#~ msgid "The path part of the URI of this section (auto-generated)."
+#~ msgstr "Der Pfad-Teil der URI für diesen Abschnitt (automatisch erstellt)."
+
+#~ msgid "Additional internal information about this section."
+#~ msgstr "Zusätzliche interne Informationen über diesen Abschnitt."
+
+#~ msgid "The catalog this section belongs to."
+#~ msgstr "Der Katalog zu dem dieser Abschnitt gehört."
+
+#~ msgid "The English title for this section."
+#~ msgstr "Der englische Titel für diesen Abschnitt."
+
+#~ msgid "The German title for this section."
+#~ msgstr "Der deutsche Titel für diesen Unterabschnitt."
+
+#~ msgid "Section"
+#~ msgstr "Abschnitt"
+
+#~ msgid "Sections"
+#~ msgstr "Unterabschnitt"
+
+#~ msgid "The Uniform Resource Identifier of this subsection (auto-generated)."
+#~ msgstr ""
+#~ "Der Uniform Resource Identifier dieses Unterabschnitts (automatisch "
+#~ "erstellt)."
+
+#~ msgid "The prefix for the URI of this subsection."
+#~ msgstr "Das Präfix für die URI dieses Unterabschnitts."
+
+#~ msgid "The internal identifier of this subsection."
+#~ msgstr "Der interne Bezeichner für diesen Unterabschnitt."
+
+#~ msgid "The path part of the URI of this subsection (auto-generated)."
+#~ msgstr ""
+#~ "Der Pfad-Teil der URI für diesen Unterabschnitt (automatisch erstellt)."
+
+#~ msgid "Additional internal information about this subsection."
+#~ msgstr "Zusätzliche interne Informationen über diesen Unterabschnitt."
+
+#~ msgid "The section this subsection belongs to."
+#~ msgstr "Der Abschnitt zu dem dieser Unterabschnitt gehört."
+
+#~ msgid "The English title for this subsection."
+#~ msgstr "Der englische Titel für diesen Unterabschnitt."
+
+#~ msgid "The German title for this subsection."
+#~ msgstr "Der deutsche Titel für diesen Unterabschnitt."
+
+#~ msgid "Subsection"
+#~ msgstr "Unterabschnitt"
+
+#~ msgid "Subsections"
+#~ msgstr "Unterabschnitte"
+
+#~ msgid ""
+#~ "The Uniform Resource Identifier of this question/questionset (auto-"
+#~ "generated)."
+#~ msgstr ""
+#~ "Der Uniform Resource Identifier dieser Frage/dieses Fragensets "
+#~ "(automatisch erstellt)."
+
+#~ msgid "The prefix for the URI of this question/questionset."
+#~ msgstr "Das Präfix für die URI dieser Frage/dieses Fragensets."
+
+#~ msgid "The internal identifier of this question/questionset."
+#~ msgstr "Der interne Bezeichner für diese Frage/dieses Fragenset."
+
+#~ msgid ""
+#~ "The path part of the URI of this question/questionset (auto-generated)."
+#~ msgstr ""
+#~ "Der Pfad-Teil der URI für diese Frage/Fragenset (automatisch erstellt)."
+
+#~ msgid "Additional internal information about this question/questionset."
+#~ msgstr ""
+#~ "Zusätzliche interne Informationen über diese Frage/dieses Fragenset."
+
+#~ msgid "The attribute/entity this question/questionset belongs to."
+#~ msgstr ""
+#~ "Das Attribut/die Entität zu dem diese Frage/dieses Fragenset gehört."
+
+#~ msgid "The subsection this question/questionset belongs to."
+#~ msgstr "Der Unterabschnitt zu dem diese Frage/dieses Fragenset gehört."
+
+#~ msgid "The position of this question/questionset in lists."
+#~ msgstr "Die Position von dieser Frage/diesem Fragenset in Listen."
+
+#~ msgid "Help (en)"
+#~ msgstr "Hilfe (en)"
+
+#~ msgid "The English help text for this question/questionset."
+#~ msgstr "Der englische Hilfetext für diese Frage/dieses Fragenset."
+
+#~ msgid "Help (de)"
+#~ msgstr "Hilfe (de)"
+
+#~ msgid "The German help text for this question/questionset."
+#~ msgstr "Der deutsche Hilfetext für diese Frage/dieses Fragenset."
+
+#~ msgid "Question entity"
+#~ msgstr "Fragenobjekt"
+
+#~ msgid "Question entities"
+#~ msgstr "Fragenobjekte"
+
+#~ msgid "Parent"
+#~ msgstr "Übergeordnete Entität"
+
+#~ msgid "The question set this question belongs to."
+#~ msgstr "Das Fragenset zu dem diese Frage gehört."
+
+#~ msgid "The English text for this question."
+#~ msgstr "Der englische Text für diese Frage."
+
+#~ msgid "The German text for this question."
+#~ msgstr "Der deutsche Text für diese Frage."
+
+#~ msgid "Widget type"
+#~ msgstr "Widget-Typ"
+
+#~ msgid "Type of widget for this question."
+#~ msgstr "Art von Widget für diese Frage."
+
+#~ msgid "Question"
+#~ msgstr "Frage"
+
+#~ msgid "No attribute selected."
+#~ msgstr "Kein Attribut ausgewählt."
+
+#~ msgid "No entity selected."
+#~ msgstr "Keine Entität ausgewählt."
+
+#~ msgid "Entity and questions attributes mismatch."
+#~ msgstr "Entität und Attribute der Fragen passen nicht."
+
+#~ msgid "Question set"
+#~ msgstr "Fragenset"
+
+#~ msgid "Help"
+#~ msgstr "Hilfe"
+
+#~ msgid ""
+#~ "You are about to permanently delete the catalog %(object)s
."
+#~ msgstr ""
+#~ "Sie sind dabei den Katalog %(object)s
"
+#~ "permanent zu entfernen."
+
+#~ msgid ""
+#~ "You are about to permanently delete the question %(object)s
."
+#~ msgstr ""
+#~ "Sie sind dabei die Frage %(object)s
"
+#~ "permanent zu entfernen."
+
+#~ msgid ""
+#~ "You are about to permanently delete the question set %(object)s
."
+#~ msgstr ""
+#~ "Sie sind dabei das Fragenset %(object)s"
+#~ "code> permanent zu entfernen."
+
+#~ msgid ""
+#~ "You are about to permanently delete the section %(object)s
."
+#~ msgstr ""
+#~ "Sie sind dabei den Abschnitt %(object)s"
+#~ "code> permanent zu entfernen."
+
+#~ msgid ""
+#~ "You are about to permanently delete the subsection %(object)s
."
+#~ msgstr ""
+#~ "Sie sind dabei den Unterabschnitt "
+#~ "%(object)s
permanent zu entfernen."
+
+#~ msgid "The prefix for the URI of this question."
+#~ msgstr "Das Präfix für die URI dieser Frage."
+
+#~ msgid "The internal identifier of this question."
+#~ msgstr "Der interne Bezeichner für diese Frage."
+
+#~ msgid "Additional internal information about this question."
+#~ msgstr "Zusätzliche interne Informationen über diesen Abschnitt."
+
+#~ msgid "The subsection this question belongs to."
+#~ msgstr "Der Unterabschnitt für diese Frage."
+
+#~ msgid "The position of this question in lists."
+#~ msgstr "Die Position dieser Frage in Listen."
+
+#~ msgid "The attribute this question belongs to."
+#~ msgstr "Das Attribut zu dem diese Frage gehört."
+
+#~ msgid "The English help text for this question."
+#~ msgstr "Der englische Hilfetext für diese Frage."
+
+#~ msgid "The German help text for this question."
+#~ msgstr "Der deutsche Hilfetext für diese Frage."
+
+#~ msgid "Copy"
+#~ msgstr "Kopieren"
+
+#~ msgid "The prefix for the URI of this questionset."
+#~ msgstr "Das Präfix für die URI dieses Fragensets."
+
+#~ msgid "The internal identifier of this questionset."
+#~ msgstr "Der interne Bezeichner für dieses Fragenset."
+
+#~ msgid "Additional internal information about this questionset."
+#~ msgstr "Zusätzliche interne Informationen über diese Fragenset."
+
+#~ msgid "The subsection this questionset belongs to."
+#~ msgstr "Der Unterabschnitt für dieses Fragenset."
+
+#~ msgid "The position of this questionset in lists."
+#~ msgstr "Die Position von diesem Fragenset in Listen."
+
+#~ msgid "The entity this questionset belongs to."
+#~ msgstr "Das Entität zu dem dieses Fragenset gehört."
+
+#~ msgid "The English help text for this questionset."
+#~ msgstr "Der englische Hilfetext für dieses Fragenset."
+
+#~ msgid "The German help text for this questionset."
+#~ msgstr "Der deutsche Hilfetext für dieses Fragenset."
+
+#~ msgid "Update question"
+#~ msgstr "Frage bearbeiten"
+
+#~ msgid "Copy question"
+#~ msgstr "Frage kopieren"
+
+#~ msgid "Delete question"
+#~ msgstr "Frage entfernen"
+
+#~ msgid "Add question"
+#~ msgstr "Frage hinzufügen"
+
+#~ msgid "Update question set"
+#~ msgstr "Fragenset bearbeiten"
+
+#~ msgid "Copy question set"
+#~ msgstr "Fragenset kopieren"
+
+#~ msgid "Delete question set"
+#~ msgstr "Fragenset entfernen"
+
+#~ msgid "Add subsection"
+#~ msgstr "Unterabschnitt hinzufügen"
+
+#~ msgid "Update section"
+#~ msgstr "Abschnitt bearbeiten"
+
+#~ msgid "Delete section"
+#~ msgstr "Abschnitt entfernen"
+
+#~ msgid "Show options"
+#~ msgstr "Optionen anzeigen"
+
+#~ msgid "Add question set"
+#~ msgstr "Fragenset hinzufügen"
+
+#~ msgid "Update subsection"
+#~ msgstr "Unterabschnitt bearbeiten"
+
+#~ msgid "Delete subsection"
+#~ msgstr "Unterabschnitt entfernen"
+
+#~ msgid "Update catalog details"
+#~ msgstr "Katalogeigenschaften bearbeiten"
+
+#~ msgid "Delete catalog"
+#~ msgstr "Katalog entfernen"
+
+#~ msgid "Create new catalog"
+#~ msgstr "Neuen Katalog erstellen"
+
+#~ msgid "Create new section"
+#~ msgstr "Neuen Abschnitt erstellen"
+
+#~ msgid "Create new subsection"
+#~ msgstr "Neuen Unterabschnitt erstellen"
+
+#~ msgid "Create new questionset"
+#~ msgstr "Neues Fragenset erstellen"
+
+#~ msgid "Create new question"
+#~ msgstr "Neue Frage erstellen"
+
+#~ msgid "The Uniform Resource Identifier of this task (auto-generated)."
+#~ msgstr ""
+#~ "Der Uniform Resource Identifier dieser Aufgabe (automatisch erstellt)."
+
+#~ msgid "The prefix for the URI of this task."
+#~ msgstr "Das Präfix für die URI dieser Aufgabe."
+
+#~ msgid "The internal identifier of this task."
+#~ msgstr "Der interne Bezeichner für diese Aufgabe."
+
+#~ msgid "Additional internal information about this task."
+#~ msgstr "Zusätzliche interne Informationen über diese Aufgabe."
+
+#~ msgid "The English title for this task."
+#~ msgstr "Der englische Titel für diese Aufgabe."
+
+#~ msgid "The German title for this task."
+#~ msgstr "Der deutsche Titel für diese Aufgabe."
+
+#~ msgid "The English text for this task."
+#~ msgstr "Der englische Text für diese Aufgabe."
+
+#~ msgid "The German text for this task."
+#~ msgstr "Der deutsche Text für diese Aufgabe."
+
+#~ msgid "The list of conditions evaluated for this task."
+#~ msgstr "Die Liste der Bedingungen die für diese Aufgabe ausgewertet werden."
+
+#~ msgid "The task this time frame belongs to."
+#~ msgstr "Die Aufgabe zu der dieser Zeitraum gehört."
+
+#~ msgid "Start date attribute"
+#~ msgstr "Anfangsdatums-Attribut"
+
+#~ msgid "The Attribute that is setting the start date for this task."
+#~ msgstr "Das Attribut das des Anfangsdatum für die Aufgabe festlegt."
+
+#~ msgid "End date attribute"
+#~ msgstr "Enddatums-Attribute"
+
+#~ msgid ""
+#~ "The Attribute that is setting the end date for this task (optional, if no "
+#~ "end date attribute is given, the start date attribute sets also the end "
+#~ "date)."
+#~ msgstr ""
+#~ "Das Attribut das des Enddatum für die Aufgabe festlegt (Optional, wenn "
+#~ "kein Enddatums-Attribut angegeben wird, bestimmt das Anfangsdatums-"
+#~ "Attribut auch das Enddatum)."
+
+#~ msgid "Days before"
+#~ msgstr "Tage davor"
+
+#~ msgid "Additional days before the start date."
+#~ msgstr "Zusätzliche Tage vor dem Anfangsdatum."
+
+#~ msgid "Days after"
+#~ msgstr "Tage danach"
+
+#~ msgid "Additional days after the end date."
+#~ msgstr "Zusätzliche Tage nach dem Enddatum."
+
+#~ msgid "Time frames"
+#~ msgstr "Zeiträume"
+
+#~ msgid "Create new task"
+#~ msgstr "Neue Aufgabe erstellen"
+
+#~ msgid "Update task"
+#~ msgstr "Aufgabe bearbeiten"
+
+#~ msgid "Update time frame"
+#~ msgstr "Zeitrahmen bearbeiten."
+
+#~ msgid "Delete task"
+#~ msgstr "Aufgabe entfernen"
+
+#~ msgid ""
+#~ "You are about to permanently delete the task {$ service.values."
+#~ "title $}."
+#~ msgstr ""
+#~ "Sie sind dabei die Aufgabe %(object)s
permanent zu entfernen."
+
+#~ msgid "The Uniform Resource Identifier of this view (auto-generated)."
+#~ msgstr ""
+#~ "Der Uniform Resource Identifier dieser Ansicht (automatisch erstellt)."
+
+#~ msgid "The prefix for the URI of this view."
+#~ msgstr "Das Präfix für die URI dieser Ansicht."
+
+#~ msgid "The internal identifier of this view."
+#~ msgstr "Der interne Bezeichner für diese Ansicht."
+
+#~ msgid "Additional internal information about this view."
+#~ msgstr "Zusätzliche interne Informationen über diese Ansicht."
+
+#~ msgid "Template"
+#~ msgstr "Vorlage"
+
+#~ msgid "The template for this view, written in Django template language."
+#~ msgstr ""
+#~ "Das Template für diese Ansicht, in der Django-Template-Language verfasst."
+
+#~ msgid "The English title for this view."
+#~ msgstr "Der englische Titel für diese Ansicht."
+
+#~ msgid "The German title for this view."
+#~ msgstr "Der deutsche Titel für diesen Ansicht."
+
+#~ msgid "The English help text for this view."
+#~ msgstr "Der englische Hilfetext für diese Ansicht."
+
+#~ msgid "The German help text for this view."
+#~ msgstr "Der deutsche Hilfetext für diese Ansicht."
+
+#~ msgid "Create new view"
+#~ msgstr "Neue Ansicht erstellen"
+
+#~ msgid "Update view"
+#~ msgstr "Ansicht bearbeiten"
+
+#~ msgid "Edit template"
+#~ msgstr "Template bearbeiten"
+
+#~ msgid "Delete view"
+#~ msgstr "Ansicht entfernen"
+
+#~ msgid "Help text"
+#~ msgstr "Hilfetext"
+
+#~ msgid ""
+#~ "You are about to permanently delete the view {$ service.values."
+#~ "title $}."
+#~ msgstr ""
+#~ "Sie sind dabei die Ansicht %(object)s
permanent zu entfernen."
+
+#~ msgid "Save and close"
+#~ msgstr "Sichern und schließen"
+
+#~ msgid "German"
+#~ msgstr "Deutsch"
+
+#~ msgid "English"
+#~ msgstr "Englisch"
+
+#, fuzzy
+#~| msgid "Optionsets "
+#~ msgid "Optionsets"
+#~ msgstr "Optionensets"
+
+#~ msgid "Optionset"
+#~ msgstr "Optionenset"
+
+#~ msgid "Tasks "
+#~ msgstr "Aufgaben"
+
+#~ msgid "Task "
+#~ msgstr "Aufgabe"
+
+#~ msgid "Views "
+#~ msgstr "Ansichten"
+
+#~ msgid "Domain "
+#~ msgstr "Domäne"
+
+#~ msgid "Condition "
+#~ msgstr "Bedingung"
+
+#~ msgid "Conditions "
+#~ msgstr "Bedingungen"
+
+#~ msgid ""
+#~ "You are about to permanently delete the attribute set %(object)s"
+#~ "code>."
+#~ msgstr ""
+#~ "Sie sind dabei die Entität %(object)s
permanent zu entfernen."
+
+#~ msgid ""
+#~ "The internal identifier of this condition. The URI will be generated from "
+#~ "this key."
+#~ msgstr ""
+#~ "Der interne Identifikator für diese Bedingung. Die URI wird hieraus "
+#~ "generiert."
+
+#~ msgid "Prefix"
+#~ msgstr "Präfix"
+
+#~ msgid "Source Attribute"
+#~ msgstr "Quell-Attribut"
+
+#~ msgid "Target text"
+#~ msgstr "Ziel Text"
+
+#~ msgid "Target option"
+#~ msgstr "Ziel Option"
+
+#~ msgid ""
+#~ "The internal identifier of this attribute/entity. The URI will be "
+#~ "generated from this key."
+#~ msgstr ""
+#~ "Der interne Identifikator für dieses Attribute/diese Entität. Die URI "
+#~ "wird hieraus generiert."
+
+#~ msgid "Type"
+#~ msgstr "Typ"
+
+#~ msgid ""
+#~ "You are about to permanently delete the attribute {$ service.values."
+#~ "title $}
."
+#~ msgstr ""
+#~ "Sie sind dabei das Attribut {$ service.values.title $}
"
+#~ "permanent zu entfernen."
+
+#~ msgid ""
+#~ "You are about to permanently delete the attribute set {$ service."
+#~ "values.title $}
."
+#~ msgstr ""
+#~ "Sie sind dabei die Entität {$ service.values.title $}
"
+#~ "permanent zu entfernen."
+
+#~ msgid "Parent Entity"
+#~ msgstr "Übergeordnete Entität"
+
+#~ msgid "is a Collection"
+#~ msgstr "ist eine Sammlung"
+
+#~ msgid "English name"
+#~ msgstr "Englischer Name"
+
+#~ msgid "English name (plural)"
+#~ msgstr "Englischer Name (Plural)"
+
+#~ msgid "German name"
+#~ msgstr "Deutscher Name"
+
+#~ msgid "German name (plural)"
+#~ msgstr "Deutscher Name (Plural)"
+
+#~ msgid ""
+#~ "The internal identifier of this option set. The URI will be generated "
+#~ "from this key."
+#~ msgstr ""
+#~ "Der interne Identifikator für dieses Optionenset. Die URI wird hieraus "
+#~ "generiert."
+
+#~ msgid "Options "
+#~ msgstr "Optionen"
+
+#~ msgid "Title (English)"
+#~ msgstr "Titel (Englisch)"
+
+#~ msgid "Title (German)"
+#~ msgstr "Titel (Deutsch)"
+
+#~ msgid ""
+#~ "The internal identifier of this catalog. The URI will be generated from "
+#~ "this key."
+#~ msgstr ""
+#~ "Der interne Identifikator für diesen Katalog. Die URI wird hieraus "
+#~ "generiert."
+
+#~ msgid ""
+#~ "The internal identifier of this section. The URI will be generated from "
+#~ "this key."
+#~ msgstr ""
+#~ "Der interne Identifikator für diesen Abschnitt. Die URI wird hieraus "
+#~ "generiert."
+
+#~ msgid ""
+#~ "The internal identifier of this subsection. The URI will be generated "
+#~ "from this key."
+#~ msgstr ""
+#~ "Der interne Identifikator für diesen Unterabschnitt. Die URI wird hieraus "
+#~ "generiert."
+
+#~ msgid "The position of this subsection in lists."
+#~ msgstr "Die Position von diesem Unterabschnitt in Listen."
+
+#~ msgid ""
+#~ "The internal identifier of this question/questionset. The URI will be "
+#~ "generated from this key."
+#~ msgstr ""
+#~ "Der interne Identifikator für diese Frage/dieses Fragenset. Die URI wird "
+#~ "hieraus generiert."
+
+#~ msgid ""
+#~ "You are about to permanently delete the catalog {$ service."
+#~ "catalog.title $}."
+#~ msgstr ""
+#~ "Sie sind dabei den Katalog %(object)s
permanent zu entfernen."
+
+#~ msgid ""
+#~ "You are about to permanently delete the question {$ service."
+#~ "values.text $}."
+#~ msgstr ""
+#~ "Sie sind dabei die Frage %(object)s
permanent zu entfernen."
+
+#~ msgid ""
+#~ "You are about to permanently delete the question set {$ service."
+#~ "values.title $}."
+#~ msgstr ""
+#~ "Sie sind dabei das Fragenset %(object)s
permanent zu "
+#~ "entfernen."
+
+#~ msgid ""
+#~ "You are about to permanently delete the section {$ service.values."
+#~ "title $}."
+#~ msgstr ""
+#~ "Sie sind dabei den Abschnitt %(object)s
permanent zu "
+#~ "entfernen."
+
+#~ msgid ""
+#~ "You are about to permanently delete the subsection {$ service."
+#~ "values.title $}."
+#~ msgstr ""
+#~ "Sie sind dabei den Unterabschnitt %(object)s
permanent zu "
+#~ "entfernen."
+
+#~ msgid "Question text (English)"
+#~ msgstr "Fragentext (Englisch)"
+
+#~ msgid "Question text (German)"
+#~ msgstr "Fragentext (Deutsch)"
+
+#~ msgid "Help text (English)"
+#~ msgstr "Hilfetext (Englisch)"
+
+#~ msgid "Description text (English)"
+#~ msgstr "Beschreibungstext (Englisch)"
+
+#~ msgid "Description text (German)"
+#~ msgstr "Beschreibungstext (Deutsch)"
+
+#~ msgid "Additional days before"
+#~ msgstr "Zusätzliche Tage vorher"
+
+#~ msgid "Additional days after"
+#~ msgstr "Zusätzliche Tage danach"
+
+#~ msgid ""
+#~ "The internal identifier of this view. The URI will be generated from this "
+#~ "key."
+#~ msgstr ""
+#~ "Der interne Identifikator für diese Ansicht. Die URI wird hieraus "
+#~ "generiert."
+
+#~ msgid "Days before start date."
+#~ msgstr "Tage vor dem Start-Datum"
+
+#~ msgid "Profile update not possible"
+#~ msgstr "Profil bearbeiten nicht möglich"
+
+#~ msgid "Deadline"
+#~ msgstr "Termin"
+
+#~ msgid "The attribute this task is refering to."
+#~ msgstr "Das Attribut auf das diese Aufgabe verweist."
+
+#~ msgid "Time period"
+#~ msgstr "Zeitraum"
+
+#~ msgid "The the time period after this task becomes active."
+#~ msgstr "Die Zweitspanne nach der diese Aufgabe aktiv wird."
+
+#~ msgid ""
+#~ "RDMO is published on github.com."
+#~ msgstr ""
+#~ "RDMO ist auf github.com "
+#~ "veröffentlicht."
+
+#~ msgid "Email"
+#~ msgstr "E-Mail"
+
+#~ msgid "Save input"
+#~ msgstr "Eingabe speichern"
+
+#~ msgid "Delete attribute set"
+#~ msgstr "Attribut-Set entfernen"
diff --git a/apps/core/management/commands/__init__.py b/rdmo/core/management/__init__.py
similarity index 100%
rename from apps/core/management/commands/__init__.py
rename to rdmo/core/management/__init__.py
diff --git a/apps/core/templatetags/__init__.py b/rdmo/core/management/commands/__init__.py
similarity index 100%
rename from apps/core/templatetags/__init__.py
rename to rdmo/core/management/commands/__init__.py
diff --git a/apps/core/management/commands/coverage.py b/rdmo/core/management/commands/coverage.py
similarity index 100%
rename from apps/core/management/commands/coverage.py
rename to rdmo/core/management/commands/coverage.py
diff --git a/apps/core/management/commands/create-admin-user.py b/rdmo/core/management/commands/create-admin-user.py
similarity index 100%
rename from apps/core/management/commands/create-admin-user.py
rename to rdmo/core/management/commands/create-admin-user.py
diff --git a/apps/core/management/commands/create-groups.py b/rdmo/core/management/commands/create-groups.py
similarity index 92%
rename from apps/core/management/commands/create-groups.py
rename to rdmo/core/management/commands/create-groups.py
index f41ec6e06..5b2aa7b28 100644
--- a/apps/core/management/commands/create-groups.py
+++ b/rdmo/core/management/commands/create-groups.py
@@ -1,7 +1,7 @@
from django.core.management.base import BaseCommand
from django.contrib.auth.models import Group, Permission
-from apps.accounts.settings import GROUPS
+from rdmo.accounts.settings import GROUPS
class Command(BaseCommand):
diff --git a/apps/core/management/commands/deploy.py b/rdmo/core/management/commands/deploy.py
similarity index 82%
rename from apps/core/management/commands/deploy.py
rename to rdmo/core/management/commands/deploy.py
index eddcdd7ea..d8905f0c9 100644
--- a/apps/core/management/commands/deploy.py
+++ b/rdmo/core/management/commands/deploy.py
@@ -9,4 +9,4 @@ class Command(BaseCommand):
def handle(self, *args, **options):
call_command('collectstatic', '--noinput')
- subprocess.call(['touch', 'rdmo/wsgi.py'])
+ subprocess.call(['touch', 'config/wsgi.py'])
diff --git a/rdmo/core/management/commands/download_vendor_files.py b/rdmo/core/management/commands/download_vendor_files.py
new file mode 100644
index 000000000..a06f7c03a
--- /dev/null
+++ b/rdmo/core/management/commands/download_vendor_files.py
@@ -0,0 +1,48 @@
+import base64
+import hashlib
+import os
+
+import requests
+
+from django.conf import settings
+from django.core.management.base import BaseCommand
+
+
+class Command(BaseCommand):
+
+ def handle(self, *args, **options):
+
+ for key, vendor_conf in settings.VENDOR.items():
+ for file_type in ['js', 'css', 'img', 'font']:
+ if file_type in vendor_conf:
+ for file in vendor_conf[file_type]:
+ # get the directory and the file_name
+ path_tokens = ['vendor', key] + os.path.normpath(file['path']).split(os.path.sep)
+ directory = os.path.join(*path_tokens[:-1])
+ file_name = os.path.join(*path_tokens)
+
+ # create the needed diredtories
+ try:
+ os.makedirs(directory)
+ except OSError:
+ pass
+
+ # get the full url of the file
+ url = requests.compat.urljoin(vendor_conf['url'], file['path'])
+
+ print('%s -> %s' % (url, file_name))
+
+ # fetch the file from the cdn
+ response = requests.get(url)
+ response.raise_for_status()
+ with open(file_name, 'wb') as f:
+ f.write(response.content)
+
+ # check the intergrety of the file if a SRI was supplied
+ if 'sri' in file:
+ algorithm, file_hash = file['sri'].split('-')
+
+ h = hashlib.new(algorithm)
+ h.update(open(file_name, 'rb').read())
+ if base64.b64encode(h.digest()).decode() != file_hash:
+ raise Exception('Subresource Integrity (SRI) failed for %s' % file_name)
diff --git a/apps/core/management/commands/import.py b/rdmo/core/management/commands/import.py
similarity index 81%
rename from apps/core/management/commands/import.py
rename to rdmo/core/management/commands/import.py
index 53e327611..0a1c8a7ae 100644
--- a/apps/core/management/commands/import.py
+++ b/rdmo/core/management/commands/import.py
@@ -3,13 +3,13 @@
from django.contrib.auth.models import User
from django.core.management.base import BaseCommand, CommandError
-from apps.conditions.utils import import_conditions
-from apps.options.utils import import_options
-from apps.domain.utils import import_domain
-from apps.questions.utils import import_catalog
-from apps.tasks.utils import import_tasks
-from apps.views.utils import import_views
-from apps.projects.utils import import_projects
+from rdmo.conditions.utils import import_conditions
+from rdmo.options.utils import import_options
+from rdmo.domain.utils import import_domain
+from rdmo.questions.utils import import_catalog
+from rdmo.tasks.utils import import_tasks
+from rdmo.views.utils import import_views
+from rdmo.projects.utils import import_projects
class Command(BaseCommand):
diff --git a/apps/core/management/commands/poedit.py b/rdmo/core/management/commands/poedit.py
similarity index 100%
rename from apps/core/management/commands/poedit.py
rename to rdmo/core/management/commands/poedit.py
diff --git a/apps/core/management/commands/promote-user-to-superuser.py b/rdmo/core/management/commands/promote-user-to-superuser.py
similarity index 100%
rename from apps/core/management/commands/promote-user-to-superuser.py
rename to rdmo/core/management/commands/promote-user-to-superuser.py
diff --git a/apps/core/management/commands/set-uri-prefix.py b/rdmo/core/management/commands/set-uri-prefix.py
similarity index 84%
rename from apps/core/management/commands/set-uri-prefix.py
rename to rdmo/core/management/commands/set-uri-prefix.py
index 3a4e1690e..d95231381 100644
--- a/apps/core/management/commands/set-uri-prefix.py
+++ b/rdmo/core/management/commands/set-uri-prefix.py
@@ -3,12 +3,12 @@
from django.contrib.auth.models import User
from django.core.management.base import BaseCommand
-from apps.conditions.models import Condition
-from apps.options.models import OptionSet, Option
-from apps.domain.models import AttributeEntity
-from apps.questions.models import Catalog, Section, Subsection, QuestionEntity
-from apps.tasks.models import Task
-from apps.views.models import View
+from rdmo.conditions.models import Condition
+from rdmo.options.models import OptionSet, Option
+from rdmo.domain.models import AttributeEntity
+from rdmo.questions.models import Catalog, Section, Subsection, QuestionEntity
+from rdmo.tasks.models import Task
+from rdmo.views.models import View
class Command(BaseCommand):
diff --git a/apps/core/models.py b/rdmo/core/models.py
similarity index 95%
rename from apps/core/models.py
rename to rdmo/core/models.py
index 844d8e723..9b6bd612c 100644
--- a/apps/core/models.py
+++ b/rdmo/core/models.py
@@ -5,7 +5,7 @@
from django.utils.translation import ugettext_lazy as _
from django.utils.translation import get_language
-from apps.core.exceptions import RDMOException
+from rdmo.core.exceptions import RDMOException
class Model(models.Model):
diff --git a/apps/core/permissions.py b/rdmo/core/permissions.py
similarity index 100%
rename from apps/core/permissions.py
rename to rdmo/core/permissions.py
diff --git a/apps/core/renderers.py b/rdmo/core/renderers.py
similarity index 100%
rename from apps/core/renderers.py
rename to rdmo/core/renderers.py
diff --git a/apps/core/serializers.py b/rdmo/core/serializers.py
similarity index 100%
rename from apps/core/serializers.py
rename to rdmo/core/serializers.py
diff --git a/rdmo/settings/base.py b/rdmo/core/settings.py
similarity index 51%
rename from rdmo/settings/base.py
rename to rdmo/core/settings.py
index 778810ab2..f1314bf99 100644
--- a/rdmo/settings/base.py
+++ b/rdmo/core/settings.py
@@ -1,20 +1,5 @@
-import os
-from collections import OrderedDict
from django.utils.translation import ugettext_lazy as _
-SITE_ID = 1
-
-PROJECT_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
-BASE_DIR = os.path.dirname(PROJECT_DIR)
-
-SECRET_KEY = 'this is not a very secret key'
-
-DEBUG = False
-
-ALLOWED_HOSTS = ['localhost']
-
-INTERNAL_IPS = ('127.0.0.1',)
-
INSTALLED_APPS = [
# django modules
'django.contrib.admin',
@@ -25,22 +10,21 @@
'django.contrib.staticfiles',
'django.contrib.sites',
# rdmo modules
- 'apps.core',
- 'apps.accounts',
- 'apps.domain',
- 'apps.options',
- 'apps.conditions',
- 'apps.questions',
- 'apps.tasks',
- 'apps.views',
- 'apps.projects',
+ 'rdmo.core',
+ 'rdmo.accounts',
+ 'rdmo.domain',
+ 'rdmo.options',
+ 'rdmo.conditions',
+ 'rdmo.questions',
+ 'rdmo.tasks',
+ 'rdmo.views',
+ 'rdmo.projects',
# 3rd party modules
'rest_framework',
'rest_framework.authtoken',
'widget_tweaks',
'markdown',
'compressor',
- 'djangobower',
'django_extensions',
'mptt',
'rules'
@@ -59,7 +43,7 @@
'django.contrib.sites.middleware.CurrentSiteMiddleware'
]
-ROOT_URLCONF = 'rdmo.urls'
+ROOT_URLCONF = 'config.urls'
TEMPLATES = [
{
@@ -82,14 +66,7 @@
('text/x-scss', 'django_libsass.SassCompiler'),
)
-WSGI_APPLICATION = 'rdmo.wsgi.application'
-
-DATABASES = {
- 'default': {
- 'ENGINE': 'django.db.backends.sqlite3',
- 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
- }
-}
+WSGI_APPLICATION = 'config.wsgi.application'
AUTHENTICATION_BACKENDS = [
'rules.permissions.ObjectPermissionBackend',
@@ -103,8 +80,8 @@
SOCIALACCOUNT = False
SHIBBOLETH = False
-ACCOUNT_SIGNUP_FORM_CLASS = 'apps.accounts.forms.SignupForm'
-ACCOUNT_USER_DISPLAY = 'apps.accounts.utils.get_full_name'
+ACCOUNT_SIGNUP_FORM_CLASS = 'rdmo.accounts.forms.SignupForm'
+ACCOUNT_USER_DISPLAY = 'rdmo.accounts.utils.get_full_name'
ACCOUNT_EMAIL_REQUIRED = True
ACCOUNT_ACTIVATION_DAYS = 7
ACCOUNT_EMAIL_CONFIRMATION_EXPIRE_DAYS = 7
@@ -117,10 +94,6 @@
TIME_ZONE = 'Europe/Berlin'
-LOCALE_PATHS = (
- os.path.join(BASE_DIR, 'locale/'),
-)
-
LANGUAGES = (
('de', _('German')),
('en', _('English')),
@@ -137,35 +110,20 @@
LOGOUT_URL = '/account/logout/'
MEDIA_URL = '/media/'
-MEDIA_ROOT = os.path.join(BASE_DIR, 'media_root/')
-
STATIC_URL = '/static/'
-STATIC_ROOT = os.path.join(BASE_DIR, 'static_root/')
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
'compressor.finders.CompressorFinder',
- 'djangobower.finders.BowerFinder',
-)
-
-BOWER_COMPONENTS_ROOT = os.path.join(BASE_DIR, 'components_root/')
-
-BOWER_INSTALLED_APPS = (
- "angular#~1.5.8",
- "bootstrap#~3.3.7",
- "angular-resource#~1.5.8",
- "codemirror#~5.18.2",
- "components-font-awesome#~4.6.3",
- "bootstrap-datepicker#~1.6.4",
- "moment#~2.14.1"
-)
-
-FIXTURE_DIRS = (
- os.path.join(BASE_DIR, 'testing/fixtures/'),
)
-CACHE_TIMEOUT = 60
+DATABASES = {
+ 'default': {
+ 'ENGINE': 'django.db.backends.sqlite3',
+ 'NAME': 'db.sqlite3'
+ }
+}
CACHES = {
'default': {
@@ -184,7 +142,7 @@
}
REST_FRAMEWORK_EXTENSIONS = {
- 'DEFAULT_CACHE_RESPONSE_TIMEOUT': CACHE_TIMEOUT
+ 'DEFAULT_CACHE_RESPONSE_TIMEOUT': 60
}
SETTINGS_EXPORT = [
@@ -200,7 +158,7 @@
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
EMAIL_FROM = 'info@example.com'
-EXPORT_FORMATS = OrderedDict((
+EXPORT_FORMATS = (
('pdf', _('PDF')),
('rtf', _('Rich Text Format')),
('odt', _('Open Office')),
@@ -209,36 +167,116 @@
('markdown', _('Markdown')),
('mediawiki', _('mediawiki')),
('tex', _('LaTeX'))
-))
+)
DEFAULT_URI_PREFIX = 'http://example.com/terms'
-# try override with the local configuration
-try:
- from .local import *
-except ImportError:
- pass
-
-# add static and templates from local.THEME_DIR to STATICFILES_DIRS and TEMPLATES
-try:
- STATICFILES_DIRS = [
- os.path.join(THEME_DIR, 'static/')
- ]
- TEMPLATES[0]['DIRS'].append(os.path.join(THEME_DIR, 'templates/'))
-except NameError:
- pass
-
-# prepend the local.BASE_URL to the different URL settings
-try:
- LOGIN_URL = BASE_URL + LOGIN_URL
- LOGIN_REDIRECT_URL = BASE_URL + LOGIN_REDIRECT_URL
- LOGOUT_URL = BASE_URL + LOGOUT_URL
- ACCOUNT_LOGOUT_REDIRECT_URL = BASE_URL
- MEDIA_URL = BASE_URL + MEDIA_URL
- STATIC_URL = BASE_URL + STATIC_URL
-
- CSRF_COOKIE_PATH = BASE_URL + '/'
- LANGUAGE_COOKIE_PATH = BASE_URL + '/'
- SESSION_COOKIE_PATH = BASE_URL + '/'
-except NameError:
- pass
+VENDOR_CDN = True
+
+VENDOR = {
+ 'jquery': {
+ 'url': 'https://code.jquery.com/',
+ 'js': [
+ {
+ 'path': 'jquery-3.2.1.min.js',
+ 'sri': 'sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=',
+ }
+ ]
+ },
+ 'bootstrap': {
+ 'url': 'https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/',
+ 'js': [
+ {
+ 'path': 'js/bootstrap.min.js',
+ 'sri': 'sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa',
+ }
+ ],
+ 'css': [
+ {
+ 'path': 'css/bootstrap.min.css',
+ 'sri': 'sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u',
+ }
+ ]
+ },
+ 'bootstrap-datepicker': {
+ 'url': 'https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.7.1/',
+ 'css': [
+ {
+ 'path': 'css/bootstrap-datepicker.min.css'
+ }
+ ],
+ 'js': [
+ {
+ 'path': 'js/bootstrap-datepicker.min.js'
+ }
+ ]
+ },
+ 'font-awesome': {
+ 'url': 'https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/',
+ 'css': [
+ {
+ 'path': 'css/font-awesome.min.css'
+ }
+ ],
+ 'font': [
+ {
+ 'path': 'fonts/fontawesome-webfont.eot'
+ },
+ {
+ 'path': 'fonts/fontawesome-webfont.woff2'
+ },
+ {
+ 'path': 'fonts/fontawesome-webfont.woff'
+ },
+ {
+ 'path': 'fonts/fontawesome-webfont.ttf'
+ },
+ {
+ 'path': 'fonts/fontawesome-webfont.svg'
+ }
+ ]
+ },
+ 'angular': {
+ 'url': 'https://ajax.googleapis.com/ajax/libs/angularjs/1.5.8/',
+ 'js': [
+ {
+ 'path': 'angular.min.js'
+ },
+ {
+ 'path': 'angular-resource.min.js'
+ }
+ ]
+ },
+ 'moment': {
+ 'url': 'https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/',
+ 'js': [
+ {
+ 'path': 'moment.min.js',
+ 'sri': 'sha256-1hjUhpc44NwiNg8OwMu2QzJXhD8kcj+sJA3aCQZoUjg='
+ }
+ ]
+ },
+ 'codemirror': {
+ 'url': 'https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.29.0/',
+ 'js': [
+ {
+ 'path': 'codemirror.min.js',
+ 'sri': 'sha256-0LRLvWWVXwt0eH0/Bzd0PHICg/bSMDIe5sXgaDSpZaA='
+ },
+ {
+ 'path': 'addon/mode/overlay.min.js',
+ 'sri': 'sha256-ffWkw3Pn4ieMygm1vwdRKcMtBJ6E6kuBi8GlVVPXWEs='
+ },
+ {
+ 'path': 'mode/django/django.min.js',
+ 'sri': 'sha256-6hO1TjC+3W73p+kXnCqcHVjfRa4KMdG7hvWencnu0XM='
+ }
+ ],
+ 'css': [
+ {
+ 'path': 'codemirror.min.css',
+ 'sri': 'sha256-wluO/w4cnorJpS0JmcdTSYzwdb5E6u045qa4Ervfb1k='
+ }
+ ]
+ }
+}
diff --git a/apps/core/static/core/css/base.scss b/rdmo/core/static/core/css/base.scss
similarity index 100%
rename from apps/core/static/core/css/base.scss
rename to rdmo/core/static/core/css/base.scss
diff --git a/apps/core/static/core/css/codemirror.scss b/rdmo/core/static/core/css/codemirror.scss
similarity index 100%
rename from apps/core/static/core/css/codemirror.scss
rename to rdmo/core/static/core/css/codemirror.scss
diff --git a/apps/core/static/core/css/fonts.scss b/rdmo/core/static/core/css/fonts.scss
similarity index 100%
rename from apps/core/static/core/css/fonts.scss
rename to rdmo/core/static/core/css/fonts.scss
diff --git a/apps/core/static/core/css/footer.scss b/rdmo/core/static/core/css/footer.scss
similarity index 100%
rename from apps/core/static/core/css/footer.scss
rename to rdmo/core/static/core/css/footer.scss
diff --git a/apps/core/static/core/css/header.scss b/rdmo/core/static/core/css/header.scss
similarity index 100%
rename from apps/core/static/core/css/header.scss
rename to rdmo/core/static/core/css/header.scss
diff --git a/apps/core/static/core/css/style.scss b/rdmo/core/static/core/css/style.scss
similarity index 100%
rename from apps/core/static/core/css/style.scss
rename to rdmo/core/static/core/css/style.scss
diff --git a/apps/core/static/core/css/variables.scss b/rdmo/core/static/core/css/variables.scss
similarity index 100%
rename from apps/core/static/core/css/variables.scss
rename to rdmo/core/static/core/css/variables.scss
diff --git a/apps/core/static/core/fonts/DroidSans-Bold.ttf b/rdmo/core/static/core/fonts/DroidSans-Bold.ttf
similarity index 100%
rename from apps/core/static/core/fonts/DroidSans-Bold.ttf
rename to rdmo/core/static/core/fonts/DroidSans-Bold.ttf
diff --git a/apps/core/static/core/fonts/DroidSans.ttf b/rdmo/core/static/core/fonts/DroidSans.ttf
similarity index 100%
rename from apps/core/static/core/fonts/DroidSans.ttf
rename to rdmo/core/static/core/fonts/DroidSans.ttf
diff --git a/apps/core/static/core/fonts/DroidSansMono.ttf b/rdmo/core/static/core/fonts/DroidSansMono.ttf
similarity index 100%
rename from apps/core/static/core/fonts/DroidSansMono.ttf
rename to rdmo/core/static/core/fonts/DroidSansMono.ttf
diff --git a/apps/core/static/core/fonts/DroidSerif-Bold.ttf b/rdmo/core/static/core/fonts/DroidSerif-Bold.ttf
similarity index 100%
rename from apps/core/static/core/fonts/DroidSerif-Bold.ttf
rename to rdmo/core/static/core/fonts/DroidSerif-Bold.ttf
diff --git a/apps/core/static/core/fonts/DroidSerif-BoldItalic.ttf b/rdmo/core/static/core/fonts/DroidSerif-BoldItalic.ttf
similarity index 100%
rename from apps/core/static/core/fonts/DroidSerif-BoldItalic.ttf
rename to rdmo/core/static/core/fonts/DroidSerif-BoldItalic.ttf
diff --git a/apps/core/static/core/fonts/DroidSerif-Italic.ttf b/rdmo/core/static/core/fonts/DroidSerif-Italic.ttf
similarity index 100%
rename from apps/core/static/core/fonts/DroidSerif-Italic.ttf
rename to rdmo/core/static/core/fonts/DroidSerif-Italic.ttf
diff --git a/apps/core/static/core/fonts/DroidSerif.ttf b/rdmo/core/static/core/fonts/DroidSerif.ttf
similarity index 100%
rename from apps/core/static/core/fonts/DroidSerif.ttf
rename to rdmo/core/static/core/fonts/DroidSerif.ttf
diff --git a/apps/core/static/core/html/formgroup_checkbox.html b/rdmo/core/static/core/html/formgroup_checkbox.html
similarity index 100%
rename from apps/core/static/core/html/formgroup_checkbox.html
rename to rdmo/core/static/core/html/formgroup_checkbox.html
diff --git a/apps/core/static/core/html/formgroup_codemirror.html b/rdmo/core/static/core/html/formgroup_codemirror.html
similarity index 100%
rename from apps/core/static/core/html/formgroup_codemirror.html
rename to rdmo/core/static/core/html/formgroup_codemirror.html
diff --git a/apps/core/static/core/html/formgroup_number.html b/rdmo/core/static/core/html/formgroup_number.html
similarity index 100%
rename from apps/core/static/core/html/formgroup_number.html
rename to rdmo/core/static/core/html/formgroup_number.html
diff --git a/apps/core/static/core/html/formgroup_select.html b/rdmo/core/static/core/html/formgroup_select.html
similarity index 100%
rename from apps/core/static/core/html/formgroup_select.html
rename to rdmo/core/static/core/html/formgroup_select.html
diff --git a/apps/core/static/core/html/formgroup_selectmultiple.html b/rdmo/core/static/core/html/formgroup_selectmultiple.html
similarity index 100%
rename from apps/core/static/core/html/formgroup_selectmultiple.html
rename to rdmo/core/static/core/html/formgroup_selectmultiple.html
diff --git a/apps/core/static/core/html/formgroup_selectnumber.html b/rdmo/core/static/core/html/formgroup_selectnumber.html
similarity index 100%
rename from apps/core/static/core/html/formgroup_selectnumber.html
rename to rdmo/core/static/core/html/formgroup_selectnumber.html
diff --git a/apps/core/static/core/html/formgroup_text.html b/rdmo/core/static/core/html/formgroup_text.html
similarity index 100%
rename from apps/core/static/core/html/formgroup_text.html
rename to rdmo/core/static/core/html/formgroup_text.html
diff --git a/apps/core/static/core/html/formgroup_textarea.html b/rdmo/core/static/core/html/formgroup_textarea.html
similarity index 100%
rename from apps/core/static/core/html/formgroup_textarea.html
rename to rdmo/core/static/core/html/formgroup_textarea.html
diff --git a/apps/core/static/core/img/favicon.png b/rdmo/core/static/core/img/favicon.png
similarity index 100%
rename from apps/core/static/core/img/favicon.png
rename to rdmo/core/static/core/img/favicon.png
diff --git a/apps/core/static/core/img/header/collection.jpg b/rdmo/core/static/core/img/header/collection.jpg
similarity index 100%
rename from apps/core/static/core/img/header/collection.jpg
rename to rdmo/core/static/core/img/header/collection.jpg
diff --git a/apps/core/static/core/img/header/library.jpg b/rdmo/core/static/core/img/header/library.jpg
similarity index 100%
rename from apps/core/static/core/img/header/library.jpg
rename to rdmo/core/static/core/img/header/library.jpg
diff --git a/apps/core/static/core/img/header/supercomputer.jpg b/rdmo/core/static/core/img/header/supercomputer.jpg
similarity index 100%
rename from apps/core/static/core/img/header/supercomputer.jpg
rename to rdmo/core/static/core/img/header/supercomputer.jpg
diff --git a/apps/core/static/core/js/core.js b/rdmo/core/static/core/js/core.js
similarity index 100%
rename from apps/core/static/core/js/core.js
rename to rdmo/core/static/core/js/core.js
diff --git a/apps/core/static/core/js/header.js b/rdmo/core/static/core/js/header.js
similarity index 100%
rename from apps/core/static/core/js/header.js
rename to rdmo/core/static/core/js/header.js
diff --git a/apps/core/templates/core/404.html b/rdmo/core/templates/core/404.html
similarity index 100%
rename from apps/core/templates/core/404.html
rename to rdmo/core/templates/core/404.html
diff --git a/apps/core/templates/core/base.html b/rdmo/core/templates/core/base.html
similarity index 100%
rename from apps/core/templates/core/base.html
rename to rdmo/core/templates/core/base.html
diff --git a/apps/core/templates/core/base_analytics.html b/rdmo/core/templates/core/base_analytics.html
similarity index 100%
rename from apps/core/templates/core/base_analytics.html
rename to rdmo/core/templates/core/base_analytics.html
diff --git a/apps/core/templates/core/base_footer.html b/rdmo/core/templates/core/base_footer.html
similarity index 100%
rename from apps/core/templates/core/base_footer.html
rename to rdmo/core/templates/core/base_footer.html
diff --git a/apps/core/templates/core/base_head.html b/rdmo/core/templates/core/base_head.html
similarity index 72%
rename from apps/core/templates/core/base_head.html
rename to rdmo/core/templates/core/base_head.html
index 5946fc7bc..eaa524a22 100644
--- a/apps/core/templates/core/base_head.html
+++ b/rdmo/core/templates/core/base_head.html
@@ -15,8 +15,9 @@
-
-
+ {% vendor 'jquery' %}
+ {% vendor 'bootstrap' %}
+ {% vendor 'font-awesome' %}
{% compress css %}
@@ -24,6 +25,3 @@
{% endcompress %}
-
-
-
diff --git a/apps/core/templates/core/base_navigation.html b/rdmo/core/templates/core/base_navigation.html
similarity index 100%
rename from apps/core/templates/core/base_navigation.html
rename to rdmo/core/templates/core/base_navigation.html
diff --git a/apps/core/templates/core/base_navigation_account.html b/rdmo/core/templates/core/base_navigation_account.html
similarity index 100%
rename from apps/core/templates/core/base_navigation_account.html
rename to rdmo/core/templates/core/base_navigation_account.html
diff --git a/apps/core/templates/core/base_navigation_socialaccount.html b/rdmo/core/templates/core/base_navigation_socialaccount.html
similarity index 100%
rename from apps/core/templates/core/base_navigation_socialaccount.html
rename to rdmo/core/templates/core/base_navigation_socialaccount.html
diff --git a/apps/core/templates/core/bootstrap_delete_form.html b/rdmo/core/templates/core/bootstrap_delete_form.html
similarity index 100%
rename from apps/core/templates/core/bootstrap_delete_form.html
rename to rdmo/core/templates/core/bootstrap_delete_form.html
diff --git a/apps/core/templates/core/bootstrap_form.html b/rdmo/core/templates/core/bootstrap_form.html
similarity index 100%
rename from apps/core/templates/core/bootstrap_form.html
rename to rdmo/core/templates/core/bootstrap_form.html
diff --git a/apps/core/templates/core/bootstrap_form_fields.html b/rdmo/core/templates/core/bootstrap_form_fields.html
similarity index 100%
rename from apps/core/templates/core/bootstrap_form_fields.html
rename to rdmo/core/templates/core/bootstrap_form_fields.html
diff --git a/apps/core/templates/core/export.html b/rdmo/core/templates/core/export.html
similarity index 100%
rename from apps/core/templates/core/export.html
rename to rdmo/core/templates/core/export.html
diff --git a/apps/core/templates/core/home.html b/rdmo/core/templates/core/home.html
similarity index 100%
rename from apps/core/templates/core/home.html
rename to rdmo/core/templates/core/home.html
diff --git a/apps/core/templates/core/home_text_de.html b/rdmo/core/templates/core/home_text_de.html
similarity index 100%
rename from apps/core/templates/core/home_text_de.html
rename to rdmo/core/templates/core/home_text_de.html
diff --git a/apps/core/templates/core/home_text_en.html b/rdmo/core/templates/core/home_text_en.html
similarity index 100%
rename from apps/core/templates/core/home_text_en.html
rename to rdmo/core/templates/core/home_text_en.html
diff --git a/apps/core/templates/core/page.html b/rdmo/core/templates/core/page.html
similarity index 100%
rename from apps/core/templates/core/page.html
rename to rdmo/core/templates/core/page.html
diff --git a/apps/core/testing/__init__.py b/rdmo/core/templatetags/__init__.py
similarity index 100%
rename from apps/core/testing/__init__.py
rename to rdmo/core/templatetags/__init__.py
diff --git a/apps/core/templatetags/core_tags.py b/rdmo/core/templatetags/core_tags.py
similarity index 59%
rename from apps/core/templatetags/core_tags.py
rename to rdmo/core/templatetags/core_tags.py
index 411bb5451..1edd37c34 100644
--- a/apps/core/templatetags/core_tags.py
+++ b/rdmo/core/templatetags/core_tags.py
@@ -25,6 +25,51 @@ def i18n_switcher():
return mark_safe(string)
+@register.simple_tag()
+@stringfilter
+def vendor(vendor_key):
+ vendor_config = settings.VENDOR[vendor_key]
+
+ tags = []
+
+ if 'js' in vendor_config:
+ for file in vendor_config['js']:
+ if settings.VENDOR_CDN:
+ tag = '' % {
+ 'url': vendor_config['url'],
+ 'path': file['path'],
+ 'sri': file['sri'] if 'sri' in file else ''
+ }
+ else:
+ tag = '' % {
+ 'static_url': settings.STATIC_URL.rstrip('/'),
+ 'vendor_key': vendor_key,
+ 'path': file['path']
+ }
+
+ tags.append(tag)
+
+
+ if 'css' in vendor_config:
+ for file in vendor_config['css']:
+ if settings.VENDOR_CDN:
+ tag = '' % {
+ 'url': vendor_config['url'],
+ 'path': file['path'],
+ 'sri': file['sri'] if 'sri' in file else ''
+ }
+ else:
+ tag = '' % {
+ 'static_url': settings.STATIC_URL.rstrip('/'),
+ 'vendor_key': vendor_key,
+ 'path': file['path']
+ }
+
+ tags.append(tag)
+
+ return mark_safe(''.join(tags))
+
+
@register.simple_tag(takes_context=True)
def bootstrap_form(context, **kwargs):
form_context = {}
diff --git a/apps/domain/migrations/__init__.py b/rdmo/core/testing/__init__.py
similarity index 100%
rename from apps/domain/migrations/__init__.py
rename to rdmo/core/testing/__init__.py
diff --git a/apps/core/testing/mixins.py b/rdmo/core/testing/mixins.py
similarity index 100%
rename from apps/core/testing/mixins.py
rename to rdmo/core/testing/mixins.py
diff --git a/apps/options/migrations/__init__.py b/rdmo/core/tests/__init__.py
similarity index 100%
rename from apps/options/migrations/__init__.py
rename to rdmo/core/tests/__init__.py
diff --git a/rdmo/core/tests/test_tags.py b/rdmo/core/tests/test_tags.py
new file mode 100644
index 000000000..889416d4c
--- /dev/null
+++ b/rdmo/core/tests/test_tags.py
@@ -0,0 +1,31 @@
+from django.test import TestCase
+from django.conf import settings
+
+from django.template import RequestContext, Template
+from django.test.client import RequestFactory
+from django.utils import translation
+
+
+class CoreTagsTests(TestCase):
+
+ def setUp(self):
+ self.request = RequestFactory().get('/')
+ super(CoreTagsTests, self).setUp()
+
+ def test_i18n_switcher(self):
+ """ The language switcher is rendered correctly. """
+
+ # create a fake template with a name
+ template = "{% load core_tags %}{% i18n_switcher %}"
+
+ # set a language
+ translation.activate(settings.LANGUAGES[0][0])
+
+ # render the link
+ context = RequestContext(self.request, {})
+ rendered_template = Template(template).render(context)
+ for language in settings.LANGUAGES:
+ if language == settings.LANGUAGES[0]:
+ self.assertIn('%s' % language, rendered_template)
+ else:
+ self.assertIn('%s' % language, rendered_template)
diff --git a/apps/core/tests.py b/rdmo/core/tests/test_views.py
similarity index 61%
rename from apps/core/tests.py
rename to rdmo/core/tests/test_views.py
index 2fde6eccc..f1c87fe2a 100644
--- a/apps/core/tests.py
+++ b/rdmo/core/tests/test_views.py
@@ -1,14 +1,11 @@
from django.test import TestCase
-from django.conf import settings
from django.core.urlresolvers import reverse
-from django.template import RequestContext, Template
-from django.test.client import RequestFactory
from django.utils import translation
-from apps.accounts.utils import set_group_permissions
+from rdmo.accounts.utils import set_group_permissions
-class CoreTestCase(TestCase):
+class CoreViewTests(TestCase):
fixtures = (
'users.json',
@@ -20,9 +17,6 @@ def setUp(self):
translation.activate('en')
set_group_permissions()
-
-class CoreTests(CoreTestCase):
-
def test_home_view(self):
""" The home page can be accessed. """
@@ -63,28 +57,3 @@ def test_i18n_switcher(self):
response = self.client.get(url)
self.assertEqual(302, response.status_code)
self.assertIn('en', response['Content-Language'])
-
-
-class CoreTagsTests(TestCase):
-
- def setUp(self):
- self.request = RequestFactory().get('/')
- super(CoreTagsTests, self).setUp()
-
- def test_i18n_switcher(self):
- """ The language switcher is rendered correctly. """
-
- # create a fake template with a name
- template = "{% load core_tags %}{% i18n_switcher %}"
-
- # set a language
- translation.activate(settings.LANGUAGES[0][0])
-
- # render the link
- context = RequestContext(self.request, {})
- rendered_template = Template(template).render(context)
- for language in settings.LANGUAGES:
- if language == settings.LANGUAGES[0]:
- self.assertIn('%s' % language, rendered_template)
- else:
- self.assertIn('%s' % language, rendered_template)
diff --git a/apps/core/utils.py b/rdmo/core/utils.py
similarity index 98%
rename from apps/core/utils.py
rename to rdmo/core/utils.py
index 74964badc..021a75718 100644
--- a/apps/core/utils.py
+++ b/rdmo/core/utils.py
@@ -62,7 +62,7 @@ def get_model_field_meta(model):
def render_to_format(request, format, title, template_src, context):
- if format in settings.EXPORT_FORMATS:
+ if format in dict(settings.EXPORT_FORMATS):
# render the template to a html string
template = get_template(template_src)
diff --git a/apps/core/validators.py b/rdmo/core/validators.py
similarity index 100%
rename from apps/core/validators.py
rename to rdmo/core/validators.py
diff --git a/apps/core/views.py b/rdmo/core/views.py
similarity index 100%
rename from apps/core/views.py
rename to rdmo/core/views.py
diff --git a/rdmo/domain/__init__.py b/rdmo/domain/__init__.py
new file mode 100644
index 000000000..7f512f20f
--- /dev/null
+++ b/rdmo/domain/__init__.py
@@ -0,0 +1 @@
+default_app_config = 'rdmo.domain.app_config.DomainConfig'
diff --git a/apps/domain/admin.py b/rdmo/domain/admin.py
similarity index 100%
rename from apps/domain/admin.py
rename to rdmo/domain/admin.py
diff --git a/apps/domain/app_config.py b/rdmo/domain/app_config.py
similarity index 86%
rename from apps/domain/app_config.py
rename to rdmo/domain/app_config.py
index 717a40b9b..5143c2f8d 100644
--- a/apps/domain/app_config.py
+++ b/rdmo/domain/app_config.py
@@ -3,5 +3,5 @@
class DomainConfig(AppConfig):
- name = 'apps.domain'
+ name = 'rdmo.domain'
verbose_name = _('Domain')
diff --git a/apps/domain/migrations/0001_initial_after_reset.py b/rdmo/domain/migrations/0001_initial_after_reset.py
similarity index 97%
rename from apps/domain/migrations/0001_initial_after_reset.py
rename to rdmo/domain/migrations/0001_initial_after_reset.py
index 4c1139a42..029b059b2 100644
--- a/apps/domain/migrations/0001_initial_after_reset.py
+++ b/rdmo/domain/migrations/0001_initial_after_reset.py
@@ -3,8 +3,8 @@
from django.db import models, migrations
import django.db.models.deletion
-import apps.core.models
+import rdmo.core.models
class Migration(migrations.Migration):
@@ -53,7 +53,7 @@ class Migration(migrations.Migration):
'verbose_name': 'Option',
'verbose_name_plural': 'Options',
},
- bases=(models.Model, apps.core.models.TranslationMixin),
+ bases=(models.Model, rdmo.core.models.TranslationMixin),
),
migrations.CreateModel(
name='Range',
@@ -68,7 +68,7 @@ class Migration(migrations.Migration):
'verbose_name': 'Range',
'verbose_name_plural': 'Ranges',
},
- bases=(models.Model, apps.core.models.TranslationMixin),
+ bases=(models.Model, rdmo.core.models.TranslationMixin),
),
migrations.CreateModel(
name='Attribute',
diff --git a/apps/domain/migrations/0002_additional_input.py b/rdmo/domain/migrations/0002_additional_input.py
similarity index 100%
rename from apps/domain/migrations/0002_additional_input.py
rename to rdmo/domain/migrations/0002_additional_input.py
diff --git a/apps/domain/migrations/0003_condition.py b/rdmo/domain/migrations/0003_condition.py
similarity index 100%
rename from apps/domain/migrations/0003_condition.py
rename to rdmo/domain/migrations/0003_condition.py
diff --git a/apps/domain/migrations/0004_verbosename.py b/rdmo/domain/migrations/0004_verbosename.py
similarity index 91%
rename from apps/domain/migrations/0004_verbosename.py
rename to rdmo/domain/migrations/0004_verbosename.py
index e8dbf6bc3..52677ba66 100644
--- a/apps/domain/migrations/0004_verbosename.py
+++ b/rdmo/domain/migrations/0004_verbosename.py
@@ -2,7 +2,7 @@
from __future__ import unicode_literals
from django.db import models, migrations
-import apps.core.models
+import rdmo.core.models
class Migration(migrations.Migration):
@@ -26,6 +26,6 @@ class Migration(migrations.Migration):
'verbose_name': 'VerboseName',
'verbose_name_plural': 'VerboseNames',
},
- bases=(models.Model, apps.core.models.TranslationMixin),
+ bases=(models.Model, rdmo.core.models.TranslationMixin),
),
]
diff --git a/apps/domain/migrations/0005_meta.py b/rdmo/domain/migrations/0005_meta.py
similarity index 100%
rename from apps/domain/migrations/0005_meta.py
rename to rdmo/domain/migrations/0005_meta.py
diff --git a/apps/domain/migrations/0006_attributeentity_parent_collection.py b/rdmo/domain/migrations/0006_attributeentity_parent_collection.py
similarity index 100%
rename from apps/domain/migrations/0006_attributeentity_parent_collection.py
rename to rdmo/domain/migrations/0006_attributeentity_parent_collection.py
diff --git a/apps/domain/migrations/0007_db_index.py b/rdmo/domain/migrations/0007_db_index.py
similarity index 100%
rename from apps/domain/migrations/0007_db_index.py
rename to rdmo/domain/migrations/0007_db_index.py
diff --git a/apps/domain/migrations/0008_meta.py b/rdmo/domain/migrations/0008_meta.py
similarity index 100%
rename from apps/domain/migrations/0008_meta.py
rename to rdmo/domain/migrations/0008_meta.py
diff --git a/apps/domain/migrations/0009_remove_condition.py b/rdmo/domain/migrations/0009_remove_condition.py
similarity index 100%
rename from apps/domain/migrations/0009_remove_condition.py
rename to rdmo/domain/migrations/0009_remove_condition.py
diff --git a/apps/domain/migrations/0010_many_to_many_for_conditions.py b/rdmo/domain/migrations/0010_many_to_many_for_conditions.py
similarity index 100%
rename from apps/domain/migrations/0010_many_to_many_for_conditions.py
rename to rdmo/domain/migrations/0010_many_to_many_for_conditions.py
diff --git a/apps/domain/migrations/0011_meta.py b/rdmo/domain/migrations/0011_meta.py
similarity index 100%
rename from apps/domain/migrations/0011_meta.py
rename to rdmo/domain/migrations/0011_meta.py
diff --git a/apps/domain/migrations/0012_renaming.py b/rdmo/domain/migrations/0012_renaming.py
similarity index 100%
rename from apps/domain/migrations/0012_renaming.py
rename to rdmo/domain/migrations/0012_renaming.py
diff --git a/apps/domain/migrations/0013_mptt.py b/rdmo/domain/migrations/0013_mptt.py
similarity index 100%
rename from apps/domain/migrations/0013_mptt.py
rename to rdmo/domain/migrations/0013_mptt.py
diff --git a/apps/domain/migrations/0014_is_attribute.py b/rdmo/domain/migrations/0014_is_attribute.py
similarity index 100%
rename from apps/domain/migrations/0014_is_attribute.py
rename to rdmo/domain/migrations/0014_is_attribute.py
diff --git a/apps/domain/migrations/0015_label.py b/rdmo/domain/migrations/0015_label.py
similarity index 100%
rename from apps/domain/migrations/0015_label.py
rename to rdmo/domain/migrations/0015_label.py
diff --git a/apps/domain/migrations/0016_label.py b/rdmo/domain/migrations/0016_label.py
similarity index 100%
rename from apps/domain/migrations/0016_label.py
rename to rdmo/domain/migrations/0016_label.py
diff --git a/apps/domain/migrations/0017_url_value_type.py b/rdmo/domain/migrations/0017_url_value_type.py
similarity index 100%
rename from apps/domain/migrations/0017_url_value_type.py
rename to rdmo/domain/migrations/0017_url_value_type.py
diff --git a/apps/domain/migrations/0018_validator.py b/rdmo/domain/migrations/0018_validator.py
similarity index 100%
rename from apps/domain/migrations/0018_validator.py
rename to rdmo/domain/migrations/0018_validator.py
diff --git a/apps/domain/migrations/0019_meta.py b/rdmo/domain/migrations/0019_meta.py
similarity index 100%
rename from apps/domain/migrations/0019_meta.py
rename to rdmo/domain/migrations/0019_meta.py
diff --git a/apps/domain/migrations/0020_meta.py b/rdmo/domain/migrations/0020_meta.py
similarity index 100%
rename from apps/domain/migrations/0020_meta.py
rename to rdmo/domain/migrations/0020_meta.py
diff --git a/apps/domain/migrations/0021_options.py b/rdmo/domain/migrations/0021_options.py
similarity index 100%
rename from apps/domain/migrations/0021_options.py
rename to rdmo/domain/migrations/0021_options.py
diff --git a/apps/domain/migrations/0022_options.py b/rdmo/domain/migrations/0022_options.py
similarity index 100%
rename from apps/domain/migrations/0022_options.py
rename to rdmo/domain/migrations/0022_options.py
diff --git a/apps/domain/migrations/0023_fix_label.py b/rdmo/domain/migrations/0023_fix_label.py
similarity index 100%
rename from apps/domain/migrations/0023_fix_label.py
rename to rdmo/domain/migrations/0023_fix_label.py
diff --git a/apps/domain/migrations/0024_meta.py b/rdmo/domain/migrations/0024_meta.py
similarity index 100%
rename from apps/domain/migrations/0024_meta.py
rename to rdmo/domain/migrations/0024_meta.py
diff --git a/apps/domain/migrations/0025_refactoring.py b/rdmo/domain/migrations/0025_refactoring.py
similarity index 100%
rename from apps/domain/migrations/0025_refactoring.py
rename to rdmo/domain/migrations/0025_refactoring.py
diff --git a/apps/domain/migrations/0026_refactoring.py b/rdmo/domain/migrations/0026_refactoring.py
similarity index 100%
rename from apps/domain/migrations/0026_refactoring.py
rename to rdmo/domain/migrations/0026_refactoring.py
diff --git a/apps/domain/migrations/0027_meta.py b/rdmo/domain/migrations/0027_meta.py
similarity index 100%
rename from apps/domain/migrations/0027_meta.py
rename to rdmo/domain/migrations/0027_meta.py
diff --git a/apps/domain/migrations/0028_path.py b/rdmo/domain/migrations/0028_path.py
similarity index 100%
rename from apps/domain/migrations/0028_path.py
rename to rdmo/domain/migrations/0028_path.py
diff --git a/apps/domain/migrations/0029_meta.py b/rdmo/domain/migrations/0029_meta.py
similarity index 100%
rename from apps/domain/migrations/0029_meta.py
rename to rdmo/domain/migrations/0029_meta.py
diff --git a/apps/domain/migrations/0030_permissions.py b/rdmo/domain/migrations/0030_permissions.py
similarity index 100%
rename from apps/domain/migrations/0030_permissions.py
rename to rdmo/domain/migrations/0030_permissions.py
diff --git a/apps/domain/migrations/0031_meta.py b/rdmo/domain/migrations/0031_meta.py
similarity index 100%
rename from apps/domain/migrations/0031_meta.py
rename to rdmo/domain/migrations/0031_meta.py
diff --git a/apps/projects/migrations/__init__.py b/rdmo/domain/migrations/__init__.py
similarity index 100%
rename from apps/projects/migrations/__init__.py
rename to rdmo/domain/migrations/__init__.py
diff --git a/apps/domain/models.py b/rdmo/domain/models.py
similarity index 98%
rename from apps/domain/models.py
rename to rdmo/domain/models.py
index f560497b5..15f2bfa06 100644
--- a/apps/domain/models.py
+++ b/rdmo/domain/models.py
@@ -6,9 +6,9 @@
from mptt.models import MPTTModel, TreeForeignKey
-from apps.core.utils import get_uri_prefix
-from apps.core.models import TranslationMixin
-from apps.conditions.models import Condition
+from rdmo.core.utils import get_uri_prefix
+from rdmo.core.models import TranslationMixin
+from rdmo.conditions.models import Condition
from .validators import AttributeEntityUniquePathValidator
diff --git a/apps/domain/renderers.py b/rdmo/domain/renderers.py
similarity index 98%
rename from apps/domain/renderers.py
rename to rdmo/domain/renderers.py
index a7d27c432..733575b8e 100644
--- a/apps/domain/renderers.py
+++ b/rdmo/domain/renderers.py
@@ -1,4 +1,4 @@
-from apps.core.renderers import BaseXMLRenderer
+from rdmo.core.renderers import BaseXMLRenderer
class XMLRenderer(BaseXMLRenderer):
diff --git a/apps/domain/serializers/__init__.py b/rdmo/domain/serializers/__init__.py
similarity index 97%
rename from apps/domain/serializers/__init__.py
rename to rdmo/domain/serializers/__init__.py
index 024dcab4b..8d885e15b 100644
--- a/apps/domain/serializers/__init__.py
+++ b/rdmo/domain/serializers/__init__.py
@@ -1,7 +1,7 @@
from rest_framework import serializers
-from apps.options.models import OptionSet
-from apps.conditions.models import Condition
+from rdmo.options.models import OptionSet
+from rdmo.conditions.models import Condition
from ..models import AttributeEntity, Attribute, Range, VerboseName
from ..validators import AttributeEntityUniquePathValidator
diff --git a/apps/domain/serializers/api.py b/rdmo/domain/serializers/api.py
similarity index 100%
rename from apps/domain/serializers/api.py
rename to rdmo/domain/serializers/api.py
diff --git a/apps/domain/serializers/export.py b/rdmo/domain/serializers/export.py
similarity index 100%
rename from apps/domain/serializers/export.py
rename to rdmo/domain/serializers/export.py
diff --git a/apps/domain/static/domain/css/domain.scss b/rdmo/domain/static/domain/css/domain.scss
similarity index 100%
rename from apps/domain/static/domain/css/domain.scss
rename to rdmo/domain/static/domain/css/domain.scss
diff --git a/apps/domain/static/domain/js/domain.js b/rdmo/domain/static/domain/js/domain.js
similarity index 100%
rename from apps/domain/static/domain/js/domain.js
rename to rdmo/domain/static/domain/js/domain.js
diff --git a/apps/domain/templates/domain/domain.html b/rdmo/domain/templates/domain/domain.html
similarity index 93%
rename from apps/domain/templates/domain/domain.html
rename to rdmo/domain/templates/domain/domain.html
index 3d7192cdf..50a147883 100644
--- a/apps/domain/templates/domain/domain.html
+++ b/rdmo/domain/templates/domain/domain.html
@@ -2,18 +2,21 @@
{% load staticfiles %}
{% load compress %}
{% load i18n %}
+{% load core_tags %}
{% block head %}
+ {% vendor 'angular' %}
+
{% compress css %}
{% endcompress %}
-
-
+ {% compress js %}
+ {% endcompress %}
{% endblock %}
{% block bodyattr %} ng-app="domain" ng-controller="DomainController" {% endblock %}
@@ -49,7 +52,7 @@ {% trans 'Options' %}
{% trans 'Export' %}
- {% for format, text in export_formats.items %}
+ {% for format, text in export_formats %}
-
{{ text }}
diff --git a/apps/domain/templates/domain/domain_export.html b/rdmo/domain/templates/domain/domain_export.html
similarity index 100%
rename from apps/domain/templates/domain/domain_export.html
rename to rdmo/domain/templates/domain/domain_export.html
diff --git a/apps/domain/templates/domain/domain_modal_delete_attributes.html b/rdmo/domain/templates/domain/domain_modal_delete_attributes.html
similarity index 100%
rename from apps/domain/templates/domain/domain_modal_delete_attributes.html
rename to rdmo/domain/templates/domain/domain_modal_delete_attributes.html
diff --git a/apps/domain/templates/domain/domain_modal_delete_entities.html b/rdmo/domain/templates/domain/domain_modal_delete_entities.html
similarity index 100%
rename from apps/domain/templates/domain/domain_modal_delete_entities.html
rename to rdmo/domain/templates/domain/domain_modal_delete_entities.html
diff --git a/apps/domain/templates/domain/domain_modal_form_attributes.html b/rdmo/domain/templates/domain/domain_modal_form_attributes.html
similarity index 100%
rename from apps/domain/templates/domain/domain_modal_form_attributes.html
rename to rdmo/domain/templates/domain/domain_modal_form_attributes.html
diff --git a/apps/domain/templates/domain/domain_modal_form_conditions.html b/rdmo/domain/templates/domain/domain_modal_form_conditions.html
similarity index 100%
rename from apps/domain/templates/domain/domain_modal_form_conditions.html
rename to rdmo/domain/templates/domain/domain_modal_form_conditions.html
diff --git a/apps/domain/templates/domain/domain_modal_form_entities.html b/rdmo/domain/templates/domain/domain_modal_form_entities.html
similarity index 100%
rename from apps/domain/templates/domain/domain_modal_form_entities.html
rename to rdmo/domain/templates/domain/domain_modal_form_entities.html
diff --git a/apps/domain/templates/domain/domain_modal_form_optionsets.html b/rdmo/domain/templates/domain/domain_modal_form_optionsets.html
similarity index 100%
rename from apps/domain/templates/domain/domain_modal_form_optionsets.html
rename to rdmo/domain/templates/domain/domain_modal_form_optionsets.html
diff --git a/apps/domain/templates/domain/domain_modal_form_ranges.html b/rdmo/domain/templates/domain/domain_modal_form_ranges.html
similarity index 100%
rename from apps/domain/templates/domain/domain_modal_form_ranges.html
rename to rdmo/domain/templates/domain/domain_modal_form_ranges.html
diff --git a/apps/domain/templates/domain/domain_modal_form_verbosenames.html b/rdmo/domain/templates/domain/domain_modal_form_verbosenames.html
similarity index 100%
rename from apps/domain/templates/domain/domain_modal_form_verbosenames.html
rename to rdmo/domain/templates/domain/domain_modal_form_verbosenames.html
diff --git a/apps/domain/templates/domain/domain_options.html b/rdmo/domain/templates/domain/domain_options.html
similarity index 100%
rename from apps/domain/templates/domain/domain_options.html
rename to rdmo/domain/templates/domain/domain_options.html
diff --git a/apps/questions/migrations/__init__.py b/rdmo/domain/tests/__init__.py
similarity index 100%
rename from apps/questions/migrations/__init__.py
rename to rdmo/domain/tests/__init__.py
diff --git a/rdmo/domain/tests/test_views.py b/rdmo/domain/tests/test_views.py
new file mode 100644
index 000000000..e35851b63
--- /dev/null
+++ b/rdmo/domain/tests/test_views.py
@@ -0,0 +1,60 @@
+from django.test import TestCase
+
+from test_generator.views import TestListViewMixin
+
+from rdmo.core.testing.mixins import TestExportViewMixin, TestImportViewMixin
+from rdmo.accounts.utils import set_group_permissions
+
+
+class DomainViewTestCase(TestCase):
+
+ fixtures = (
+ 'users.json',
+ 'groups.json',
+ 'accounts.json',
+ 'conditions.json',
+ 'domain.json',
+ 'options.json',
+ )
+
+ users = (
+ ('editor', 'editor'),
+ ('reviewer', 'reviewer'),
+ ('user', 'user'),
+ ('api', 'api'),
+ ('anonymous', None),
+ )
+
+ status_map = {
+ 'list_view': {
+ 'editor': 200, 'reviewer': 200, 'api': 200, 'user': 403, 'anonymous': 302
+ },
+ 'export_view': {
+ 'editor': 200, 'reviewer': 200, 'api': 200, 'user': 403, 'anonymous': 302
+ }
+ }
+
+ @classmethod
+ def setUpTestData(cls):
+ set_group_permissions()
+
+
+class DomainTests(TestListViewMixin, DomainViewTestCase):
+
+ url_names = {
+ 'list_view': 'domain'
+ }
+
+
+class DomainExportTests(TestExportViewMixin, DomainViewTestCase):
+
+ url_names = {
+ 'list_view': 'domain',
+ 'export_view': 'domain_export'
+ }
+ export_formats = ('xml', 'html', 'rtf', 'csv')
+
+
+class DomainImportTests(TestImportViewMixin, DomainViewTestCase):
+
+ import_file = 'testing/xml/domain.xml'
diff --git a/apps/domain/tests.py b/rdmo/domain/tests/test_viewsets.py
similarity index 53%
rename from apps/domain/tests.py
rename to rdmo/domain/tests/test_viewsets.py
index db2d59485..9501fa858 100644
--- a/apps/domain/tests.py
+++ b/rdmo/domain/tests/test_viewsets.py
@@ -1,24 +1,23 @@
from django.test import TestCase
-from test_generator.views import TestListViewMixin
from test_generator.viewsets import (
TestModelViewsetMixin,
+ TestReadOnlyModelViewsetMixin,
TestListViewsetMixin,
- TestRetrieveViewsetMixin,
+ TestDetailViewsetMixin,
TestUpdateViewsetMixin,
TestDeleteViewsetMixin
)
-from apps.core.testing.mixins import TestExportViewMixin, TestImportViewMixin
-from apps.accounts.utils import set_group_permissions
+from rdmo.accounts.utils import set_group_permissions
-from apps.conditions.models import Condition
-from apps.options.models import OptionSet
+from rdmo.conditions.models import Condition
+from rdmo.options.models import OptionSet
-from .models import AttributeEntity, Attribute, Range, VerboseName
+from ..models import AttributeEntity, Attribute, Range, VerboseName
-class DomainTestCase(TestCase):
+class DomainViewsetTestCase(TestCase):
fixtures = (
'users.json',
@@ -29,10 +28,6 @@ class DomainTestCase(TestCase):
'options.json',
)
- languages = (
- 'en',
- )
-
users = (
('editor', 'editor'),
('reviewer', 'reviewer'),
@@ -42,16 +37,10 @@ class DomainTestCase(TestCase):
)
status_map = {
- 'list_view': {
- 'editor': 200, 'reviewer': 200, 'api': 200, 'user': 403, 'anonymous': 302
- },
- 'export_view': {
- 'editor': 200, 'reviewer': 200, 'api': 200, 'user': 403, 'anonymous': 302
- },
'list_viewset': {
'editor': 200, 'reviewer': 200, 'api': 200, 'user': 403, 'anonymous': 403
},
- 'retrieve_viewset': {
+ 'detail_viewset': {
'editor': 200, 'reviewer': 200, 'api': 200, 'user': 403, 'anonymous': 403
},
'create_viewset': {
@@ -70,41 +59,46 @@ def setUpTestData(cls):
set_group_permissions()
-class DomainTests(TestListViewMixin, DomainTestCase):
-
- url_names = {
- 'list_view': 'domain'
- }
-
-
-class AttributeEntityTests(TestModelViewsetMixin, DomainTestCase):
+class AttributeEntityTests(TestModelViewsetMixin, DomainViewsetTestCase):
# get entities and order them by level to delete the entities at the bottom of the tree first
instances = AttributeEntity.objects.filter(attribute=None).order_by('-level')
url_names = {
'viewset': 'internal-domain:entity'
}
- restore_instance = False
- def prepare_create_instance(self, instance):
- instance.key += '_new'
- return instance
+ def _test_create_viewset(self, username):
+ for instance in self.instances:
+ instance.key += '_new'
+ self.assert_create_viewset(username, data=self.get_instance_as_dict(instance))
+
+ def _test_delete_viewset(self, username):
+ for instance in self.instances:
+ self.assert_delete_viewset(username, kwargs={
+ 'pk': instance.pk
+ })
-class AttributeTests(TestModelViewsetMixin, DomainTestCase):
+class AttributeTests(TestModelViewsetMixin, DomainViewsetTestCase):
instances = Attribute.objects.all()
url_names = {
'viewset': 'internal-domain:attribute'
}
- restore_instance = False
- def prepare_create_instance(self, instance):
- instance.key += '_new'
- return instance
+ def _test_create_viewset(self, username):
+ for instance in self.instances:
+ instance.key += '_new'
+ self.assert_create_viewset(username, data=self.get_instance_as_dict(instance))
+ def _test_delete_viewset(self, username):
+ for instance in self.instances:
+ self.assert_delete_viewset(username, kwargs={
+ 'pk': instance.pk
+ })
-class RangeTests(TestListViewsetMixin, TestRetrieveViewsetMixin, TestUpdateViewsetMixin, TestDeleteViewsetMixin, DomainTestCase):
+
+class RangeTests(TestListViewsetMixin, TestDetailViewsetMixin, TestUpdateViewsetMixin, TestDeleteViewsetMixin, DomainViewsetTestCase):
instances = Range.objects.all()
url_names = {
@@ -112,7 +106,7 @@ class RangeTests(TestListViewsetMixin, TestRetrieveViewsetMixin, TestUpdateViews
}
-class VerboseNameTests(TestListViewsetMixin, TestRetrieveViewsetMixin, TestUpdateViewsetMixin, TestDeleteViewsetMixin, DomainTestCase):
+class VerboseNameTests(TestListViewsetMixin, TestDetailViewsetMixin, TestUpdateViewsetMixin, TestDeleteViewsetMixin, DomainViewsetTestCase):
instances = VerboseName.objects.all()
url_names = {
@@ -120,7 +114,7 @@ class VerboseNameTests(TestListViewsetMixin, TestRetrieveViewsetMixin, TestUpdat
}
-class ValueTypeTests(TestListViewsetMixin, DomainTestCase):
+class ValueTypeTests(TestListViewsetMixin, DomainViewsetTestCase):
url_names = {
'viewset': 'internal-domain:valuestype'
@@ -132,7 +126,7 @@ class ValueTypeTests(TestListViewsetMixin, DomainTestCase):
}
-class OptionSetTests(TestListViewsetMixin, TestRetrieveViewsetMixin, DomainTestCase):
+class OptionSetTests(TestReadOnlyModelViewsetMixin, DomainViewsetTestCase):
instances = OptionSet.objects.all()
url_names = {
@@ -140,7 +134,7 @@ class OptionSetTests(TestListViewsetMixin, TestRetrieveViewsetMixin, DomainTestC
}
-class ConditionTests(TestListViewsetMixin, TestRetrieveViewsetMixin, DomainTestCase):
+class ConditionTests(TestReadOnlyModelViewsetMixin, DomainViewsetTestCase):
instances = Condition.objects.all()
url_names = {
@@ -148,21 +142,7 @@ class ConditionTests(TestListViewsetMixin, TestRetrieveViewsetMixin, DomainTestC
}
-class DomainExportTests(TestExportViewMixin, DomainTestCase):
-
- url_names = {
- 'list_view': 'domain',
- 'export_view': 'domain_export'
- }
- export_formats = ('xml', 'html', 'rtf', 'csv')
-
-
-class DomainImportTests(TestImportViewMixin, TestCase):
-
- import_file = 'testing/xml/domain.xml'
-
-
-class AttributeEntityAPITests(TestListViewsetMixin, TestRetrieveViewsetMixin, DomainTestCase):
+class AttributeEntityAPITests(TestReadOnlyModelViewsetMixin, DomainViewsetTestCase):
instances = AttributeEntity.objects.filter(attribute=None)
url_names = {
@@ -170,7 +150,7 @@ class AttributeEntityAPITests(TestListViewsetMixin, TestRetrieveViewsetMixin, Do
}
-class AttributeAPITests(TestListViewsetMixin, TestRetrieveViewsetMixin, DomainTestCase):
+class AttributeAPITests(TestReadOnlyModelViewsetMixin, DomainViewsetTestCase):
instances = Attribute.objects.all()
url_names = {
diff --git a/apps/domain/urls.py b/rdmo/domain/urls.py
similarity index 100%
rename from apps/domain/urls.py
rename to rdmo/domain/urls.py
diff --git a/apps/domain/utils.py b/rdmo/domain/utils.py
similarity index 97%
rename from apps/domain/utils.py
rename to rdmo/domain/utils.py
index 504a680ce..162417bfa 100644
--- a/apps/domain/utils.py
+++ b/rdmo/domain/utils.py
@@ -1,6 +1,6 @@
-from apps.core.utils import get_ns_tag
-from apps.conditions.models import Condition
-from apps.options.models import OptionSet
+from rdmo.core.utils import get_ns_tag
+from rdmo.conditions.models import Condition
+from rdmo.options.models import OptionSet
from .models import AttributeEntity, Attribute, Range, VerboseName
diff --git a/apps/domain/validators.py b/rdmo/domain/validators.py
similarity index 85%
rename from apps/domain/validators.py
rename to rdmo/domain/validators.py
index c742ddbff..b4e4afcfc 100644
--- a/apps/domain/validators.py
+++ b/rdmo/domain/validators.py
@@ -1,4 +1,4 @@
-from apps.core.validators import UniquePathValidator
+from rdmo.core.validators import UniquePathValidator
class AttributeEntityUniquePathValidator(UniquePathValidator):
diff --git a/apps/domain/views.py b/rdmo/domain/views.py
similarity index 95%
rename from apps/domain/views.py
rename to rdmo/domain/views.py
index 56b969add..e70d0b0d2 100644
--- a/apps/domain/views.py
+++ b/rdmo/domain/views.py
@@ -3,8 +3,8 @@
from django.utils.translation import ugettext_lazy as _
from django.views.generic import TemplateView, ListView
-from apps.core.views import ModelPermissionMixin
-from apps.core.utils import get_model_field_meta, render_to_format, render_to_csv
+from rdmo.core.views import ModelPermissionMixin
+from rdmo.core.utils import get_model_field_meta, render_to_format, render_to_csv
from .models import AttributeEntity, Attribute, VerboseName, Range
from .serializers.export import AttributeEntitySerializer as ExportSerializer
diff --git a/apps/domain/viewsets.py b/rdmo/domain/viewsets.py
similarity index 95%
rename from apps/domain/viewsets.py
rename to rdmo/domain/viewsets.py
index b9dc95fab..d61ff1ce9 100644
--- a/apps/domain/viewsets.py
+++ b/rdmo/domain/viewsets.py
@@ -5,11 +5,11 @@
from rest_framework.response import Response
from rest_framework.authentication import SessionAuthentication, TokenAuthentication
-from apps.core.views import ChoicesViewSet
-from apps.core.permissions import HasModelPermission
+from rdmo.core.views import ChoicesViewSet
+from rdmo.core.permissions import HasModelPermission
-from apps.options.models import OptionSet
-from apps.conditions.models import Condition
+from rdmo.options.models import OptionSet
+from rdmo.conditions.models import Condition
from .models import AttributeEntity, Attribute, VerboseName, Range
from .serializers import (
diff --git a/rdmo/options/__init__.py b/rdmo/options/__init__.py
new file mode 100644
index 000000000..fdcfa798f
--- /dev/null
+++ b/rdmo/options/__init__.py
@@ -0,0 +1 @@
+default_app_config = 'rdmo.options.app_config.OptionsConfig'
diff --git a/apps/options/admin.py b/rdmo/options/admin.py
similarity index 100%
rename from apps/options/admin.py
rename to rdmo/options/admin.py
diff --git a/apps/options/app_config.py b/rdmo/options/app_config.py
similarity index 85%
rename from apps/options/app_config.py
rename to rdmo/options/app_config.py
index 0a7ab28ff..54ca6e875 100644
--- a/apps/options/app_config.py
+++ b/rdmo/options/app_config.py
@@ -3,5 +3,5 @@
class OptionsConfig(AppConfig):
- name = 'apps.options'
+ name = 'rdmo.options'
verbose_name = _('Options')
diff --git a/apps/options/migrations/0001_initial.py b/rdmo/options/migrations/0001_initial.py
similarity index 95%
rename from apps/options/migrations/0001_initial.py
rename to rdmo/options/migrations/0001_initial.py
index fbdcdac50..9bca07b5c 100644
--- a/apps/options/migrations/0001_initial.py
+++ b/rdmo/options/migrations/0001_initial.py
@@ -2,7 +2,7 @@
# Generated by Django 1.9 on 2016-10-21 10:28
from __future__ import unicode_literals
-import apps.core.models
+import rdmo.core.models
import django.core.validators
from django.db import migrations, models
import django.db.models.deletion
@@ -32,7 +32,7 @@ class Migration(migrations.Migration):
'verbose_name': 'Option',
'verbose_name_plural': 'Options',
},
- bases=(models.Model, apps.core.models.TranslationMixin),
+ bases=(models.Model, rdmo.core.models.TranslationMixin),
),
migrations.CreateModel(
name='OptionSet',
diff --git a/apps/options/migrations/0002_meta.py b/rdmo/options/migrations/0002_meta.py
similarity index 100%
rename from apps/options/migrations/0002_meta.py
rename to rdmo/options/migrations/0002_meta.py
diff --git a/apps/options/migrations/0003_data_migration.py b/rdmo/options/migrations/0003_data_migration.py
similarity index 100%
rename from apps/options/migrations/0003_data_migration.py
rename to rdmo/options/migrations/0003_data_migration.py
diff --git a/apps/options/migrations/0004_conditions.py b/rdmo/options/migrations/0004_conditions.py
similarity index 100%
rename from apps/options/migrations/0004_conditions.py
rename to rdmo/options/migrations/0004_conditions.py
diff --git a/apps/options/migrations/0005_refactoring.py b/rdmo/options/migrations/0005_refactoring.py
similarity index 100%
rename from apps/options/migrations/0005_refactoring.py
rename to rdmo/options/migrations/0005_refactoring.py
diff --git a/apps/options/migrations/0006_refactoring.py b/rdmo/options/migrations/0006_refactoring.py
similarity index 100%
rename from apps/options/migrations/0006_refactoring.py
rename to rdmo/options/migrations/0006_refactoring.py
diff --git a/apps/options/migrations/0007_meta.py b/rdmo/options/migrations/0007_meta.py
similarity index 100%
rename from apps/options/migrations/0007_meta.py
rename to rdmo/options/migrations/0007_meta.py
diff --git a/apps/options/migrations/0008_option_path.py b/rdmo/options/migrations/0008_option_path.py
similarity index 100%
rename from apps/options/migrations/0008_option_path.py
rename to rdmo/options/migrations/0008_option_path.py
diff --git a/apps/options/migrations/0009_data_migration.py b/rdmo/options/migrations/0009_data_migration.py
similarity index 100%
rename from apps/options/migrations/0009_data_migration.py
rename to rdmo/options/migrations/0009_data_migration.py
diff --git a/apps/options/migrations/0010_meta.py b/rdmo/options/migrations/0010_meta.py
similarity index 100%
rename from apps/options/migrations/0010_meta.py
rename to rdmo/options/migrations/0010_meta.py
diff --git a/apps/options/migrations/0011_permissions.py b/rdmo/options/migrations/0011_permissions.py
similarity index 100%
rename from apps/options/migrations/0011_permissions.py
rename to rdmo/options/migrations/0011_permissions.py
diff --git a/apps/options/migrations/0012_meta.py b/rdmo/options/migrations/0012_meta.py
similarity index 100%
rename from apps/options/migrations/0012_meta.py
rename to rdmo/options/migrations/0012_meta.py
diff --git a/apps/tasks/migrations/__init__.py b/rdmo/options/migrations/__init__.py
similarity index 100%
rename from apps/tasks/migrations/__init__.py
rename to rdmo/options/migrations/__init__.py
diff --git a/apps/options/models.py b/rdmo/options/models.py
similarity index 97%
rename from apps/options/models.py
rename to rdmo/options/models.py
index 8ca39228f..672076e01 100644
--- a/apps/options/models.py
+++ b/rdmo/options/models.py
@@ -4,9 +4,9 @@
from django.utils.encoding import python_2_unicode_compatible
from django.utils.translation import ugettext_lazy as _
-from apps.core.utils import get_uri_prefix
-from apps.core.models import TranslationMixin
-from apps.conditions.models import Condition
+from rdmo.core.utils import get_uri_prefix
+from rdmo.core.models import TranslationMixin
+from rdmo.conditions.models import Condition
from .validators import OptionSetUniqueKeyValidator, OptionUniquePathValidator
diff --git a/apps/options/renderers.py b/rdmo/options/renderers.py
similarity index 97%
rename from apps/options/renderers.py
rename to rdmo/options/renderers.py
index 06ec62160..b64f0fbea 100644
--- a/apps/options/renderers.py
+++ b/rdmo/options/renderers.py
@@ -1,4 +1,4 @@
-from apps.core.renderers import BaseXMLRenderer
+from rdmo.core.renderers import BaseXMLRenderer
class XMLRenderer(BaseXMLRenderer):
diff --git a/apps/options/serializers/__init__.py b/rdmo/options/serializers/__init__.py
similarity index 97%
rename from apps/options/serializers/__init__.py
rename to rdmo/options/serializers/__init__.py
index 8e8629768..e37a3a60d 100644
--- a/apps/options/serializers/__init__.py
+++ b/rdmo/options/serializers/__init__.py
@@ -1,6 +1,6 @@
from rest_framework import serializers
-from apps.conditions.models import Condition
+from rdmo.conditions.models import Condition
from ..models import OptionSet, Option
from ..validators import OptionSetUniqueKeyValidator, OptionUniquePathValidator
diff --git a/apps/options/serializers/api.py b/rdmo/options/serializers/api.py
similarity index 100%
rename from apps/options/serializers/api.py
rename to rdmo/options/serializers/api.py
diff --git a/apps/options/serializers/export.py b/rdmo/options/serializers/export.py
similarity index 94%
rename from apps/options/serializers/export.py
rename to rdmo/options/serializers/export.py
index c9ee6677f..e4c71f521 100644
--- a/apps/options/serializers/export.py
+++ b/rdmo/options/serializers/export.py
@@ -1,6 +1,6 @@
from rest_framework import serializers
-from apps.conditions.models import Condition
+from rdmo.conditions.models import Condition
from ..models import OptionSet, Option
diff --git a/apps/options/static/options/css/options.scss b/rdmo/options/static/options/css/options.scss
similarity index 100%
rename from apps/options/static/options/css/options.scss
rename to rdmo/options/static/options/css/options.scss
diff --git a/apps/options/static/options/js/options.js b/rdmo/options/static/options/js/options.js
similarity index 100%
rename from apps/options/static/options/js/options.js
rename to rdmo/options/static/options/js/options.js
diff --git a/apps/options/templates/options/options.html b/rdmo/options/templates/options/options.html
similarity index 94%
rename from apps/options/templates/options/options.html
rename to rdmo/options/templates/options/options.html
index 3e2ccacb9..e8a08a420 100644
--- a/apps/options/templates/options/options.html
+++ b/rdmo/options/templates/options/options.html
@@ -2,18 +2,21 @@
{% load staticfiles %}
{% load compress %}
{% load i18n %}
+{% load core_tags %}
{% block head %}
+ {% vendor 'angular' %}
+
{% compress css %}
{% endcompress %}
-
-
+ {% compress js %}
+ {% endcompress %}
{% endblock %}
{% block bodyattr %} ng-app="options" ng-controller="OptionsController" {% endblock %}
@@ -49,7 +52,7 @@
{% trans 'Options' %}
{% trans 'Export' %}
- {% for format, text in export_formats.items %}
+ {% for format, text in export_formats %}
-
{{ text }}
diff --git a/apps/options/templates/options/options_export.html b/rdmo/options/templates/options/options_export.html
similarity index 100%
rename from apps/options/templates/options/options_export.html
rename to rdmo/options/templates/options/options_export.html
diff --git a/apps/options/templates/options/options_modal_delete_options.html b/rdmo/options/templates/options/options_modal_delete_options.html
similarity index 100%
rename from apps/options/templates/options/options_modal_delete_options.html
rename to rdmo/options/templates/options/options_modal_delete_options.html
diff --git a/apps/options/templates/options/options_modal_delete_optionsets.html b/rdmo/options/templates/options/options_modal_delete_optionsets.html
similarity index 100%
rename from apps/options/templates/options/options_modal_delete_optionsets.html
rename to rdmo/options/templates/options/options_modal_delete_optionsets.html
diff --git a/apps/options/templates/options/options_modal_form_conditions.html b/rdmo/options/templates/options/options_modal_form_conditions.html
similarity index 100%
rename from apps/options/templates/options/options_modal_form_conditions.html
rename to rdmo/options/templates/options/options_modal_form_conditions.html
diff --git a/apps/options/templates/options/options_modal_form_options.html b/rdmo/options/templates/options/options_modal_form_options.html
similarity index 100%
rename from apps/options/templates/options/options_modal_form_options.html
rename to rdmo/options/templates/options/options_modal_form_options.html
diff --git a/apps/options/templates/options/options_modal_form_optionsets.html b/rdmo/options/templates/options/options_modal_form_optionsets.html
similarity index 100%
rename from apps/options/templates/options/options_modal_form_optionsets.html
rename to rdmo/options/templates/options/options_modal_form_optionsets.html
diff --git a/apps/views/migrations/__init__.py b/rdmo/options/tests/__init__.py
similarity index 100%
rename from apps/views/migrations/__init__.py
rename to rdmo/options/tests/__init__.py
diff --git a/rdmo/options/tests/test_views.py b/rdmo/options/tests/test_views.py
new file mode 100644
index 000000000..1ed2ec2c3
--- /dev/null
+++ b/rdmo/options/tests/test_views.py
@@ -0,0 +1,58 @@
+from django.test import TestCase
+
+from test_generator.views import TestListViewMixin
+
+from rdmo.core.testing.mixins import TestExportViewMixin, TestImportViewMixin
+from rdmo.accounts.utils import set_group_permissions
+
+
+class OptionsViewTestCase(TestCase):
+
+ fixtures = (
+ 'users.json',
+ 'groups.json',
+ 'accounts.json',
+ 'conditions.json',
+ 'domain.json',
+ 'options.json',
+ )
+
+ users = (
+ ('editor', 'editor'),
+ ('reviewer', 'reviewer'),
+ ('user', 'user'),
+ ('api', 'api'),
+ ('anonymous', None),
+ )
+
+ status_map = {
+ 'list_view': {
+ 'editor': 200, 'reviewer': 200, 'api': 200, 'user': 403, 'anonymous': 302
+ },
+ 'export_view': {
+ 'editor': 200, 'reviewer': 200, 'api': 200, 'user': 403, 'anonymous': 302
+ }
+ }
+
+ @classmethod
+ def setUpTestData(cls):
+ set_group_permissions()
+
+
+class OptionsTests(TestListViewMixin, OptionsViewTestCase):
+
+ url_names = {
+ 'list_view': 'options'
+ }
+
+
+class OptionsExportTests(TestExportViewMixin, OptionsViewTestCase):
+
+ url_names = {
+ 'export_view': 'options_export'
+ }
+
+
+class OptionsImportTests(TestImportViewMixin, OptionsViewTestCase):
+
+ import_file = 'testing/xml/options.xml'
diff --git a/rdmo/options/tests/test_viewsets.py b/rdmo/options/tests/test_viewsets.py
new file mode 100644
index 000000000..91bfadb6f
--- /dev/null
+++ b/rdmo/options/tests/test_viewsets.py
@@ -0,0 +1,101 @@
+from django.test import TestCase
+
+from test_generator.viewsets import TestModelViewsetMixin, TestReadOnlyModelViewsetMixin
+
+from rdmo.accounts.utils import set_group_permissions
+
+from rdmo.conditions.models import Condition
+
+from ..models import OptionSet, Option
+
+
+class OptionsViewsetTestCase(TestCase):
+
+ fixtures = (
+ 'users.json',
+ 'groups.json',
+ 'accounts.json',
+ 'conditions.json',
+ 'domain.json',
+ 'options.json',
+ )
+
+ users = (
+ ('editor', 'editor'),
+ ('reviewer', 'reviewer'),
+ ('user', 'user'),
+ ('api', 'api'),
+ ('anonymous', None),
+ )
+
+ status_map = {
+ 'list_viewset': {
+ 'editor': 200, 'reviewer': 200, 'api': 200, 'user': 403, 'anonymous': 403
+ },
+ 'detail_viewset': {
+ 'editor': 200, 'reviewer': 200, 'api': 200, 'user': 403, 'anonymous': 403
+ },
+ 'create_viewset': {
+ 'editor': 201, 'reviewer': 403, 'api': 403, 'user': 403, 'anonymous': 403
+ },
+ 'update_viewset': {
+ 'editor': 200, 'reviewer': 403, 'api': 403, 'user': 403, 'anonymous': 403
+ },
+ 'delete_viewset': {
+ 'editor': 204, 'reviewer': 403, 'api': 403, 'user': 403, 'anonymous': 403
+ }
+ }
+
+ @classmethod
+ def setUpTestData(cls):
+ set_group_permissions()
+
+
+class OptionSetTests(TestModelViewsetMixin, OptionsViewsetTestCase):
+
+ instances = OptionSet.objects.all()
+ url_names = {
+ 'viewset': 'internal-options:optionset'
+ }
+
+ def _test_create_viewset(self, username):
+ for instance in self.instances:
+ instance.key += '_new'
+ self.assert_create_viewset(username, data=self.get_instance_as_dict(instance))
+
+
+class OptionTests(TestModelViewsetMixin, OptionsViewsetTestCase):
+
+ instances = Option.objects.all()
+ url_names = {
+ 'viewset': 'internal-options:option'
+ }
+
+ def _test_create_viewset(self, username):
+ for instance in self.instances:
+ instance.key += '_new'
+ self.assert_create_viewset(username, data=self.get_instance_as_dict(instance))
+
+
+class ConditionTests(TestReadOnlyModelViewsetMixin, OptionsViewsetTestCase):
+
+ instances = Condition.objects.all()
+ url_names = {
+ 'viewset': 'internal-options:condition'
+ }
+
+
+class OptionSetAPITests(TestReadOnlyModelViewsetMixin, OptionsViewsetTestCase):
+
+ instances = OptionSet.objects.all()
+ url_names = {
+ 'viewset': 'api-v1-options:optionset'
+ }
+
+
+class OptionAPITests(TestReadOnlyModelViewsetMixin, OptionsViewsetTestCase):
+
+ instances = Option.objects.all()
+ url_names = {
+ 'viewset': 'api-v1-options:option'
+ }
diff --git a/apps/options/urls.py b/rdmo/options/urls.py
similarity index 100%
rename from apps/options/urls.py
rename to rdmo/options/urls.py
diff --git a/apps/options/utils.py b/rdmo/options/utils.py
similarity index 97%
rename from apps/options/utils.py
rename to rdmo/options/utils.py
index 02da7908f..dad5e209c 100644
--- a/apps/options/utils.py
+++ b/rdmo/options/utils.py
@@ -1,4 +1,4 @@
-from apps.core.utils import get_ns_tag
+from rdmo.core.utils import get_ns_tag
from .models import OptionSet, Option
diff --git a/apps/options/validators.py b/rdmo/options/validators.py
similarity index 83%
rename from apps/options/validators.py
rename to rdmo/options/validators.py
index 0b8093581..f0e54ea12 100644
--- a/apps/options/validators.py
+++ b/rdmo/options/validators.py
@@ -1,4 +1,4 @@
-from apps.core.validators import UniqueKeyValidator, UniquePathValidator
+from rdmo.core.validators import UniqueKeyValidator, UniquePathValidator
class OptionSetUniqueKeyValidator(UniqueKeyValidator):
diff --git a/apps/options/views.py b/rdmo/options/views.py
similarity index 93%
rename from apps/options/views.py
rename to rdmo/options/views.py
index 983494ca7..55821ef93 100644
--- a/apps/options/views.py
+++ b/rdmo/options/views.py
@@ -3,8 +3,8 @@
from django.utils.translation import ugettext_lazy as _
from django.views.generic import TemplateView, ListView
-from apps.core.views import ModelPermissionMixin
-from apps.core.utils import get_model_field_meta, render_to_format
+from rdmo.core.views import ModelPermissionMixin
+from rdmo.core.utils import get_model_field_meta, render_to_format
from .models import OptionSet, Option
from .serializers.export import OptionSetSerializer as ExportSerializer
diff --git a/apps/options/viewsets.py b/rdmo/options/viewsets.py
similarity index 95%
rename from apps/options/viewsets.py
rename to rdmo/options/viewsets.py
index 0dc193e27..d7431630d 100644
--- a/apps/options/viewsets.py
+++ b/rdmo/options/viewsets.py
@@ -4,9 +4,9 @@
from rest_framework.response import Response
from rest_framework.authentication import SessionAuthentication, TokenAuthentication
-from apps.core.permissions import HasModelPermission
+from rdmo.core.permissions import HasModelPermission
-from apps.conditions.models import Condition
+from rdmo.conditions.models import Condition
from .models import OptionSet, Option
from .serializers import (
diff --git a/rdmo/projects/__init__.py b/rdmo/projects/__init__.py
new file mode 100644
index 000000000..c9bddd34a
--- /dev/null
+++ b/rdmo/projects/__init__.py
@@ -0,0 +1 @@
+default_app_config = 'rdmo.projects.app_config.ProjectsConfig'
diff --git a/apps/projects/admin.py b/rdmo/projects/admin.py
similarity index 100%
rename from apps/projects/admin.py
rename to rdmo/projects/admin.py
diff --git a/apps/projects/app_config.py b/rdmo/projects/app_config.py
similarity index 88%
rename from apps/projects/app_config.py
rename to rdmo/projects/app_config.py
index a8c25493b..2a21bb272 100644
--- a/apps/projects/app_config.py
+++ b/rdmo/projects/app_config.py
@@ -3,7 +3,7 @@
class ProjectsConfig(AppConfig):
- name = 'apps.projects'
+ name = 'rdmo.projects'
verbose_name = _('Projects')
def ready(self):
diff --git a/apps/projects/forms.py b/rdmo/projects/forms.py
similarity index 100%
rename from apps/projects/forms.py
rename to rdmo/projects/forms.py
diff --git a/apps/projects/migrations/0001_initial_after_reset.py b/rdmo/projects/migrations/0001_initial_after_reset.py
similarity index 100%
rename from apps/projects/migrations/0001_initial_after_reset.py
rename to rdmo/projects/migrations/0001_initial_after_reset.py
diff --git a/apps/projects/migrations/0002_meta.py b/rdmo/projects/migrations/0002_meta.py
similarity index 100%
rename from apps/projects/migrations/0002_meta.py
rename to rdmo/projects/migrations/0002_meta.py
diff --git a/apps/projects/migrations/0003_meta.py b/rdmo/projects/migrations/0003_meta.py
similarity index 100%
rename from apps/projects/migrations/0003_meta.py
rename to rdmo/projects/migrations/0003_meta.py
diff --git a/apps/projects/migrations/0004_remove_current_snapshot.py b/rdmo/projects/migrations/0004_remove_current_snapshot.py
similarity index 100%
rename from apps/projects/migrations/0004_remove_current_snapshot.py
rename to rdmo/projects/migrations/0004_remove_current_snapshot.py
diff --git a/apps/projects/migrations/0005_snapshot.py b/rdmo/projects/migrations/0005_snapshot.py
similarity index 100%
rename from apps/projects/migrations/0005_snapshot.py
rename to rdmo/projects/migrations/0005_snapshot.py
diff --git a/apps/projects/migrations/0006_project_values.py b/rdmo/projects/migrations/0006_project_values.py
similarity index 100%
rename from apps/projects/migrations/0006_project_values.py
rename to rdmo/projects/migrations/0006_project_values.py
diff --git a/apps/projects/migrations/0007_data_migration.py b/rdmo/projects/migrations/0007_data_migration.py
similarity index 100%
rename from apps/projects/migrations/0007_data_migration.py
rename to rdmo/projects/migrations/0007_data_migration.py
diff --git a/apps/projects/migrations/0008_not_null.py b/rdmo/projects/migrations/0008_not_null.py
similarity index 100%
rename from apps/projects/migrations/0008_not_null.py
rename to rdmo/projects/migrations/0008_not_null.py
diff --git a/apps/projects/migrations/0009_options.py b/rdmo/projects/migrations/0009_options.py
similarity index 100%
rename from apps/projects/migrations/0009_options.py
rename to rdmo/projects/migrations/0009_options.py
diff --git a/apps/projects/migrations/0010_add_db_contraint.py b/rdmo/projects/migrations/0010_add_db_contraint.py
similarity index 100%
rename from apps/projects/migrations/0010_add_db_contraint.py
rename to rdmo/projects/migrations/0010_add_db_contraint.py
diff --git a/apps/projects/migrations/0011_refactoring.py b/rdmo/projects/migrations/0011_refactoring.py
similarity index 100%
rename from apps/projects/migrations/0011_refactoring.py
rename to rdmo/projects/migrations/0011_refactoring.py
diff --git a/apps/projects/migrations/0012_membership.py b/rdmo/projects/migrations/0012_membership.py
similarity index 100%
rename from apps/projects/migrations/0012_membership.py
rename to rdmo/projects/migrations/0012_membership.py
diff --git a/apps/projects/migrations/0013_data_migration.py b/rdmo/projects/migrations/0013_data_migration.py
similarity index 100%
rename from apps/projects/migrations/0013_data_migration.py
rename to rdmo/projects/migrations/0013_data_migration.py
diff --git a/apps/projects/migrations/0014_remove_owner.py b/rdmo/projects/migrations/0014_remove_owner.py
similarity index 100%
rename from apps/projects/migrations/0014_remove_owner.py
rename to rdmo/projects/migrations/0014_remove_owner.py
diff --git a/apps/projects/migrations/0015_permissions.py b/rdmo/projects/migrations/0015_permissions.py
similarity index 100%
rename from apps/projects/migrations/0015_permissions.py
rename to rdmo/projects/migrations/0015_permissions.py
diff --git a/apps/tasks/static/tasks/css/tasks.scss b/rdmo/projects/migrations/__init__.py
similarity index 100%
rename from apps/tasks/static/tasks/css/tasks.scss
rename to rdmo/projects/migrations/__init__.py
diff --git a/apps/projects/models.py b/rdmo/projects/models.py
similarity index 98%
rename from apps/projects/models.py
rename to rdmo/projects/models.py
index 749ee7342..3ff550073 100644
--- a/apps/projects/models.py
+++ b/rdmo/projects/models.py
@@ -10,10 +10,10 @@
from django.utils.functional import cached_property
from django.utils.translation import ugettext_lazy as _
-from apps.core.models import Model
-from apps.domain.models import Attribute
-from apps.options.models import Option
-from apps.questions.models import Catalog
+from rdmo.core.models import Model
+from rdmo.domain.models import Attribute
+from rdmo.options.models import Option
+from rdmo.questions.models import Catalog
@python_2_unicode_compatible
diff --git a/apps/projects/renderers.py b/rdmo/projects/renderers.py
similarity index 98%
rename from apps/projects/renderers.py
rename to rdmo/projects/renderers.py
index 5785ef094..275c79274 100644
--- a/apps/projects/renderers.py
+++ b/rdmo/projects/renderers.py
@@ -1,4 +1,4 @@
-from apps.core.renderers import BaseXMLRenderer
+from rdmo.core.renderers import BaseXMLRenderer
class XMLRenderer(BaseXMLRenderer):
diff --git a/apps/projects/rules.py b/rdmo/projects/rules.py
similarity index 100%
rename from apps/projects/rules.py
rename to rdmo/projects/rules.py
diff --git a/apps/projects/serializers/__init__.py b/rdmo/projects/serializers/__init__.py
similarity index 100%
rename from apps/projects/serializers/__init__.py
rename to rdmo/projects/serializers/__init__.py
diff --git a/apps/projects/serializers/api.py b/rdmo/projects/serializers/api.py
similarity index 100%
rename from apps/projects/serializers/api.py
rename to rdmo/projects/serializers/api.py
diff --git a/apps/projects/serializers/catalog.py b/rdmo/projects/serializers/catalog.py
similarity index 95%
rename from apps/projects/serializers/catalog.py
rename to rdmo/projects/serializers/catalog.py
index ca8710a8a..0ed231d7e 100644
--- a/apps/projects/serializers/catalog.py
+++ b/rdmo/projects/serializers/catalog.py
@@ -1,6 +1,6 @@
from rest_framework import serializers
-from apps.questions.models import Catalog, Section, Subsection, QuestionEntity, Question
+from rdmo.questions.models import Catalog, Section, Subsection, QuestionEntity, Question
class QuestionSerializer(serializers.ModelSerializer):
diff --git a/apps/projects/serializers/export.py b/rdmo/projects/serializers/export.py
similarity index 100%
rename from apps/projects/serializers/export.py
rename to rdmo/projects/serializers/export.py
diff --git a/apps/projects/serializers/question_entity.py b/rdmo/projects/serializers/question_entity.py
similarity index 95%
rename from apps/projects/serializers/question_entity.py
rename to rdmo/projects/serializers/question_entity.py
index cbbaaccd8..dd179642c 100644
--- a/apps/projects/serializers/question_entity.py
+++ b/rdmo/projects/serializers/question_entity.py
@@ -2,12 +2,12 @@
from rest_framework import serializers
-from apps.core.serializers import MarkdownSerializerMixin
-from apps.conditions.models import Condition
-from apps.domain.models import AttributeEntity, Attribute, Range
-from apps.options.models import OptionSet, Option
+from rdmo.core.serializers import MarkdownSerializerMixin
+from rdmo.conditions.models import Condition
+from rdmo.domain.models import AttributeEntity, Attribute, Range
+from rdmo.options.models import OptionSet, Option
-from apps.questions.models import QuestionEntity, Question
+from rdmo.questions.models import QuestionEntity, Question
class OptionSerializer(serializers.ModelSerializer):
diff --git a/apps/projects/static/projects/css/project_questions.scss b/rdmo/projects/static/projects/css/project_questions.scss
similarity index 100%
rename from apps/projects/static/projects/css/project_questions.scss
rename to rdmo/projects/static/projects/css/project_questions.scss
diff --git a/apps/projects/static/projects/js/project_questions/app.js b/rdmo/projects/static/projects/js/project_questions/app.js
similarity index 100%
rename from apps/projects/static/projects/js/project_questions/app.js
rename to rdmo/projects/static/projects/js/project_questions/app.js
diff --git a/apps/projects/static/projects/js/project_questions/controllers.js b/rdmo/projects/static/projects/js/project_questions/controllers.js
similarity index 100%
rename from apps/projects/static/projects/js/project_questions/controllers.js
rename to rdmo/projects/static/projects/js/project_questions/controllers.js
diff --git a/apps/projects/static/projects/js/project_questions/directives.js b/rdmo/projects/static/projects/js/project_questions/directives.js
similarity index 100%
rename from apps/projects/static/projects/js/project_questions/directives.js
rename to rdmo/projects/static/projects/js/project_questions/directives.js
diff --git a/apps/projects/static/projects/js/project_questions/services.js b/rdmo/projects/static/projects/js/project_questions/services.js
similarity index 100%
rename from apps/projects/static/projects/js/project_questions/services.js
rename to rdmo/projects/static/projects/js/project_questions/services.js
diff --git a/apps/projects/templates/projects/membership_confirm_delete.html b/rdmo/projects/templates/projects/membership_confirm_delete.html
similarity index 100%
rename from apps/projects/templates/projects/membership_confirm_delete.html
rename to rdmo/projects/templates/projects/membership_confirm_delete.html
diff --git a/apps/projects/templates/projects/membership_form.html b/rdmo/projects/templates/projects/membership_form.html
similarity index 100%
rename from apps/projects/templates/projects/membership_form.html
rename to rdmo/projects/templates/projects/membership_form.html
diff --git a/apps/projects/templates/projects/project_answers.html b/rdmo/projects/templates/projects/project_answers.html
similarity index 96%
rename from apps/projects/templates/projects/project_answers.html
rename to rdmo/projects/templates/projects/project_answers.html
index e4279e2d4..76a23c67d 100644
--- a/apps/projects/templates/projects/project_answers.html
+++ b/rdmo/projects/templates/projects/project_answers.html
@@ -36,7 +36,7 @@
{% trans 'Options' %}
{% trans 'Export' %}
- {% for format, text in export_formats.items %}
+ {% for format, text in export_formats %}
-
{% if current_snapshot %}
diff --git a/apps/projects/templates/projects/project_answers_export.html b/rdmo/projects/templates/projects/project_answers_export.html
similarity index 100%
rename from apps/projects/templates/projects/project_answers_export.html
rename to rdmo/projects/templates/projects/project_answers_export.html
diff --git a/apps/projects/templates/projects/project_answers_tree.html b/rdmo/projects/templates/projects/project_answers_tree.html
similarity index 100%
rename from apps/projects/templates/projects/project_answers_tree.html
rename to rdmo/projects/templates/projects/project_answers_tree.html
diff --git a/apps/projects/templates/projects/project_confirm_delete.html b/rdmo/projects/templates/projects/project_confirm_delete.html
similarity index 100%
rename from apps/projects/templates/projects/project_confirm_delete.html
rename to rdmo/projects/templates/projects/project_confirm_delete.html
diff --git a/apps/projects/templates/projects/project_detail.html b/rdmo/projects/templates/projects/project_detail.html
similarity index 100%
rename from apps/projects/templates/projects/project_detail.html
rename to rdmo/projects/templates/projects/project_detail.html
diff --git a/apps/projects/templates/projects/project_detail_memberships.html b/rdmo/projects/templates/projects/project_detail_memberships.html
similarity index 100%
rename from apps/projects/templates/projects/project_detail_memberships.html
rename to rdmo/projects/templates/projects/project_detail_memberships.html
diff --git a/apps/projects/templates/projects/project_detail_snapshots.html b/rdmo/projects/templates/projects/project_detail_snapshots.html
similarity index 100%
rename from apps/projects/templates/projects/project_detail_snapshots.html
rename to rdmo/projects/templates/projects/project_detail_snapshots.html
diff --git a/apps/projects/templates/projects/project_detail_tasks.html b/rdmo/projects/templates/projects/project_detail_tasks.html
similarity index 100%
rename from apps/projects/templates/projects/project_detail_tasks.html
rename to rdmo/projects/templates/projects/project_detail_tasks.html
diff --git a/apps/projects/templates/projects/project_detail_views.html b/rdmo/projects/templates/projects/project_detail_views.html
similarity index 100%
rename from apps/projects/templates/projects/project_detail_views.html
rename to rdmo/projects/templates/projects/project_detail_views.html
diff --git a/apps/projects/templates/projects/project_form.html b/rdmo/projects/templates/projects/project_form.html
similarity index 100%
rename from apps/projects/templates/projects/project_form.html
rename to rdmo/projects/templates/projects/project_form.html
diff --git a/apps/projects/templates/projects/project_questions.html b/rdmo/projects/templates/projects/project_questions.html
similarity index 83%
rename from apps/projects/templates/projects/project_questions.html
rename to rdmo/projects/templates/projects/project_questions.html
index 040d66a59..88452d7aa 100644
--- a/apps/projects/templates/projects/project_questions.html
+++ b/rdmo/projects/templates/projects/project_questions.html
@@ -9,25 +9,22 @@
+ {% vendor 'angular' %}
+ {% vendor 'codemirror' %}
+ {% vendor 'moment' %}
+ {% vendor 'bootstrap-datepicker' %}
+
{% compress css %}
-
{% endcompress %}
-
-
-
-
-
-
-
+ {% compress js %}
-
-
+ {% endcompress %}
{% endblock %}
{% block bodyattr %} ng-app="project_questions" ng-controller="QuestionsController" ng-init="service.init({{ project.id }})" {% endblock %}
diff --git a/apps/projects/templates/projects/project_questions_add_field_button.html b/rdmo/projects/templates/projects/project_questions_add_field_button.html
similarity index 100%
rename from apps/projects/templates/projects/project_questions_add_field_button.html
rename to rdmo/projects/templates/projects/project_questions_add_field_button.html
diff --git a/apps/projects/templates/projects/project_questions_add_field_help.html b/rdmo/projects/templates/projects/project_questions_add_field_help.html
similarity index 100%
rename from apps/projects/templates/projects/project_questions_add_field_help.html
rename to rdmo/projects/templates/projects/project_questions_add_field_help.html
diff --git a/apps/projects/templates/projects/project_questions_done.html b/rdmo/projects/templates/projects/project_questions_done.html
similarity index 100%
rename from apps/projects/templates/projects/project_questions_done.html
rename to rdmo/projects/templates/projects/project_questions_done.html
diff --git a/apps/projects/templates/projects/project_questions_form_group_checkbox.html b/rdmo/projects/templates/projects/project_questions_form_group_checkbox.html
similarity index 100%
rename from apps/projects/templates/projects/project_questions_form_group_checkbox.html
rename to rdmo/projects/templates/projects/project_questions_form_group_checkbox.html
diff --git a/apps/projects/templates/projects/project_questions_form_group_date.html b/rdmo/projects/templates/projects/project_questions_form_group_date.html
similarity index 100%
rename from apps/projects/templates/projects/project_questions_form_group_date.html
rename to rdmo/projects/templates/projects/project_questions_form_group_date.html
diff --git a/apps/projects/templates/projects/project_questions_form_group_radio.html b/rdmo/projects/templates/projects/project_questions_form_group_radio.html
similarity index 100%
rename from apps/projects/templates/projects/project_questions_form_group_radio.html
rename to rdmo/projects/templates/projects/project_questions_form_group_radio.html
diff --git a/apps/projects/templates/projects/project_questions_form_group_range.html b/rdmo/projects/templates/projects/project_questions_form_group_range.html
similarity index 100%
rename from apps/projects/templates/projects/project_questions_form_group_range.html
rename to rdmo/projects/templates/projects/project_questions_form_group_range.html
diff --git a/apps/projects/templates/projects/project_questions_form_group_select.html b/rdmo/projects/templates/projects/project_questions_form_group_select.html
similarity index 100%
rename from apps/projects/templates/projects/project_questions_form_group_select.html
rename to rdmo/projects/templates/projects/project_questions_form_group_select.html
diff --git a/apps/projects/templates/projects/project_questions_form_group_text.html b/rdmo/projects/templates/projects/project_questions_form_group_text.html
similarity index 100%
rename from apps/projects/templates/projects/project_questions_form_group_text.html
rename to rdmo/projects/templates/projects/project_questions_form_group_text.html
diff --git a/apps/projects/templates/projects/project_questions_form_group_textarea.html b/rdmo/projects/templates/projects/project_questions_form_group_textarea.html
similarity index 100%
rename from apps/projects/templates/projects/project_questions_form_group_textarea.html
rename to rdmo/projects/templates/projects/project_questions_form_group_textarea.html
diff --git a/apps/projects/templates/projects/project_questions_form_group_yesno.html b/rdmo/projects/templates/projects/project_questions_form_group_yesno.html
similarity index 100%
rename from apps/projects/templates/projects/project_questions_form_group_yesno.html
rename to rdmo/projects/templates/projects/project_questions_form_group_yesno.html
diff --git a/apps/projects/templates/projects/project_questions_modal_delete_valuesets.html b/rdmo/projects/templates/projects/project_questions_modal_delete_valuesets.html
similarity index 100%
rename from apps/projects/templates/projects/project_questions_modal_delete_valuesets.html
rename to rdmo/projects/templates/projects/project_questions_modal_delete_valuesets.html
diff --git a/apps/projects/templates/projects/project_questions_modal_form_valuesets.html b/rdmo/projects/templates/projects/project_questions_modal_form_valuesets.html
similarity index 100%
rename from apps/projects/templates/projects/project_questions_modal_form_valuesets.html
rename to rdmo/projects/templates/projects/project_questions_modal_form_valuesets.html
diff --git a/apps/projects/templates/projects/project_questions_questionset_head.html b/rdmo/projects/templates/projects/project_questions_questionset_head.html
similarity index 100%
rename from apps/projects/templates/projects/project_questions_questionset_head.html
rename to rdmo/projects/templates/projects/project_questions_questionset_head.html
diff --git a/apps/projects/templates/projects/project_questions_remove_field.html b/rdmo/projects/templates/projects/project_questions_remove_field.html
similarity index 100%
rename from apps/projects/templates/projects/project_questions_remove_field.html
rename to rdmo/projects/templates/projects/project_questions_remove_field.html
diff --git a/apps/projects/templates/projects/project_questions_sidebar.html b/rdmo/projects/templates/projects/project_questions_sidebar.html
similarity index 100%
rename from apps/projects/templates/projects/project_questions_sidebar.html
rename to rdmo/projects/templates/projects/project_questions_sidebar.html
diff --git a/apps/projects/templates/projects/project_view.html b/rdmo/projects/templates/projects/project_view.html
similarity index 96%
rename from apps/projects/templates/projects/project_view.html
rename to rdmo/projects/templates/projects/project_view.html
index c3ab6b684..349cbf7a1 100644
--- a/apps/projects/templates/projects/project_view.html
+++ b/rdmo/projects/templates/projects/project_view.html
@@ -36,7 +36,7 @@
{% trans 'Options' %}
{% trans 'Export' %}
- {% for format, text in export_formats.items %}
+ {% for format, text in export_formats %}
-
{% if current_snapshot %}
diff --git a/apps/projects/templates/projects/project_view_export.html b/rdmo/projects/templates/projects/project_view_export.html
similarity index 100%
rename from apps/projects/templates/projects/project_view_export.html
rename to rdmo/projects/templates/projects/project_view_export.html
diff --git a/apps/projects/templates/projects/projects.html b/rdmo/projects/templates/projects/projects.html
similarity index 100%
rename from apps/projects/templates/projects/projects.html
rename to rdmo/projects/templates/projects/projects.html
diff --git a/apps/projects/templates/projects/snapshot_form.html b/rdmo/projects/templates/projects/snapshot_form.html
similarity index 100%
rename from apps/projects/templates/projects/snapshot_form.html
rename to rdmo/projects/templates/projects/snapshot_form.html
diff --git a/apps/projects/templates/projects/snapshot_rollback.html b/rdmo/projects/templates/projects/snapshot_rollback.html
similarity index 100%
rename from apps/projects/templates/projects/snapshot_rollback.html
rename to rdmo/projects/templates/projects/snapshot_rollback.html
diff --git a/rdmo/projects/tests/__init__.py b/rdmo/projects/tests/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/rdmo/projects/tests/test_views.py b/rdmo/projects/tests/test_views.py
new file mode 100644
index 000000000..3de3996bb
--- /dev/null
+++ b/rdmo/projects/tests/test_views.py
@@ -0,0 +1,187 @@
+from django.test import TestCase
+from django.core.urlresolvers import reverse
+
+from test_generator.core import TestModelStringMixin
+from test_generator.views import TestModelViewMixin, TestViewMixin
+
+from rdmo.accounts.utils import set_group_permissions
+
+from ..models import Project, Membership
+
+
+class ProjectsViewTestCase(TestCase):
+
+ fixtures = (
+ 'users.json',
+ 'groups.json',
+ 'accounts.json',
+ 'conditions.json',
+ 'domain.json',
+ 'options.json',
+ 'questions.json',
+ 'tasks.json',
+ 'views.json',
+ 'projects.json',
+ )
+
+ users = (
+ ('owner', 'owner'),
+ ('manager', 'manager'),
+ ('author', 'author'),
+ ('guest', 'guest'),
+ ('user', 'user'),
+ ('anonymous', None),
+ )
+
+ @classmethod
+ def setUpTestData(cls):
+ set_group_permissions()
+
+
+class ProjectTests(TestModelViewMixin, TestModelStringMixin, ProjectsViewTestCase):
+
+ instances = Project.objects.filter(pk=1)
+
+ url_names = {
+ 'list_view': 'projects',
+ 'detail_view': 'project',
+ 'create_view': 'project_create',
+ 'update_view': 'project_update',
+ 'delete_view': 'project_delete',
+ 'export_view': 'project_export_xml',
+ }
+
+ status_map = {
+ 'list_view': {
+ 'owner': 200, 'manager': 200, 'author': 200, 'guest': 200, 'user': 200, 'anonymous': 302,
+ },
+ 'detail_view': {
+ 'owner': 200, 'manager': 200, 'author': 200, 'guest': 200, 'user': 403, 'anonymous': 302
+ },
+ 'create_view_get': {
+ 'owner': 200, 'manager': 200, 'author': 200, 'guest': 200, 'user': 200, 'anonymous': 302
+ },
+ 'create_view_post': {
+ 'owner': 302, 'manager': 302, 'author': 302, 'guest': 302, 'user': 302, 'anonymous': 302
+ },
+ 'update_view_get': {
+ 'owner': 200, 'manager': 200, 'author': 403, 'guest': 403, 'user': 403, 'anonymous': 302
+ },
+ 'update_view_post': {
+ 'owner': 302, 'manager': 302, 'author': 403, 'guest': 403, 'user': 403, 'anonymous': 302
+ },
+ 'delete_view_get': {
+ 'owner': 200, 'manager': 403, 'author': 403, 'guest': 403, 'user': 403, 'anonymous': 302
+ },
+ 'delete_view_post': {
+ 'owner': 302, 'manager': 403, 'author': 403, 'guest': 403, 'user': 403, 'anonymous': 302
+ },
+ 'export_view': {
+ 'owner': 200, 'manager': 403, 'author': 403, 'guest': 403, 'user': 403, 'anonymous': 302
+ }
+ }
+
+ def _test_export(self, username):
+ for instance in self.instances:
+
+ url = reverse(self.url_names['export_view'], kwargs={'pk': instance.pk})
+ response = self.client.get(url)
+
+ self.assertEqual(response.status_code, self.status_map['export_view'][username], msg=(
+ ('username', username),
+ ('url', url),
+ ('status_code', response.status_code),
+ ('content', response.content)
+ ))
+
+
+class MembershipTests(TestViewMixin, TestModelStringMixin, ProjectsViewTestCase):
+
+ project_id = 1
+ instances = Membership.objects.filter(project__pk=project_id)
+
+ url_names = {
+ 'create_view': 'membership_create',
+ 'update_view': 'membership_update',
+ 'delete_view': 'membership_delete'
+ }
+
+ status_map = {
+ 'create_view_get': {
+ 'owner': 200, 'manager': 403, 'author': 403, 'guest': 403, 'user': 403, 'anonymous': 302
+ },
+ 'create_view_post': {
+ 'owner': 302, 'manager': 403, 'author': 403, 'guest': 403, 'user': 403, 'anonymous': 302
+ },
+ 'update_view_get': {
+ 'owner': 200, 'manager': 403, 'author': 403, 'guest': 403, 'user': 403, 'anonymous': 302
+ },
+ 'update_view_post': {
+ 'owner': 302, 'manager': 403, 'author': 403, 'guest': 403, 'user': 403, 'anonymous': 302
+ },
+ 'delete_view_get': {
+ 'owner': 200, 'manager': 403, 'author': 403, 'guest': 403, 'user': 403, 'anonymous': 302
+ },
+ 'delete_view_post': {
+ 'owner': 302, 'manager': 403, 'author': 403, 'guest': 403, 'user': 403, 'anonymous': 302
+ }
+ }
+
+ def _test_create_view_get(self, username):
+ self.assert_create_view_get(username, {
+ 'project_id': self.project_id
+ })
+
+ def _test_create_view_post(self, username):
+
+ for role in ['owner', 'manager', 'author', 'guest']:
+
+ url = reverse(self.url_names['create_view'], kwargs={'project_id': self.project_id})
+ data = {
+ 'username_or_email': 'user',
+ 'role': role
+ }
+ response = self.client.post(url, data)
+
+ self.assertEqual(response.status_code, self.status_map['create_view_post'][username], msg=(
+ ('username', username),
+ ('url', url),
+ ('data', data),
+ ('status_code', response.status_code),
+ ('content', response.content)
+ ))
+
+ try:
+ Membership.objects.get(user__username='user', role=role).delete()
+ except Membership.DoesNotExist:
+ pass
+
+ def _test_update_view_get(self, username):
+ for instance in self.instances:
+ self.assert_update_view_get(username, {
+ 'project_id': self.project_id,
+ 'pk': instance.pk
+ })
+
+ def _test_update_view_post(self, username):
+ for instance in self.instances:
+ data = self.get_instance_as_dict(instance)
+ self.assert_update_view_post(username, {
+ 'project_id': self.project_id,
+ 'pk': instance.pk
+ }, data)
+
+ def _test_delete_view_get(self, username):
+ for instance in self.instances:
+ self.assert_delete_view_get(username, {
+ 'project_id': self.project_id,
+ 'pk': instance.pk
+ })
+
+ def _test_delete_view_post(self, username):
+ for instance in self.instances:
+ self.assert_delete_view_post(username, {
+ 'project_id': self.project_id,
+ 'pk': instance.pk
+ })
+ instance.save(update_fields=None)
diff --git a/rdmo/projects/tests/test_viewsets.py b/rdmo/projects/tests/test_viewsets.py
new file mode 100644
index 000000000..ae3838e0e
--- /dev/null
+++ b/rdmo/projects/tests/test_viewsets.py
@@ -0,0 +1,156 @@
+from django.test import TestCase
+
+from test_generator.core import TestSingleObjectMixin, TestModelStringMixin
+from test_generator.viewsets import TestReadOnlyModelViewsetMixin, TestViewsetMixin
+
+from rdmo.accounts.utils import set_group_permissions
+from rdmo.questions.models import Catalog, QuestionEntity
+
+from ..models import Project, Value
+
+
+class ProjectsViewsetTestCase(TestCase):
+
+ fixtures = (
+ 'users.json',
+ 'groups.json',
+ 'accounts.json',
+ 'conditions.json',
+ 'domain.json',
+ 'options.json',
+ 'questions.json',
+ 'tasks.json',
+ 'views.json',
+ 'projects.json',
+ )
+
+ users = (
+ ('owner', 'owner'),
+ ('manager', 'manager'),
+ ('author', 'author'),
+ ('guest', 'guest'),
+ ('user', 'user'),
+ ('anonymous', None),
+ )
+
+ @classmethod
+ def setUpTestData(cls):
+ set_group_permissions()
+
+
+class ProjectTests(TestReadOnlyModelViewsetMixin, TestModelStringMixin, ProjectsViewsetTestCase):
+
+ instances = Project.objects.filter(pk=1)
+
+ url_names = {
+ 'viewset': 'internal-projects:project'
+ }
+
+ status_map = {
+ 'list_viewset': {
+ 'owner': 200, 'manager': 200, 'author': 200, 'guest': 200, 'user': 200, 'anonymous': 403
+ },
+ 'detail_viewset': {
+ 'owner': 200, 'manager': 200, 'author': 200, 'guest': 200, 'user': 404, 'anonymous': 403
+ }
+ }
+
+
+class ValueTests(TestViewsetMixin, TestSingleObjectMixin, ProjectsViewsetTestCase):
+
+ project_id = 1
+ instances = Value.objects.filter(project__pk=project_id)
+
+ url_names = {
+ 'viewset': 'internal-projects:value'
+ }
+
+ status_map = {
+ 'list_viewset': {
+ 'owner': 200, 'manager': 200, 'author': 200, 'guest': 200, 'user': 403, 'anonymous': 403
+ },
+ 'detail_viewset': {
+ 'owner': 200, 'manager': 200, 'author': 200, 'guest': 200, 'user': 403, 'anonymous': 403
+ },
+ 'create_viewset': {
+ 'owner': 201, 'manager': 201, 'author': 201, 'guest': 403, 'user': 403, 'anonymous': 403
+ },
+ 'update_viewset': {
+ 'owner': 200, 'manager': 200, 'author': 200, 'guest': 403, 'user': 403, 'anonymous': 403
+ },
+ 'delete_viewset': {
+ 'owner': 204, 'manager': 204, 'author': 204, 'guest': 403, 'user': 403, 'anonymous': 403
+ }
+ }
+
+ def _test_list_viewset(self, username):
+ self.assert_list_viewset(username, query_params={
+ 'project': self.project_id
+ })
+
+ def _test_create_viewset(self, username):
+ for instance in self.instances:
+ self.assert_create_viewset(username, data=self.get_instance_as_dict(instance), query_params={
+ 'project': self.project_id
+ })
+
+ def _test_detail_viewset(self, username):
+ for instance in self.instances:
+ self.assert_detail_viewset(username, kwargs={
+ 'pk': instance.pk
+ }, query_params={
+ 'project': self.project_id
+ })
+
+ def _test_update_viewset(self, username):
+ for instance in self.instances:
+ self.assert_update_viewset(username, kwargs={
+ 'pk': instance.pk
+ }, data=self.get_instance_as_dict(instance), query_params={
+ 'project': self.project_id
+ })
+
+ def _test_delete_viewset(self, username):
+ for instance in self.instances:
+ self.assert_delete_viewset(username, kwargs={
+ 'pk': instance.pk
+ }, query_params={
+ 'project': self.project_id
+ })
+ instance.save(update_fields=None)
+
+
+class QuestionEntityTests(TestReadOnlyModelViewsetMixin, ProjectsViewsetTestCase):
+
+ instances = QuestionEntity.objects.filter(question__parent=None)
+
+ url_names = {
+ 'viewset': 'internal-projects:entity'
+ }
+
+ status_map = {
+ 'list_viewset': {
+ 'owner': 200, 'manager': 200, 'author': 200, 'guest': 200, 'user': 200, 'anonymous': 403
+ },
+ 'detail_viewset': {
+ 'owner': 200, 'manager': 200, 'author': 200, 'guest': 200, 'user': 200, 'anonymous': 403
+ }
+ }
+
+
+class CatalogTests(TestReadOnlyModelViewsetMixin, ProjectsViewsetTestCase):
+
+ instances = Catalog.objects.all()
+
+ url_names = {
+ 'viewset': 'internal-projects:catalog'
+ }
+
+ status_map = {
+ 'list_viewset': {
+ 'owner': 200, 'manager': 200, 'author': 200, 'guest': 200, 'user': 200, 'anonymous': 403
+ },
+ 'detail_viewset': {
+ 'owner': 200, 'manager': 200, 'author': 200, 'guest': 200, 'user': 200, 'anonymous': 403
+ }
+ }
diff --git a/apps/projects/urls.py b/rdmo/projects/urls.py
similarity index 100%
rename from apps/projects/urls.py
rename to rdmo/projects/urls.py
diff --git a/apps/projects/utils.py b/rdmo/projects/utils.py
similarity index 98%
rename from apps/projects/utils.py
rename to rdmo/projects/utils.py
index 9e6901253..a02bb9018 100644
--- a/apps/projects/utils.py
+++ b/rdmo/projects/utils.py
@@ -1,7 +1,7 @@
-from apps.core.utils import get_ns_tag
-from apps.domain.models import Attribute
-from apps.options.models import Option
-from apps.questions.utils import Catalog
+from rdmo.core.utils import get_ns_tag
+from rdmo.domain.models import Attribute
+from rdmo.options.models import Option
+from rdmo.questions.utils import Catalog
from .models import Project, Membership, Snapshot, Value
diff --git a/apps/projects/views.py b/rdmo/projects/views.py
similarity index 98%
rename from apps/projects/views.py
rename to rdmo/projects/views.py
index 203a4f9b0..0290f9fdb 100644
--- a/apps/projects/views.py
+++ b/rdmo/projects/views.py
@@ -10,10 +10,10 @@
from django.views.generic.detail import DetailView
from django.views.generic.edit import CreateView, UpdateView, DeleteView
-from apps.core.views import ObjectPermissionMixin, RedirectViewMixin
-from apps.core.utils import render_to_format
-from apps.tasks.models import Task
-from apps.views.models import View
+from rdmo.core.views import ObjectPermissionMixin, RedirectViewMixin
+from rdmo.core.utils import render_to_format
+from rdmo.tasks.models import Task
+from rdmo.views.models import View
from .models import Project, Membership, Snapshot
from .forms import ProjectForm, SnapshotCreateForm, MembershipCreateForm
diff --git a/apps/projects/viewsets.py b/rdmo/projects/viewsets.py
similarity index 97%
rename from apps/projects/viewsets.py
rename to rdmo/projects/viewsets.py
index 49abec6d1..b80d1efae 100644
--- a/apps/projects/viewsets.py
+++ b/rdmo/projects/viewsets.py
@@ -11,9 +11,9 @@
from rest_framework_extensions.cache.mixins import RetrieveCacheResponseMixin
-from apps.core.permissions import HasModelPermission, HasObjectPermission
-from apps.conditions.models import Condition
-from apps.questions.models import Catalog, QuestionEntity
+from rdmo.core.permissions import HasModelPermission, HasObjectPermission
+from rdmo.conditions.models import Condition
+from rdmo.questions.models import Catalog, QuestionEntity
from .models import Project, Snapshot, Value
diff --git a/rdmo/questions/__init__.py b/rdmo/questions/__init__.py
new file mode 100644
index 000000000..446ebe1b0
--- /dev/null
+++ b/rdmo/questions/__init__.py
@@ -0,0 +1 @@
+default_app_config = 'rdmo.questions.app_config.QuestionsConfig'
diff --git a/apps/questions/admin.py b/rdmo/questions/admin.py
similarity index 100%
rename from apps/questions/admin.py
rename to rdmo/questions/admin.py
diff --git a/apps/questions/app_config.py b/rdmo/questions/app_config.py
similarity index 85%
rename from apps/questions/app_config.py
rename to rdmo/questions/app_config.py
index a1b2dcd5c..bac13839e 100644
--- a/apps/questions/app_config.py
+++ b/rdmo/questions/app_config.py
@@ -3,5 +3,5 @@
class QuestionsConfig(AppConfig):
- name = 'apps.questions'
+ name = 'rdmo.questions'
verbose_name = _('Questions')
diff --git a/apps/questions/managers.py b/rdmo/questions/managers.py
similarity index 100%
rename from apps/questions/managers.py
rename to rdmo/questions/managers.py
diff --git a/apps/questions/migrations/0001_initial_after_reset.py b/rdmo/questions/migrations/0001_initial_after_reset.py
similarity index 95%
rename from apps/questions/migrations/0001_initial_after_reset.py
rename to rdmo/questions/migrations/0001_initial_after_reset.py
index 08786118b..e36679d6e 100644
--- a/apps/questions/migrations/0001_initial_after_reset.py
+++ b/rdmo/questions/migrations/0001_initial_after_reset.py
@@ -3,7 +3,7 @@
from django.db import models, migrations
import django.db.models.deletion
-import apps.core.models
+import rdmo.core.models
class Migration(migrations.Migration):
@@ -28,7 +28,7 @@ class Migration(migrations.Migration):
'verbose_name': 'Catalog',
'verbose_name_plural': 'Catalogs',
},
- bases=(models.Model, apps.core.models.TranslationMixin),
+ bases=(models.Model, rdmo.core.models.TranslationMixin),
),
migrations.CreateModel(
name='QuestionEntity',
@@ -45,7 +45,7 @@ class Migration(migrations.Migration):
'verbose_name': 'QuestionEntity',
'verbose_name_plural': 'QuestionEntities',
},
- bases=(models.Model, apps.core.models.TranslationMixin),
+ bases=(models.Model, rdmo.core.models.TranslationMixin),
),
migrations.CreateModel(
name='Section',
@@ -63,7 +63,7 @@ class Migration(migrations.Migration):
'verbose_name': 'Section',
'verbose_name_plural': 'Sections',
},
- bases=(models.Model, apps.core.models.TranslationMixin),
+ bases=(models.Model, rdmo.core.models.TranslationMixin),
),
migrations.CreateModel(
name='Subsection',
@@ -81,7 +81,7 @@ class Migration(migrations.Migration):
'verbose_name': 'Subsection',
'verbose_name_plural': 'Subsections',
},
- bases=(models.Model, apps.core.models.TranslationMixin),
+ bases=(models.Model, rdmo.core.models.TranslationMixin),
),
migrations.CreateModel(
name='Question',
diff --git a/apps/questions/migrations/0002_meta.py b/rdmo/questions/migrations/0002_meta.py
similarity index 100%
rename from apps/questions/migrations/0002_meta.py
rename to rdmo/questions/migrations/0002_meta.py
diff --git a/apps/questions/migrations/0003_renaming.py b/rdmo/questions/migrations/0003_renaming.py
similarity index 100%
rename from apps/questions/migrations/0003_renaming.py
rename to rdmo/questions/migrations/0003_renaming.py
diff --git a/apps/questions/migrations/0004_full_title.py b/rdmo/questions/migrations/0004_full_title.py
similarity index 100%
rename from apps/questions/migrations/0004_full_title.py
rename to rdmo/questions/migrations/0004_full_title.py
diff --git a/apps/questions/migrations/0005_label.py b/rdmo/questions/migrations/0005_label.py
similarity index 100%
rename from apps/questions/migrations/0005_label.py
rename to rdmo/questions/migrations/0005_label.py
diff --git a/apps/questions/migrations/0006_auto_20160803_1619.py b/rdmo/questions/migrations/0006_auto_20160803_1619.py
similarity index 100%
rename from apps/questions/migrations/0006_auto_20160803_1619.py
rename to rdmo/questions/migrations/0006_auto_20160803_1619.py
diff --git a/apps/questions/migrations/0007_refactoring.py b/rdmo/questions/migrations/0007_refactoring.py
similarity index 100%
rename from apps/questions/migrations/0007_refactoring.py
rename to rdmo/questions/migrations/0007_refactoring.py
diff --git a/apps/questions/migrations/0008_data_migration.py b/rdmo/questions/migrations/0008_data_migration.py
similarity index 100%
rename from apps/questions/migrations/0008_data_migration.py
rename to rdmo/questions/migrations/0008_data_migration.py
diff --git a/apps/questions/migrations/0009_meta.py b/rdmo/questions/migrations/0009_meta.py
similarity index 100%
rename from apps/questions/migrations/0009_meta.py
rename to rdmo/questions/migrations/0009_meta.py
diff --git a/apps/questions/migrations/0010_label.py b/rdmo/questions/migrations/0010_label.py
similarity index 100%
rename from apps/questions/migrations/0010_label.py
rename to rdmo/questions/migrations/0010_label.py
diff --git a/apps/questions/migrations/0011_path.py b/rdmo/questions/migrations/0011_path.py
similarity index 100%
rename from apps/questions/migrations/0011_path.py
rename to rdmo/questions/migrations/0011_path.py
diff --git a/apps/questions/migrations/0012_meta.py b/rdmo/questions/migrations/0012_meta.py
similarity index 100%
rename from apps/questions/migrations/0012_meta.py
rename to rdmo/questions/migrations/0012_meta.py
diff --git a/apps/questions/migrations/0013_permissions.py b/rdmo/questions/migrations/0013_permissions.py
similarity index 100%
rename from apps/questions/migrations/0013_permissions.py
rename to rdmo/questions/migrations/0013_permissions.py
diff --git a/apps/questions/migrations/0014_meta.py b/rdmo/questions/migrations/0014_meta.py
similarity index 100%
rename from apps/questions/migrations/0014_meta.py
rename to rdmo/questions/migrations/0014_meta.py
diff --git a/rdmo/questions/migrations/__init__.py b/rdmo/questions/migrations/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/apps/questions/models.py b/rdmo/questions/models.py
similarity index 98%
rename from apps/questions/models.py
rename to rdmo/questions/models.py
index c02571981..4da3c0736 100644
--- a/apps/questions/models.py
+++ b/rdmo/questions/models.py
@@ -5,9 +5,9 @@
from django.utils.encoding import python_2_unicode_compatible
from django.utils.translation import ugettext_lazy as _
-from apps.core.utils import get_uri_prefix
-from apps.core.models import Model, TranslationMixin
-from apps.domain.models import AttributeEntity
+from rdmo.core.utils import get_uri_prefix
+from rdmo.core.models import Model, TranslationMixin
+from rdmo.domain.models import AttributeEntity
from .managers import QuestionEntityManager
from .validators import (
diff --git a/apps/questions/renderers.py b/rdmo/questions/renderers.py
similarity index 98%
rename from apps/questions/renderers.py
rename to rdmo/questions/renderers.py
index 58c35d50f..8673c64bd 100644
--- a/apps/questions/renderers.py
+++ b/rdmo/questions/renderers.py
@@ -1,4 +1,4 @@
-from apps.core.renderers import BaseXMLRenderer
+from rdmo.core.renderers import BaseXMLRenderer
class XMLRenderer(BaseXMLRenderer):
diff --git a/apps/questions/serializers/__init__.py b/rdmo/questions/serializers/__init__.py
similarity index 98%
rename from apps/questions/serializers/__init__.py
rename to rdmo/questions/serializers/__init__.py
index 64ae2ec97..5bde0429d 100644
--- a/apps/questions/serializers/__init__.py
+++ b/rdmo/questions/serializers/__init__.py
@@ -1,6 +1,6 @@
from rest_framework import serializers
-from apps.domain.models import AttributeEntity, Attribute
+from rdmo.domain.models import AttributeEntity, Attribute
from ..models import Catalog, Section, Subsection, QuestionEntity, Question
from ..validators import (
diff --git a/apps/questions/serializers/api.py b/rdmo/questions/serializers/api.py
similarity index 100%
rename from apps/questions/serializers/api.py
rename to rdmo/questions/serializers/api.py
diff --git a/apps/questions/serializers/export.py b/rdmo/questions/serializers/export.py
similarity index 100%
rename from apps/questions/serializers/export.py
rename to rdmo/questions/serializers/export.py
diff --git a/apps/questions/serializers/nested.py b/rdmo/questions/serializers/nested.py
similarity index 95%
rename from apps/questions/serializers/nested.py
rename to rdmo/questions/serializers/nested.py
index fc86bb0f8..f79dced82 100644
--- a/apps/questions/serializers/nested.py
+++ b/rdmo/questions/serializers/nested.py
@@ -4,7 +4,7 @@
from rest_framework import serializers
from rest_framework.reverse import reverse
-from apps.domain.models import AttributeEntity
+from rdmo.domain.models import AttributeEntity
from ..models import Catalog, Section, Subsection, QuestionEntity, Question
@@ -139,6 +139,6 @@ def get_urls(self, obj):
urls = {
'xml': reverse('questions_catalog_export', args=[obj.pk, 'xml'])
}
- for format in settings.EXPORT_FORMATS:
- urls[format] = reverse('questions_catalog_export', args=[obj.pk, format])
+ for key, text in settings.EXPORT_FORMATS:
+ urls[key] = reverse('questions_catalog_export', args=[obj.pk, key])
return urls
diff --git a/apps/questions/static/questions/css/catalogs.scss b/rdmo/questions/static/questions/css/catalogs.scss
similarity index 100%
rename from apps/questions/static/questions/css/catalogs.scss
rename to rdmo/questions/static/questions/css/catalogs.scss
diff --git a/apps/questions/static/questions/js/catalogs.js b/rdmo/questions/static/questions/js/catalogs.js
similarity index 100%
rename from apps/questions/static/questions/js/catalogs.js
rename to rdmo/questions/static/questions/js/catalogs.js
diff --git a/apps/questions/templates/questions/catalog_export.html b/rdmo/questions/templates/questions/catalog_export.html
similarity index 100%
rename from apps/questions/templates/questions/catalog_export.html
rename to rdmo/questions/templates/questions/catalog_export.html
diff --git a/apps/questions/templates/questions/catalog_tree.html b/rdmo/questions/templates/questions/catalog_tree.html
similarity index 100%
rename from apps/questions/templates/questions/catalog_tree.html
rename to rdmo/questions/templates/questions/catalog_tree.html
diff --git a/apps/questions/templates/questions/catalogs.html b/rdmo/questions/templates/questions/catalogs.html
similarity index 96%
rename from apps/questions/templates/questions/catalogs.html
rename to rdmo/questions/templates/questions/catalogs.html
index 4f941f551..7bfa05f7d 100644
--- a/apps/questions/templates/questions/catalogs.html
+++ b/rdmo/questions/templates/questions/catalogs.html
@@ -2,20 +2,24 @@
{% load staticfiles %}
{% load compress %}
{% load i18n %}
+{% load core_tags %}
{% block head %}
+ {% vendor 'angular' %}
+ {% vendor 'moment' %}
+
{% compress css %}
{% endcompress %}
-
-
+ {% compress js %}
+ {% endcompress %}
{% endblock %}
{% block bodyattr %} ng-app="catalogs" ng-controller="CatalogsController"{% endblock %}
diff --git a/apps/questions/templates/questions/catalogs_modal_delete_catalogs.html b/rdmo/questions/templates/questions/catalogs_modal_delete_catalogs.html
similarity index 100%
rename from apps/questions/templates/questions/catalogs_modal_delete_catalogs.html
rename to rdmo/questions/templates/questions/catalogs_modal_delete_catalogs.html
diff --git a/apps/questions/templates/questions/catalogs_modal_delete_questions.html b/rdmo/questions/templates/questions/catalogs_modal_delete_questions.html
similarity index 100%
rename from apps/questions/templates/questions/catalogs_modal_delete_questions.html
rename to rdmo/questions/templates/questions/catalogs_modal_delete_questions.html
diff --git a/apps/questions/templates/questions/catalogs_modal_delete_questionsets.html b/rdmo/questions/templates/questions/catalogs_modal_delete_questionsets.html
similarity index 100%
rename from apps/questions/templates/questions/catalogs_modal_delete_questionsets.html
rename to rdmo/questions/templates/questions/catalogs_modal_delete_questionsets.html
diff --git a/apps/questions/templates/questions/catalogs_modal_delete_sections.html b/rdmo/questions/templates/questions/catalogs_modal_delete_sections.html
similarity index 100%
rename from apps/questions/templates/questions/catalogs_modal_delete_sections.html
rename to rdmo/questions/templates/questions/catalogs_modal_delete_sections.html
diff --git a/apps/questions/templates/questions/catalogs_modal_delete_subsections.html b/rdmo/questions/templates/questions/catalogs_modal_delete_subsections.html
similarity index 100%
rename from apps/questions/templates/questions/catalogs_modal_delete_subsections.html
rename to rdmo/questions/templates/questions/catalogs_modal_delete_subsections.html
diff --git a/apps/questions/templates/questions/catalogs_modal_form_catalogs.html b/rdmo/questions/templates/questions/catalogs_modal_form_catalogs.html
similarity index 100%
rename from apps/questions/templates/questions/catalogs_modal_form_catalogs.html
rename to rdmo/questions/templates/questions/catalogs_modal_form_catalogs.html
diff --git a/apps/questions/templates/questions/catalogs_modal_form_questions.html b/rdmo/questions/templates/questions/catalogs_modal_form_questions.html
similarity index 100%
rename from apps/questions/templates/questions/catalogs_modal_form_questions.html
rename to rdmo/questions/templates/questions/catalogs_modal_form_questions.html
diff --git a/apps/questions/templates/questions/catalogs_modal_form_questionsets.html b/rdmo/questions/templates/questions/catalogs_modal_form_questionsets.html
similarity index 100%
rename from apps/questions/templates/questions/catalogs_modal_form_questionsets.html
rename to rdmo/questions/templates/questions/catalogs_modal_form_questionsets.html
diff --git a/apps/questions/templates/questions/catalogs_modal_form_sections.html b/rdmo/questions/templates/questions/catalogs_modal_form_sections.html
similarity index 100%
rename from apps/questions/templates/questions/catalogs_modal_form_sections.html
rename to rdmo/questions/templates/questions/catalogs_modal_form_sections.html
diff --git a/apps/questions/templates/questions/catalogs_modal_form_subsections.html b/rdmo/questions/templates/questions/catalogs_modal_form_subsections.html
similarity index 100%
rename from apps/questions/templates/questions/catalogs_modal_form_subsections.html
rename to rdmo/questions/templates/questions/catalogs_modal_form_subsections.html
diff --git a/apps/questions/templates/questions/catalogs_options_questions.html b/rdmo/questions/templates/questions/catalogs_options_questions.html
similarity index 100%
rename from apps/questions/templates/questions/catalogs_options_questions.html
rename to rdmo/questions/templates/questions/catalogs_options_questions.html
diff --git a/apps/questions/templates/questions/catalogs_options_questionsets.html b/rdmo/questions/templates/questions/catalogs_options_questionsets.html
similarity index 100%
rename from apps/questions/templates/questions/catalogs_options_questionsets.html
rename to rdmo/questions/templates/questions/catalogs_options_questionsets.html
diff --git a/apps/questions/templates/questions/catalogs_options_sections.html b/rdmo/questions/templates/questions/catalogs_options_sections.html
similarity index 100%
rename from apps/questions/templates/questions/catalogs_options_sections.html
rename to rdmo/questions/templates/questions/catalogs_options_sections.html
diff --git a/apps/questions/templates/questions/catalogs_options_subsections.html b/rdmo/questions/templates/questions/catalogs_options_subsections.html
similarity index 100%
rename from apps/questions/templates/questions/catalogs_options_subsections.html
rename to rdmo/questions/templates/questions/catalogs_options_subsections.html
diff --git a/apps/questions/templates/questions/catalogs_sidebar.html b/rdmo/questions/templates/questions/catalogs_sidebar.html
similarity index 97%
rename from apps/questions/templates/questions/catalogs_sidebar.html
rename to rdmo/questions/templates/questions/catalogs_sidebar.html
index 3f00de3b0..a6a5dc5f1 100644
--- a/apps/questions/templates/questions/catalogs_sidebar.html
+++ b/rdmo/questions/templates/questions/catalogs_sidebar.html
@@ -63,7 +63,7 @@ {% trans 'Options' %}
{% trans 'Export' %}
- {% for format, text in export_formats.items %}
+ {% for format, text in export_formats %}
-
{{ text }}
diff --git a/rdmo/questions/tests/__init__.py b/rdmo/questions/tests/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/rdmo/questions/tests/test_views.py b/rdmo/questions/tests/test_views.py
new file mode 100644
index 000000000..cff379ef2
--- /dev/null
+++ b/rdmo/questions/tests/test_views.py
@@ -0,0 +1,92 @@
+from django.core.urlresolvers import reverse
+from django.test import TestCase
+
+from test_generator.views import TestListViewMixin
+
+from rdmo.core.testing.mixins import TestImportViewMixin
+from rdmo.accounts.utils import set_group_permissions
+
+from ..models import Catalog
+
+
+class QuestionsViewTestCase(TestCase):
+
+ fixtures = (
+ 'users.json',
+ 'groups.json',
+ 'accounts.json',
+ 'conditions.json',
+ 'domain.json',
+ 'options.json',
+ 'questions.json',
+ )
+
+ users = (
+ ('editor', 'editor'),
+ ('reviewer', 'reviewer'),
+ ('user', 'user'),
+ ('api', 'api'),
+ ('anonymous', None),
+ )
+
+ status_map = {
+ 'list_view': {
+ 'editor': 200, 'reviewer': 200, 'api': 200, 'user': 403, 'anonymous': 302
+ },
+ 'export_view': {
+ 'editor': 200, 'reviewer': 200, 'api': 200, 'user': 403, 'anonymous': 302
+ }
+ }
+
+ @classmethod
+ def setUpTestData(cls):
+ set_group_permissions()
+
+
+class QuestionsTests(TestListViewMixin, QuestionsViewTestCase):
+
+ url_names = {
+ 'list_view': 'catalogs'
+ }
+
+
+class CatalogExportTests(QuestionsViewTestCase):
+
+ instances = Catalog.objects.all()
+ url_names = {
+ 'export_view': 'questions_catalog_export'
+ }
+ export_formats = ('xml', 'html', 'rtf')
+
+ def _test_export_detail(self, username, password):
+
+ if password:
+ self.client.login(username=username, password=password)
+
+ for instance in self.instances:
+ for format in self.export_formats:
+ url = reverse(self.url_names['export_view'], kwargs={
+ 'pk': instance.pk,
+ 'format': format
+ })
+ response = self.client.get(url)
+
+ try:
+ self.assertEqual(response.status_code, self.status_map['export_view'][username])
+ except AssertionError:
+ print(
+ ('test', 'test_export'),
+ ('username', username),
+ ('url', url),
+ ('format', format),
+ ('status_code', response.status_code),
+ ('content', response.content)
+ )
+ raise
+
+ self.client.logout()
+
+
+class CatalogImportTests(TestImportViewMixin, QuestionsViewTestCase):
+
+ import_file = 'testing/xml/catalog.xml'
diff --git a/rdmo/questions/tests/test_viewsets.py b/rdmo/questions/tests/test_viewsets.py
new file mode 100644
index 000000000..019dc3fb3
--- /dev/null
+++ b/rdmo/questions/tests/test_viewsets.py
@@ -0,0 +1,175 @@
+from django.test import TestCase
+
+from test_generator.viewsets import (
+ TestModelViewsetMixin,
+ TestListViewsetMixin,
+ TestReadOnlyModelViewsetMixin
+)
+
+from rdmo.core.testing.mixins import TestImportViewMixin
+from rdmo.accounts.utils import set_group_permissions
+
+from ..models import Catalog, Section, Subsection, QuestionEntity, Question
+
+
+class QuestionsViewsetTestCase(TestCase):
+
+ fixtures = (
+ 'users.json',
+ 'groups.json',
+ 'accounts.json',
+ 'conditions.json',
+ 'domain.json',
+ 'options.json',
+ 'questions.json',
+ )
+
+ users = (
+ ('editor', 'editor'),
+ ('reviewer', 'reviewer'),
+ ('user', 'user'),
+ ('api', 'api'),
+ ('anonymous', None),
+ )
+
+ status_map = {
+ 'list_viewset': {
+ 'editor': 200, 'reviewer': 200, 'api': 200, 'user': 403, 'anonymous': 403
+ },
+ 'detail_viewset': {
+ 'editor': 200, 'reviewer': 200, 'api': 200, 'user': 403, 'anonymous': 403
+ },
+ 'create_viewset': {
+ 'editor': 201, 'reviewer': 403, 'api': 403, 'user': 403, 'anonymous': 403
+ },
+ 'update_viewset': {
+ 'editor': 200, 'reviewer': 403, 'api': 403, 'user': 403, 'anonymous': 403
+ },
+ 'delete_viewset': {
+ 'editor': 204, 'reviewer': 403, 'api': 403, 'user': 403, 'anonymous': 403
+ }
+ }
+
+ @classmethod
+ def setUpTestData(cls):
+ set_group_permissions()
+
+
+class CatalogTests(TestModelViewsetMixin, QuestionsViewsetTestCase):
+
+ instances = Catalog.objects.all()
+ url_names = {
+ 'viewset': 'internal-questions:catalog'
+ }
+
+ def _test_create_viewset(self, username):
+ for instance in self.instances:
+ instance.key += '_new'
+ self.assert_create_viewset(username, data=self.get_instance_as_dict(instance))
+
+
+class SectionTests(TestModelViewsetMixin, QuestionsViewsetTestCase):
+
+ instances = Section.objects.all()
+ url_names = {
+ 'viewset': 'internal-questions:section'
+ }
+
+ def _test_create_viewset(self, username):
+ for instance in self.instances:
+ instance.key += '_new'
+ self.assert_create_viewset(username, data=self.get_instance_as_dict(instance))
+
+
+class SubsectionTests(TestModelViewsetMixin, QuestionsViewsetTestCase):
+
+ instances = Subsection.objects.all()
+ url_names = {
+ 'viewset': 'internal-questions:subsection'
+ }
+
+ def _test_create_viewset(self, username):
+ for instance in self.instances:
+ instance.key += '_new'
+ self.assert_create_viewset(username, data=self.get_instance_as_dict(instance))
+
+
+class QuestionSetTests(TestModelViewsetMixin, QuestionsViewsetTestCase):
+
+ instances = QuestionEntity.objects.filter(question=None)
+ url_names = {
+ 'viewset': 'internal-questions:questionset'
+ }
+
+ def _test_create_viewset(self, username):
+ for instance in self.instances:
+ instance.key += '_new'
+ self.assert_create_viewset(username, data=self.get_instance_as_dict(instance))
+
+
+class QuestionTests(TestModelViewsetMixin, QuestionsViewsetTestCase):
+
+ instances = Question.objects.all()
+ url_names = {
+ 'viewset': 'internal-questions:question'
+ }
+
+ def _test_create_viewset(self, username):
+ for instance in self.instances:
+ instance.key += '_new'
+ self.assert_create_viewset(username, data=self.get_instance_as_dict(instance))
+
+
+class WidgetTypeTests(TestListViewsetMixin, QuestionsViewsetTestCase):
+
+ url_names = {
+ 'viewset': 'internal-questions:widgettype'
+ }
+ status_map = {
+ 'list_viewset': {'editor': 200, 'reviewer': 200, 'api': 200, 'user': 200, 'anonymous': 403}
+ }
+
+
+class CatalogImportTests(TestImportViewMixin, TestCase):
+
+ import_file = 'testing/xml/catalog.xml'
+
+
+class CatalogAPITests(TestReadOnlyModelViewsetMixin, QuestionsViewsetTestCase):
+
+ instances = Catalog.objects.all()
+ url_names = {
+ 'viewset': 'api-v1-questions:catalog'
+ }
+
+
+class SectionAPITests(TestReadOnlyModelViewsetMixin, QuestionsViewsetTestCase):
+
+ instances = Section.objects.all()
+ url_names = {
+ 'viewset': 'api-v1-questions:section'
+ }
+
+
+class SubsectionAPITests(TestReadOnlyModelViewsetMixin, QuestionsViewsetTestCase):
+
+ instances = Subsection.objects.all()
+ url_names = {
+ 'viewset': 'api-v1-questions:subsection'
+ }
+
+
+class QuestionSetAPITests(TestReadOnlyModelViewsetMixin, QuestionsViewsetTestCase):
+
+ instances = QuestionEntity.objects.filter(question=None)
+ url_names = {
+ 'viewset': 'api-v1-questions:questionset'
+ }
+
+
+class QuestionAPITests(TestReadOnlyModelViewsetMixin, QuestionsViewsetTestCase):
+
+ instances = Question.objects.all()
+ url_names = {
+ 'viewset': 'api-v1-questions:question'
+ }
diff --git a/apps/questions/urls.py b/rdmo/questions/urls.py
similarity index 100%
rename from apps/questions/urls.py
rename to rdmo/questions/urls.py
diff --git a/apps/questions/utils.py b/rdmo/questions/utils.py
similarity index 98%
rename from apps/questions/utils.py
rename to rdmo/questions/utils.py
index 8655896fa..7fda9b5ed 100644
--- a/apps/questions/utils.py
+++ b/rdmo/questions/utils.py
@@ -1,5 +1,5 @@
-from apps.core.utils import get_ns_tag
-from apps.domain.models import AttributeEntity
+from rdmo.core.utils import get_ns_tag
+from rdmo.domain.models import AttributeEntity
from .models import Catalog, Section, Subsection, QuestionEntity, Question
diff --git a/apps/questions/validators.py b/rdmo/questions/validators.py
similarity index 94%
rename from apps/questions/validators.py
rename to rdmo/questions/validators.py
index fec36a71f..c7fd97871 100644
--- a/apps/questions/validators.py
+++ b/rdmo/questions/validators.py
@@ -1,4 +1,4 @@
-from apps.core.validators import UniqueKeyValidator, UniquePathValidator
+from rdmo.core.validators import UniqueKeyValidator, UniquePathValidator
class CatalogUniqueKeyValidator(UniqueKeyValidator):
diff --git a/apps/questions/views.py b/rdmo/questions/views.py
similarity index 93%
rename from apps/questions/views.py
rename to rdmo/questions/views.py
index 573a6c105..4cddf35de 100644
--- a/apps/questions/views.py
+++ b/rdmo/questions/views.py
@@ -2,8 +2,8 @@
from django.http import HttpResponse
from django.views.generic import TemplateView, DetailView
-from apps.core.views import ModelPermissionMixin
-from apps.core.utils import get_model_field_meta, render_to_format
+from rdmo.core.views import ModelPermissionMixin
+from rdmo.core.utils import get_model_field_meta, render_to_format
from .models import Catalog, Section, Subsection, Question
from .serializers.export import CatalogSerializer as ExportSerializer
diff --git a/apps/questions/viewsets.py b/rdmo/questions/viewsets.py
similarity index 97%
rename from apps/questions/viewsets.py
rename to rdmo/questions/viewsets.py
index 818cfa520..4e1580eea 100644
--- a/apps/questions/viewsets.py
+++ b/rdmo/questions/viewsets.py
@@ -7,10 +7,10 @@
from rest_framework.response import Response
from rest_framework.authentication import SessionAuthentication, TokenAuthentication
-from apps.core.views import ChoicesViewSet
-from apps.core.permissions import HasModelPermission
+from rdmo.core.views import ChoicesViewSet
+from rdmo.core.permissions import HasModelPermission
-from apps.domain.models import AttributeEntity, Attribute
+from rdmo.domain.models import AttributeEntity, Attribute
from .models import Catalog, Section, Subsection, QuestionEntity, Question
from .serializers import (
diff --git a/rdmo/settings/__init__.py b/rdmo/settings/__init__.py
deleted file mode 100644
index 9b5ed21c9..000000000
--- a/rdmo/settings/__init__.py
+++ /dev/null
@@ -1 +0,0 @@
-from .base import *
diff --git a/rdmo/settings/sample.local.py b/rdmo/settings/sample.local.py
deleted file mode 100644
index b909daacd..000000000
--- a/rdmo/settings/sample.local.py
+++ /dev/null
@@ -1,180 +0,0 @@
-import os
-from .base import BASE_DIR, INSTALLED_APPS, AUTHENTICATION_BACKENDS, MIDDLEWARE_CLASSES
-
-'''
-Debug mode, don't use this in production
-'''
-DEBUG = True
-
-'''
-Secret key, use something random in production
-'''
-# SECRET_KEY = 'this is not a very secret key'
-
-'''
-The list of URLs und which this application available
-'''
-ALLOWED_HOSTS = ['localhost']
-
-'''
-Base URL Path to this application, i.e. /path for http://exaple.com/path/
-'''
-# BASE_URL = '/path'
-
-'''
-The main language of this application.
-'''
-# LANGUAGE_CODE = 'en-us'
-
-'''
-The timezone this application.
-'''
-# TIME_ZONE = 'Europe/Berlin'
-
-'''
-The database connection to be used, see also:
-http://rdmo.readthedocs.io/en/latest/configuration/databases.html
-'''
-
-# DATABASES = {
-# 'default': {
-# 'ENGINE': 'django.db.backends.postgresql_psycopg2',
-# 'NAME': '',
-# 'USER': '',
-# 'PASSWORD': '',
-# 'HOST': '',
-# 'PORT': '',
-# }
-# }
-
-# DATABASES = {
-# 'default': {
-# 'ENGINE': 'django.db.backends.mysql',
-# 'NAME': '',
-# 'USER': '',
-# 'PASSWORD': '',
-# 'HOST': '',
-# 'PORT': '',
-# }
-# }
-
-# DATABASES = {
-# 'default': {
-# 'ENGINE': 'django.db.backends.sqlite3',
-# 'NAME': '',
-# }
-# }
-
-'''
-E-Mail configuration, see also:
-http://rdmo.readthedocs.io/en/latest/configuration/email.html
-'''
-
-# EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
-# EMAIL_HOST = 'localhost'
-# EMAIL_PORT = '25'
-# EMAIL_HOST_USER = ''
-# EMAIL_HOST_PASSWORD = ''
-# EMAIL_USE_TLS = False
-# EMAIL_USE_SSL = False
-# DEFAULT_FROM_EMAIL = ''
-
-'''
-Allauth configuration, see also:
-http://rdmo.readthedocs.io/en/latest/configuration/authentication/allauth.html
-'''
-
-# ACCOUNT = True
-# ACCOUNT_SIGNUP = True
-# SOCIALACCOUNT = False
-#
-# INSTALLED_APPS += [
-# 'allauth',
-# 'allauth.account',
-# 'allauth.socialaccount'
-# 'allauth.socialaccount.providers.facebook',
-# 'allauth.socialaccount.providers.github',
-# 'allauth.socialaccount.providers.google',
-# 'allauth.socialaccount.providers.orcid',
-# 'allauth.socialaccount.providers.twitter',
-# ]
-#
-# AUTHENTICATION_BACKENDS.append('allauth.account.auth_backends.AuthenticationBackend')
-
-'''
-LDAP, see also:
-http://rdmo.readthedocs.io/en/latest/configuration/authentication/ldap.html
-'''
-
-# PROFILE_UPDATE = False
-#
-# import ldap
-# from django_auth_ldap.config import LDAPSearch
-#
-# AUTH_LDAP_SERVER_URI = "ldap://ldap.example.com"
-# AUTH_LDAP_BIND_DN = "cn=admin,dc=ldap,dc=example,dc=com"
-# AUTH_LDAP_BIND_PASSWORD = "admin"
-# AUTH_LDAP_USER_SEARCH = LDAPSearch("dc=ldap,dc=example,dc=com", ldap.SCOPE_SUBTREE, "(uid=%(user)s)")
-#
-# AUTH_LDAP_USER_ATTR_MAP = {
-# "first_name": "givenName",
-# "last_name": "sn",
-# 'email': 'mail'
-# }
-#
-# AUTHENTICATION_BACKENDS.insert(
-# AUTHENTICATION_BACKENDS.index('django.contrib.auth.backends.ModelBackend'),
-# 'django_auth_ldap.backend.LDAPBackend'
-# )
-
-'''
-Shibboleth, see also:
-http://rdmo.readthedocs.io/en/latest/configuration/authentication/shibboleth.html
-'''
-
-# SHIBBOLETH = True
-# PROFILE_UPDATE = False
-#
-# INSTALLED_APPS += ['shibboleth']
-#
-# SHIBBOLETH_ATTRIBUTE_MAP = {
-# 'uid': (True, 'username'),
-# 'givenName': (True, 'first_name'),
-# 'sn': (True, 'last_name'),
-# 'mail': (True, 'email'),
-# }
-#
-# AUTHENTICATION_BACKENDS.append('shibboleth.backends.ShibbolethRemoteUserBackend')
-#
-# MIDDLEWARE_CLASSES.insert(
-# MIDDLEWARE_CLASSES.index('django.contrib.auth.middleware.AuthenticationMiddleware') + 1,
-# 'shibboleth.middleware.ShibbolethRemoteUserMiddleware'
-# )
-#
-# LOGIN_URL = '/Shibboleth.sso/Login?target=/projects'
-# LOGOUT_URL = '/Shibboleth.sso/Logout'
-
-'''
-Theme, see also:
-http://rdmo.readthedocs.io/en/latest/configuration/themes.html
-'''
-
-# THEME_DIR = os.path.join(BASE_DIR, 'theme')
-
-'''
-Cache, see also:
-http://rdmo.readthedocs.io/en/latest/configuration/cache.html
-'''
-
-# CACHES = {
-# 'default': {
-# 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
-# 'LOCATION': '127.0.0.1:11211',
-# 'KEY_PREFIX': 'rdmo_default'
-# },
-# 'api': {
-# 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
-# 'LOCATION': '127.0.0.1:11211',
-# 'KEY_PREFIX': 'rdmo_api'
-# },
-# }
diff --git a/rdmo/tasks/__init__.py b/rdmo/tasks/__init__.py
new file mode 100644
index 000000000..616538ff7
--- /dev/null
+++ b/rdmo/tasks/__init__.py
@@ -0,0 +1 @@
+default_app_config = 'rdmo.tasks.app_config.TasksConfig'
diff --git a/apps/tasks/admin.py b/rdmo/tasks/admin.py
similarity index 100%
rename from apps/tasks/admin.py
rename to rdmo/tasks/admin.py
diff --git a/apps/tasks/app_config.py b/rdmo/tasks/app_config.py
similarity index 86%
rename from apps/tasks/app_config.py
rename to rdmo/tasks/app_config.py
index 12ab832f5..a46ee4b70 100644
--- a/apps/tasks/app_config.py
+++ b/rdmo/tasks/app_config.py
@@ -3,5 +3,5 @@
class TasksConfig(AppConfig):
- name = 'apps.tasks'
+ name = 'rdmo.tasks'
verbose_name = _('Tasks')
diff --git a/apps/tasks/managers.py b/rdmo/tasks/managers.py
similarity index 100%
rename from apps/tasks/managers.py
rename to rdmo/tasks/managers.py
diff --git a/apps/tasks/migrations/0001_initial.py b/rdmo/tasks/migrations/0001_initial.py
similarity index 93%
rename from apps/tasks/migrations/0001_initial.py
rename to rdmo/tasks/migrations/0001_initial.py
index 2cea2a982..471ec38a6 100644
--- a/apps/tasks/migrations/0001_initial.py
+++ b/rdmo/tasks/migrations/0001_initial.py
@@ -2,7 +2,7 @@
# Generated by Django 1.9 on 2016-07-18 11:25
from __future__ import unicode_literals
-import apps.core.models
+import rdmo.core.models
from django.db import migrations, models
import django.db.models.deletion
@@ -32,6 +32,6 @@ class Migration(migrations.Migration):
'verbose_name': 'Task',
'verbose_name_plural': 'Tasks',
},
- bases=(apps.core.models.TranslationMixin, models.Model),
+ bases=(rdmo.core.models.TranslationMixin, models.Model),
),
]
diff --git a/apps/tasks/migrations/0002_many_to_many_for_conditions.py b/rdmo/tasks/migrations/0002_many_to_many_for_conditions.py
similarity index 100%
rename from apps/tasks/migrations/0002_many_to_many_for_conditions.py
rename to rdmo/tasks/migrations/0002_many_to_many_for_conditions.py
diff --git a/apps/tasks/migrations/0003_meta.py b/rdmo/tasks/migrations/0003_meta.py
similarity index 100%
rename from apps/tasks/migrations/0003_meta.py
rename to rdmo/tasks/migrations/0003_meta.py
diff --git a/apps/tasks/migrations/0004_refactoring.py b/rdmo/tasks/migrations/0004_refactoring.py
similarity index 100%
rename from apps/tasks/migrations/0004_refactoring.py
rename to rdmo/tasks/migrations/0004_refactoring.py
diff --git a/apps/tasks/migrations/0005_data_migration.py b/rdmo/tasks/migrations/0005_data_migration.py
similarity index 100%
rename from apps/tasks/migrations/0005_data_migration.py
rename to rdmo/tasks/migrations/0005_data_migration.py
diff --git a/apps/tasks/migrations/0006_meta.py b/rdmo/tasks/migrations/0006_meta.py
similarity index 100%
rename from apps/tasks/migrations/0006_meta.py
rename to rdmo/tasks/migrations/0006_meta.py
diff --git a/apps/tasks/migrations/0007_permissions.py b/rdmo/tasks/migrations/0007_permissions.py
similarity index 100%
rename from apps/tasks/migrations/0007_permissions.py
rename to rdmo/tasks/migrations/0007_permissions.py
diff --git a/apps/tasks/migrations/0008_remove_time_period.py b/rdmo/tasks/migrations/0008_remove_time_period.py
similarity index 100%
rename from apps/tasks/migrations/0008_remove_time_period.py
rename to rdmo/tasks/migrations/0008_remove_time_period.py
diff --git a/apps/tasks/migrations/0009_timeframe.py b/rdmo/tasks/migrations/0009_timeframe.py
similarity index 100%
rename from apps/tasks/migrations/0009_timeframe.py
rename to rdmo/tasks/migrations/0009_timeframe.py
diff --git a/apps/tasks/migrations/0010_meta.py b/rdmo/tasks/migrations/0010_meta.py
similarity index 100%
rename from apps/tasks/migrations/0010_meta.py
rename to rdmo/tasks/migrations/0010_meta.py
diff --git a/apps/tasks/migrations/0011_task_text.py b/rdmo/tasks/migrations/0011_task_text.py
similarity index 100%
rename from apps/tasks/migrations/0011_task_text.py
rename to rdmo/tasks/migrations/0011_task_text.py
diff --git a/rdmo/tasks/migrations/__init__.py b/rdmo/tasks/migrations/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/apps/tasks/models.py b/rdmo/tasks/models.py
similarity index 96%
rename from apps/tasks/models.py
rename to rdmo/tasks/models.py
index dc21e6ae8..dc6d5352e 100644
--- a/apps/tasks/models.py
+++ b/rdmo/tasks/models.py
@@ -11,11 +11,11 @@
from django.utils.encoding import python_2_unicode_compatible
from django.utils.translation import ugettext_lazy as _
-from apps.core.utils import get_uri_prefix
-from apps.core.models import TranslationMixin
-from apps.domain.models import Attribute
-from apps.conditions.models import Condition
-from apps.projects.models import Value
+from rdmo.core.utils import get_uri_prefix
+from rdmo.core.models import TranslationMixin
+from rdmo.domain.models import Attribute
+from rdmo.conditions.models import Condition
+from rdmo.projects.models import Value
from .managers import TaskManager
from .validators import TaskUniqueKeyValidator
diff --git a/apps/tasks/renderers.py b/rdmo/tasks/renderers.py
similarity index 97%
rename from apps/tasks/renderers.py
rename to rdmo/tasks/renderers.py
index e518ceb1e..ba291c25e 100644
--- a/apps/tasks/renderers.py
+++ b/rdmo/tasks/renderers.py
@@ -1,4 +1,4 @@
-from apps.core.renderers import BaseXMLRenderer
+from rdmo.core.renderers import BaseXMLRenderer
class XMLRenderer(BaseXMLRenderer):
diff --git a/apps/tasks/serializers/__init__.py b/rdmo/tasks/serializers/__init__.py
similarity index 93%
rename from apps/tasks/serializers/__init__.py
rename to rdmo/tasks/serializers/__init__.py
index 58b6fb2fa..9683d8bf6 100644
--- a/apps/tasks/serializers/__init__.py
+++ b/rdmo/tasks/serializers/__init__.py
@@ -1,7 +1,7 @@
from rest_framework import serializers
-from apps.domain.models import Attribute
-from apps.conditions.models import Condition
+from rdmo.domain.models import Attribute
+from rdmo.conditions.models import Condition
from ..models import Task, TimeFrame
from ..validators import TaskUniqueKeyValidator
diff --git a/apps/tasks/serializers/api.py b/rdmo/tasks/serializers/api.py
similarity index 91%
rename from apps/tasks/serializers/api.py
rename to rdmo/tasks/serializers/api.py
index d34b0ca21..2eb322cda 100644
--- a/apps/tasks/serializers/api.py
+++ b/rdmo/tasks/serializers/api.py
@@ -1,8 +1,8 @@
from rest_framework import serializers
-from apps.domain.models import Attribute
-from apps.conditions.models import Condition
+from rdmo.domain.models import Attribute
+from rdmo.conditions.models import Condition
from ..models import Task, TimeFrame
from ..validators import TaskUniqueKeyValidator
diff --git a/apps/tasks/serializers/export.py b/rdmo/tasks/serializers/export.py
similarity index 100%
rename from apps/tasks/serializers/export.py
rename to rdmo/tasks/serializers/export.py
diff --git a/rdmo/tasks/static/tasks/css/tasks.scss b/rdmo/tasks/static/tasks/css/tasks.scss
new file mode 100644
index 000000000..e69de29bb
diff --git a/apps/tasks/static/tasks/js/tasks.js b/rdmo/tasks/static/tasks/js/tasks.js
similarity index 100%
rename from apps/tasks/static/tasks/js/tasks.js
rename to rdmo/tasks/static/tasks/js/tasks.js
diff --git a/apps/tasks/templates/tasks/tasks.html b/rdmo/tasks/templates/tasks/tasks.html
similarity index 93%
rename from apps/tasks/templates/tasks/tasks.html
rename to rdmo/tasks/templates/tasks/tasks.html
index 4bd8ac712..4ab3fc792 100644
--- a/apps/tasks/templates/tasks/tasks.html
+++ b/rdmo/tasks/templates/tasks/tasks.html
@@ -2,18 +2,22 @@
{% load staticfiles %}
{% load compress %}
{% load i18n %}
+{% load core_tags %}
{% block head %}
+ {% vendor 'angular' %}
+ {% vendor 'codemirror' %}
+
{% compress css %}
{% endcompress %}
-
-
+ {% compress js %}
+ {% endcompress %}
{% endblock %}
{% block bodyattr %} ng-app="tasks" ng-controller="TasksController" {% endblock %}
@@ -44,7 +48,7 @@
{% trans 'Options' %}
{% trans 'Export' %}