From 7089e79bd820146b433c76455e9fc18dc6996f4b Mon Sep 17 00:00:00 2001 From: Fredrik Jonsson <frjo@xdeb.org> Date: Fri, 24 Aug 2018 12:03:42 +0200 Subject: [PATCH] Added migrations of concept notes and proposals. --- .../commands/migrate_concept_notes.py | 168 +++++++++++++++++ .../migrate_fellowship_application.py | 11 +- .../management/commands/migrate_proposals.py | 170 ++++++++++++++++++ .../commands/migrate_rr_applications.py | 18 +- .../management/commands/migration_base.py | 19 +- 5 files changed, 360 insertions(+), 26 deletions(-) create mode 100644 opentech/apply/funds/management/commands/migrate_concept_notes.py create mode 100644 opentech/apply/funds/management/commands/migrate_proposals.py diff --git a/opentech/apply/funds/management/commands/migrate_concept_notes.py b/opentech/apply/funds/management/commands/migrate_concept_notes.py new file mode 100644 index 000000000..681d7b2bc --- /dev/null +++ b/opentech/apply/funds/management/commands/migrate_concept_notes.py @@ -0,0 +1,168 @@ +from opentech.apply.funds.management.commands.migration_base import MigrateCommand + + +class Command(MigrateCommand): + CONTENT_TYPE = "fund" + FUND_NAME = "Internet Freedom Fund" + ROUND_NAME = "Internet Freedom Fund" + APPLICATION_TYPE = "concept" + + STREAMFIELD_MAP = { + "title": { + "id": "title", + "type": "direct", + }, + "field_concept_name": { + "id": "full_name", + "type": "value", + "key": "safe_value", + }, + "field_concept_mail": { + "id": "email", + "type": "value", + "key": "email", + }, + "field_concept_preapplied": { + "id": "0305a465-8763-4c1f-9197-4ca4227d452a", + "type": "map", + "map": { + "0": "No", + "1": "Yes", + }, + }, + "field_concept_preapplied_how": { + "id": "c24691be-9861-4dbc-8be4-03b6e68c1973", + "type": "value", + "key": "safe_value", + }, + "field_concept_description": { + "id": "c21c58c3-cfbe-4409-b2f2-8f56398f1731", + "type": "value", + "key": "safe_value", + }, + "field_concept_outcome": { + "id": "27289c14-6926-4f61-bea2-8031a653f71c", + "type": "value", + "key": "safe_value", + }, + "field_type": { + "id": "404e2310-000b-4ccb-b772-3680946ff07d", + "type": "category", + "key": "tid", + }, + "field_proposal_status": { + "id": "145c364f-e0bb-4652-94e8-fe08c831da2b", + "type": "category", + "key": "tid", + }, + "field_technology_attribute": { + "id": "b4da2310-9654-4aa7-a04a-06335967ddc5", + "type": "category", + "key": "tid", + }, + "field_concept_how": { + "id": "418b8099-4525-437f-a55c-9b35745d0384", + "type": "value", + "key": "safe_value", + }, + "field_proposal_focus": { + "id": "390702bd-e4e1-4dc2-8c43-d51bf018b427", + "type": "category", + "key": "tid", + }, + "field_concept_time": { + "id": "duration", + "type": "value", + }, + "field_concept_amount": { + "id": "value", + "type": "value", + }, + "field_concept_how_long": { + "id": "dfb9c307-9328-4a99-9efc-321d474b2ba7", + "type": "value", + "key": "safe_value", + }, + "field_concept_who": { + "id": "11f94a22-0571-4491-a93e-87c050e02a4a", + "type": "value", + "key": "safe_value", + }, + "field_concept_community": { + "id": "c272969b-d89f-4b6e-859f-4606a15b3f28", + "type": "value", + "key": "safe_value", + }, + "field_proposal_beneficiaries": { + "id": "72002c3e-aaee-47da-9377-8bb493f14c21", + "type": "category", + "key": "tid", + }, + "field_term_region": { + "id": "369b248e-f669-4aeb-b771-7cba0eadb921", + "type": "category", + "key": "tid", + }, + "field_term_country": { + "id": "57bceb33-ebda-4708-9080-fd1a5923e008", + "type": "category", + "key": "tid", + }, + "field_concept_why": { + "id": "c14ee077-c0eb-48b1-9825-fbba9b91ede5", + "type": "value", + "key": "safe_value", + }, + "field_proposal_theme": { + "id": "a83a1884-f711-4196-8d15-ae2110466acb", + "type": "category", + "key": "tid", + }, + "field_proposal_similar_efforts": { + "id": "9ca35708-d611-4cd0-8d4a-3cc08349f45b", + "type": "value", + "key": "safe_value", + }, + "field_concept_contact": { + "id": "db7b1642-c03d-4af4-82c9-db67bf9713b0", + "type": "value", + "key": "safe_value", + }, + "field_concept_upload": { + "id": "8a91231c-5c3d-46fe-9de6-8d5c86817626", + "type": "file", + # TODO: finish mapping + }, + "field_application_otf_mission": { + "id": "4c661a64-2614-4169-b4d2-1fd39e2e831b", + "type": "boolean", + }, + "field_application_otf_tos": { + "id": "1bc4e113-1414-46ff-bba7-2dc02b2126df", + "type": "boolean", + }, + "field_application_otf_represent": { + "id": "42dd68a1-b699-4678-bea6-13e0f842e821", + "type": "boolean", + }, + "field_application_otf_license": { + "id": "72916731-ec97-4688-95f1-d3bf140b03c2", + "type": "boolean", + }, + "field_application_otf_complete": { + "id": "6856d26d-b169-4fdf-b598-63c3dd9278a2", + "type": "boolean", + }, + "field_application_otf_deadline": { + "id": "33838399-f292-4b63-83f0-e02d344f99d4", + "type": "boolean", + }, + "field_application_otf_list": { + "id": "fc571e12-d4a2-4d53-ab34-2c57321dc6ac", + "type": "boolean", + }, + "field_application_otf_newsletter": { + "id": "cd0d8a4b-e71a-4dff-964a-f547bd655e7d", + "type": "boolean", + }, + } diff --git a/opentech/apply/funds/management/commands/migrate_fellowship_application.py b/opentech/apply/funds/management/commands/migrate_fellowship_application.py index f4c94d134..119dfec46 100644 --- a/opentech/apply/funds/management/commands/migrate_fellowship_application.py +++ b/opentech/apply/funds/management/commands/migrate_fellowship_application.py @@ -57,15 +57,8 @@ class Command(MigrateCommand): "key": "safe_value", }, "field_application_duration2": { - "id": "611dacd7-553a-4be8-9283-1d006099d0c9", - "type": "map", - "map": { - "3": "3 months", - "6": "6 months", - "9": "9 months", - "12": "12 months", - "18": "18 months", - }, + "id": "duration", + "type": "value", }, "field_application_host_text": { "id": "0afaf4e1-4556-4e79-aa3d-4990e33620da", diff --git a/opentech/apply/funds/management/commands/migrate_proposals.py b/opentech/apply/funds/management/commands/migrate_proposals.py new file mode 100644 index 000000000..de64e45b8 --- /dev/null +++ b/opentech/apply/funds/management/commands/migrate_proposals.py @@ -0,0 +1,170 @@ +from opentech.apply.funds.management.commands.migration_base import MigrateCommand + + +class Command(MigrateCommand): + CONTENT_TYPE = "fund" + FUND_NAME = "Internet Freedom Fund" + ROUND_NAME = "Internet Freedom Fund" + APPLICATION_TYPE = "proposal" + + STREAMFIELD_MAP = { + "title": { + "id": "title", + "type": "direct", + }, + "field_proposal_funding": { + "id": "value", + "type": "value", + }, + "field_proposal_term_time": { + "id": "duration", + "type": "value", + }, + "field_proposal_legal_entity_name": { + "id": "739a413b-46cc-4936-82ce-e68c2dfa41ca", + "type": "value", + "key": "safe_value", + }, + "field_proposal_common_name": { + "id": "full_name", + "type": "value", + "key": "safe_value", + }, + "field_proposal_entity_contact": { + "id": "a3c9af86-d047-4663-864a-b6dd97a60c39", + "type": "value", + "key": "safe_value", + }, + "field_proposal_entity_mail": { + "id": "email", + "type": "value", + "key": "email", + }, + "field_proposal_entity_phone": { + "id": "40479d2a-7d53-4c81-834a-775ccd6c91c0", + "type": "value", + "key": "safe_value", + }, + "field_proposal_entity_address": { + "id": "f7e431b1-9965-4ebe-ab30-a00ff4b972ec", + "type": "address", + "map": { + "administrative_area": "administrativearea", + "country": "country", + "locality": "localityname", + "postal_code": "postalcode", + "thoroughfare": "thoroughfare", + "premise": "premise", + } + }, + "field_proposal_summary": { + "id": "a7502e97-5f2e-417f-b08c-588d367e40e5", + "type": "value", + "key": "safe_value", + }, + "field_proposal_narrative": { + "id": "072f181b-90a2-4bb2-986d-55e1aaa9f348", + "type": "value", + "key": "safe_value", + }, + "field_proposal_objectives": { + "id": "a7ae7375-4569-47e2-8ee7-3c3d441375a9", + "type": "value", + "key": "safe_value", + }, + "field_proposal_activities": { + "id": "50328cc9-879d-4817-8454-2062ac47aef9", + "type": "value", + "key": "safe_value", + }, + "field_proposal_budget_details": { + "id": "7b0b0af4-009f-45db-b20c-5f991bce7752", + "type": "value", + "key": "safe_value", + }, + "field_proposal_similar_efforts": { + "id": "ba3733f3-bee8-4fe8-bdde-36812aa4df77", + "type": "value", + "key": "safe_value", + }, + "field_proposal_evaluation": { + "id": "23028eab-92c3-4c30-9a3e-5604dec0854d", + "type": "value", + "key": "safe_value", + }, + "field_proposal_sustainability": { + "id": "88d635e4-81d6-413c-8e09-52b74015e78b", + "type": "value", + "key": "safe_value", + }, + "field_proposal_fund_info": { + "id": "38072bb7-fcdd-4f74-9bfb-db45bfeb07a7", + "type": "value", + "key": "safe_value", + }, + "field_proposal_background": { + "id": "f8b340d0-8c0c-41f8-acb5-662c676e2bbd", + "type": "value", + "key": "safe_value", + }, + "field_proposal_references": { + "id": "8b2572ce-d118-41c4-b5d7-59f4ffe44431", + "type": "value", + "key": "safe_value", + }, + "field_proposal_community": { + "id": "1b93fcd1-c6cd-432a-b831-a0fb680e327e", + "type": "value", + "key": "safe_value", + }, + "field_proposal_status": { + "id": "036fa233-c42a-4fc6-861a-ff40450efc7d", + "type": "category", + "key": "tid", + }, + "field_type": { + "id": "7d69aeec-009d-4de2-8dd2-6b0aacb4578f", + "type": "category", + "key": "tid", + }, + "field_proposal_focus": { + "id": "328590d3-fefd-410d-b745-12f2efdd5437", + "type": "category", + "key": "tid", + }, + "field_proposal_beneficiaries": { + "id": "f18f0399-538b-4bf3-9cd5-4457138814a8", + "type": "category", + "key": "tid", + }, + "field_proposal_theme": { + "id": "a9b2b6de-fb7b-4709-aa59-f0ad987a677a", + "type": "category", + "key": "tid", + }, + "field_technology_attribute": { + "id": "251cf41a-0a49-4725-8d5a-5e496d018647", + "type": "category", + "key": "tid", + }, + "field_term_region": { + "id": "ed6244ae-6903-4412-8b7a-c219ed25dfbb", + "type": "category", + "key": "tid", + }, + "field_term_country": { + "id": "4b79c527-bf24-47f1-87a7-39945e70caeb", + "type": "category", + "key": "tid", + }, + "field_proposal_upload": { + "id": "6bec61a1-3527-4e21-aa65-f26d845bbb68", + "type": "file", + # TODO: finish mapping + }, + "field_proposal_comments": { + "id": "c0ff8444-8d43-46ef-8498-ed1a32c09c6a", + "type": "value", + "key": "safe_value", + }, + } diff --git a/opentech/apply/funds/management/commands/migrate_rr_applications.py b/opentech/apply/funds/management/commands/migrate_rr_applications.py index 1dae67829..61014b37b 100644 --- a/opentech/apply/funds/management/commands/migrate_rr_applications.py +++ b/opentech/apply/funds/management/commands/migrate_rr_applications.py @@ -72,16 +72,8 @@ class Command(MigrateCommand): "key": "safe_value", }, "field_application_duration3": { - "id": "806d401c-b52c-46f7-9e96-f36fa70f53d8", - "type": "map", - "map": { - "1": "1 month", - "2": "2 months", - "3": "3 months", - "4": "4 months", - "5": "5 months", - "6": "6 months", - }, + "id": "duration", + "type": "value", }, "field_application_who": { "id": "1ec16cdc-7a68-40be-b17b-9a218def4260", @@ -162,10 +154,10 @@ class Command(MigrateCommand): "id": "bd29eb88-9754-4305-9b2d-406a875ec56a", "type": "address", "map": { - "administrative_area": "administrative_area", + "administrative_area": "administrativearea", "country": "country", - "locality": "locality_name", - "postal_code": "postal_code", + "locality": "localityname", + "postal_code": "postalcode", "thoroughfare": "thoroughfare", "premise": "premise", } diff --git a/opentech/apply/funds/management/commands/migration_base.py b/opentech/apply/funds/management/commands/migration_base.py index d4dc29974..08c9e13f8 100644 --- a/opentech/apply/funds/management/commands/migration_base.py +++ b/opentech/apply/funds/management/commands/migration_base.py @@ -75,6 +75,13 @@ class MigrateCommand(BaseCommand): submission.status = self.get_workflow_state(node) + if 'proposal_nid' in node: + try: + submission.next = ApplicationSubmission.objects.get(drupal_id=node['proposal_nid']) + except ApplicationSubmission.DoesNotExist: + self.stdout.write("No related proposal found, please import proposals before applications.") + pass + form_data = { 'skip_account_creation_notification': True, } @@ -90,8 +97,8 @@ class MigrateCommand(BaseCommand): if "value" not in form_data: form_data["value"] = 0 - if "duration" not in form_data: - form_data["duration"] = 0 + if not form_data["duration"]: + form_data["duration"] = "1" submission.form_data = form_data @@ -99,7 +106,7 @@ class MigrateCommand(BaseCommand): submission.save() self.stdout.write(f"Processed \"{node['title']}\" ({node['nid']})") except IntegrityError: - self.stdout.write(f"Skipped \"{node['title']}\" ({node['nid']}) due to IntegrityError") + self.stdout.write(f"*** Skipped \"{node['title']}\" ({node['nid']}) due to IntegrityError") pass def get_user(self, uid): @@ -127,7 +134,10 @@ class MigrateCommand(BaseCommand): if mapping_type == "direct": value = source_value elif mapping_type == 'value': - value = self.nl2br(source_value[key]) if source_value else '' + if key in source_value: + value = self.nl2br(source_value[key]) if source_value else '' + else: + value = self.nl2br(source_value['value']) if source_value else '' elif mapping_type == 'map' and 'map' in 'mapping': value = mapping['map'].get(source_value[key]) elif mapping_type == 'address' and 'map' in mapping: @@ -136,6 +146,7 @@ class MigrateCommand(BaseCommand): value = {} for item in value_map: value[value_map[item]] = source_value[item] + value = json.dumps(value) except TypeError: value = {} elif mapping_type == 'boolean': -- GitLab