diff --git a/akvo/iati/checks/fields/crs_add.py b/akvo/iati/checks/fields/crs_add.py index 7538f9c6e4..37796bf711 100644 --- a/akvo/iati/checks/fields/crs_add.py +++ b/akvo/iati/checks/fields/crs_add.py @@ -34,8 +34,8 @@ def crs_add(project): str(flag.pk))) if not crs.loan_status_year and (crs.loan_status_currency or crs.loan_status_value_date or - crs.interest_received is not None or crs.principal_outstanding is not None or - crs.principal_arrears is not None or crs.interest_arrears is not None): + crs.interest_received is not None or crs.principal_outstanding is not None or + crs.principal_arrears is not None or crs.interest_arrears is not None): all_checks_passed = False checks.append((u'error', u'CRS (id: %s) has no loan status year specified' % str(crs.pk))) diff --git a/akvo/iati/imports/mappers/Cordaid/financials.py b/akvo/iati/imports/mappers/Cordaid/financials.py index 7fc0d29cef..6c4c63de1c 100644 --- a/akvo/iati/imports/mappers/Cordaid/financials.py +++ b/akvo/iati/imports/mappers/Cordaid/financials.py @@ -15,10 +15,10 @@ def get_budget(self, budget_from): activity = self.parent_elem budget_item_data = dict(project=self.project, label=BudgetItemLabel.objects.get(label='Total'), - other_extra = '',) + other_extra='',) budget = budget_item_data['budget'] = activity.find( - 'budget[@{}="{}"]'.format(akvo_ns('budget-from'), budget_from)) + 'budget[@{}="{}"]'.format(akvo_ns('budget-from'), budget_from)) if budget is not None: budget_item_data['type'] = self.get_attrib(budget, 'type', 'type') diff --git a/akvo/iati/imports/mappers/Cordaid/partnerships.py b/akvo/iati/imports/mappers/Cordaid/partnerships.py index 86f8d9c8cc..afda0c7399 100644 --- a/akvo/iati/imports/mappers/Cordaid/partnerships.py +++ b/akvo/iati/imports/mappers/Cordaid/partnerships.py @@ -26,7 +26,7 @@ class Partnerships(Partnerships): def __init__(self, iati_import_job, parent_elem, project, globals, related_obj=None): super(Partnerships, self).__init__( - iati_import_job, parent_elem, project, globals, related_obj) + iati_import_job, parent_elem, project, globals, related_obj) self._imported_partnerships = [] self._changes = [] @@ -52,7 +52,7 @@ def add_funding_partner(self, budget_from): :return: """ assert budget_from == "Cordaid" or budget_from == "Others", ( - "akvo:budget-from value incorrect: {}".format(budget_from)) + "akvo:budget-from value incorrect: {}".format(budget_from)) budget_items = BudgetItems(self.iati_import_job, self.parent_elem, self.project, self.globals) @@ -99,8 +99,8 @@ def do_import(self): self.add_funding_partner(OTHERS) self._changes += self.delete_objects( - self.project.partnerships.filter( - iati_organisation_role__lt=Partnership.AKVO_SPONSOR_PARTNER), - self._imported_partnerships, 'partnership') + self.project.partnerships.filter( + iati_organisation_role__lt=Partnership.AKVO_SPONSOR_PARTNER), + self._imported_partnerships, 'partnership') return self._changes diff --git a/akvo/iati/imports/mappers/CordaidZip/financials.py b/akvo/iati/imports/mappers/CordaidZip/financials.py index bcac2f46f0..6913a0cc9a 100644 --- a/akvo/iati/imports/mappers/CordaidZip/financials.py +++ b/akvo/iati/imports/mappers/CordaidZip/financials.py @@ -15,10 +15,10 @@ def get_budget(self, budget_from): activity = self.parent_elem budget_item_data = dict(project=self.project, label=BudgetItemLabel.objects.get(label='Total'), - other_extra = '',) + other_extra='',) budget = budget_item_data['budget'] = activity.find( - 'budget[@{}="{}"]'.format(akvo_ns('budget-from'), budget_from)) + 'budget[@{}="{}"]'.format(akvo_ns('budget-from'), budget_from)) if budget is not None: budget_item_data['type'] = self.get_attrib(budget, 'type', 'type') diff --git a/akvo/iati/imports/mappers/CordaidZip/links.py b/akvo/iati/imports/mappers/CordaidZip/links.py index 638efe81d6..943f37ec17 100644 --- a/akvo/iati/imports/mappers/CordaidZip/links.py +++ b/akvo/iati/imports/mappers/CordaidZip/links.py @@ -29,7 +29,7 @@ def do_import(self): photo_id = self.get_attrib(self.parent_elem, akvo_ns('photo-id'), 'current_image') current_image = file_from_zip_archive( - self.iati_import_job.iati_xml_file, "out_proj/{}.jpg".format(photo_id)) + self.iati_import_job.iati_xml_file, "out_proj/{}.jpg".format(photo_id)) if current_image: tmp_file = NamedTemporaryFile() for line in current_image.readlines(): @@ -43,18 +43,18 @@ def do_import(self): new_file = File(tmp_file) if not same_data(old_file, new_file): filename = model_and_instance_based_filename( - 'Project', self.project.pk, 'current_image', 'image.jpg') + 'Project', self.project.pk, 'current_image', 'image.jpg') new_file.seek(0) self.project.current_image.save(filename, new_file) changes += ['current_image'] current_image_caption = self.get_attrib( - self.parent_elem, akvo_ns('image-caption'), 'current_image_caption') + self.parent_elem, akvo_ns('image-caption'), 'current_image_caption') if current_image_caption: changes += self.update_project_field('current_image_caption', current_image_caption) current_image_credit = self.get_attrib( - self.parent_elem, akvo_ns('photo-credit'), 'current_image_credit') + self.parent_elem, akvo_ns('photo-credit'), 'current_image_credit') if current_image_credit: changes += self.update_project_field('current_image_credit', current_image_credit) diff --git a/akvo/iati/imports/mappers/CordaidZip/organisations.py b/akvo/iati/imports/mappers/CordaidZip/organisations.py index 8c7f34d0e8..bce528cc6a 100644 --- a/akvo/iati/imports/mappers/CordaidZip/organisations.py +++ b/akvo/iati/imports/mappers/CordaidZip/organisations.py @@ -24,7 +24,7 @@ class InternalOrganisationIDs(ImportMapper): def __init__(self, iati_import_job, parent_elem, project, globals, related_obj=None): super(InternalOrganisationIDs, self).__init__( - iati_import_job, parent_elem, project, globals, related_obj) + iati_import_job, parent_elem, project, globals, related_obj) self.model = InternalOrganisationID def do_import(self): @@ -40,7 +40,7 @@ class Organisations(ImportMapper): def __init__(self, iati_import_job, parent_elem, project, globals, related_obj=None): super(Organisations, self).__init__( - iati_import_job, parent_elem, project, globals, related_obj) + iati_import_job, parent_elem, project, globals, related_obj) self.model = Organisation # HACK: "fix" globals so we get the straight text from elements self.globals['version'] = '1' @@ -92,7 +92,7 @@ def do_import(self): """ ioids = InternalOrganisationIDs( - self.iati_import_job, self.parent_elem, self.project, self.globals) + self.iati_import_job, self.parent_elem, self.project, self.globals) identifier = ioids.get_child_element_text(ioids.parent_elem, 'org_id', 'identifier') if identifier: try: @@ -107,18 +107,18 @@ def do_import(self): owner = referenced_org.content_owner if owner and owner != self.globals['cordaid']: raise NotOwnedOrganisationException( - "Organisation {}, ID {}, is content owned by {}, ID {}. " - "Can't edit the data.".format( - referenced_org.name, referenced_org.pk, - owner.name, owner.pk - )) + "Organisation {}, ID {}, is content owned by {}, ID {}. " + "Can't edit the data.".format( + referenced_org.name, referenced_org.pk, + owner.name, owner.pk + )) org_fields = {} org_fields['long_name'] = self.get_child_element_text( - self.parent_elem, 'name', 'long_name').strip() + self.parent_elem, 'name', 'long_name').strip() org_fields['name'] = org_fields['long_name'][:25] org_fields['new_organisation_type'] = int(self.get_child_element_text( - self.parent_elem, 'iati_organisation_type', 'new_organisation_type', 22)) + self.parent_elem, 'iati_organisation_type', 'new_organisation_type', 22)) org_fields['iati_org_id'] = self.get_child_element_text( self.parent_elem, 'iati_org_id', 'iati_org_id') org_fields['description'] = self.get_child_element_text( @@ -136,8 +136,8 @@ def do_import(self): organisation.save() changes, created = None, True internal_id = InternalOrganisationID.objects.create( - recording_org=self.globals['cordaid'], referenced_org=organisation, - identifier=identifier) + recording_org=self.globals['cordaid'], referenced_org=organisation, + identifier=identifier) self.set_logo(organisation, identifier) return organisation, changes, created diff --git a/akvo/iati/imports/mappers/CordaidZip/partnerships.py b/akvo/iati/imports/mappers/CordaidZip/partnerships.py index 1534c26f23..2f58201e7b 100644 --- a/akvo/iati/imports/mappers/CordaidZip/partnerships.py +++ b/akvo/iati/imports/mappers/CordaidZip/partnerships.py @@ -21,7 +21,7 @@ class Partnerships(Partnerships): def __init__(self, iati_import_job, parent_elem, project, globals, related_obj=None): super(Partnerships, self).__init__( - iati_import_job, parent_elem, project, globals, related_obj) + iati_import_job, parent_elem, project, globals, related_obj) self._imported_partnerships = [] self._changes = [] @@ -49,7 +49,7 @@ def add_funding_partner(self, budget_from): from . import CORDAID_ORG_ID, OTHERS_ORG_ID, CORDAID assert budget_from == "Cordaid" or budget_from == "Others", ( - "akvo:budget-from value incorrect: {}".format(budget_from)) + "akvo:budget-from value incorrect: {}".format(budget_from)) budget_items = BudgetItems(self.iati_import_job, self.parent_elem, self.project, self.globals) @@ -98,8 +98,8 @@ def do_import(self): self.add_funding_partner(OTHERS) self._changes += self.delete_objects( - self.project.partnerships.filter( - iati_organisation_role__lt=Partnership.AKVO_SPONSOR_PARTNER), - self._imported_partnerships, 'partnership') + self.project.partnerships.filter( + iati_organisation_role__lt=Partnership.AKVO_SPONSOR_PARTNER), + self._imported_partnerships, 'partnership') return self._changes diff --git a/akvo/iati/imports/mappers/classifications.py b/akvo/iati/imports/mappers/classifications.py index 659eefca10..2ebb4b7fe8 100644 --- a/akvo/iati/imports/mappers/classifications.py +++ b/akvo/iati/imports/mappers/classifications.py @@ -136,9 +136,9 @@ def do_import(self): ) if created: changes.append( - u'added policy marker (id: {}): {}'.format(policy_marker.pk, policy_marker)) + u'added policy marker (id: {}): {}'.format(policy_marker.pk, policy_marker)) imported_markers.append(policy_marker) changes += self.delete_objects( - self.project.policy_markers, imported_markers, 'policy marker') + self.project.policy_markers, imported_markers, 'policy marker') return changes diff --git a/akvo/iati/imports/mappers/contacts.py b/akvo/iati/imports/mappers/contacts.py index aa4399ec07..b265c4d651 100644 --- a/akvo/iati/imports/mappers/contacts.py +++ b/akvo/iati/imports/mappers/contacts.py @@ -14,7 +14,7 @@ class Contacts(ImportMapper): def __init__(self, iati_import_job, parent_elem, project, globals, related_obj=None): super(Contacts, self).__init__( - iati_import_job, parent_elem, project, globals) + iati_import_job, parent_elem, project, globals) self.model = ProjectContact def do_import(self): @@ -42,7 +42,7 @@ def do_import(self): email = contact.findtext('email', default='').strip() website = contact.findtext('website', default='').strip() mailing_address = self.get_child_element_text( - contact, 'mailing-address', 'mailing_address') + contact, 'mailing-address', 'mailing_address') project_contact, created = ProjectContact.objects.get_or_create( project=self.project, @@ -58,7 +58,7 @@ def do_import(self): ) if created: changes.append( - u'added contact (id: {}): {}'.format(project_contact.pk, project_contact)) + u'added contact (id: {}): {}'.format(project_contact.pk, project_contact)) imported_contacts.append(project_contact) changes += self.delete_objects(self.project.contacts, imported_contacts, 'contact') diff --git a/akvo/iati/imports/mappers/dates.py b/akvo/iati/imports/mappers/dates.py index 198565b1ed..8a29ccbcbe 100644 --- a/akvo/iati/imports/mappers/dates.py +++ b/akvo/iati/imports/mappers/dates.py @@ -12,10 +12,10 @@ class Dates(ImportMapper): def do_import(self): if self.globals['version'][0] == '1': date_element = self.parent_elem.find( - "activity-date[@type='{}']".format(self.ver_1_date_type)) + "activity-date[@type='{}']".format(self.ver_1_date_type)) else: date_element = self.parent_elem.find( - "activity-date[@type='{}']".format(self.ver_2_date_type)) + "activity-date[@type='{}']".format(self.ver_2_date_type)) date = self.get_date(date_element, 'iso-date', self.date_field) if date_element else None return self.update_project_field(self.date_field, date) @@ -24,7 +24,7 @@ class PlannedStartDate(Dates): def __init__(self, iati_import_job, parent_elem, project, globals, related_obj=None): super(PlannedStartDate, self).__init__( - iati_import_job, parent_elem, project, globals) + iati_import_job, parent_elem, project, globals) self.ver_1_date_type = 'start-planned' self.ver_2_date_type = '1' self.date_field = 'date_start_planned' @@ -34,7 +34,7 @@ class ActualStartDate(Dates): def __init__(self, iati_import_job, parent_elem, project, globals, related_obj=None): super(ActualStartDate, self).__init__( - iati_import_job, parent_elem, project, globals) + iati_import_job, parent_elem, project, globals) self.ver_1_date_type = 'start-actual' self.ver_2_date_type = '2' self.date_field = 'date_start_actual' @@ -44,7 +44,7 @@ class PlannedEndDate(Dates): def __init__(self, iati_import_job, parent_elem, project, globals, related_obj=None): super(PlannedEndDate, self).__init__( - iati_import_job, parent_elem, project, globals) + iati_import_job, parent_elem, project, globals) self.ver_1_date_type = 'end-planned' self.ver_2_date_type = '3' self.date_field = 'date_end_planned' diff --git a/akvo/iati/imports/mappers/defaults.py b/akvo/iati/imports/mappers/defaults.py index fc83210c3d..b952ad67f0 100644 --- a/akvo/iati/imports/mappers/defaults.py +++ b/akvo/iati/imports/mappers/defaults.py @@ -70,7 +70,7 @@ def do_import(self): """ project_scope = self.get_child_elem_attrib( - self.parent_elem, 'activity-scope', 'code', 'project_scope') + self.parent_elem, 'activity-scope', 'code', 'project_scope') return self.update_project_field('project_scope', project_scope) @@ -103,7 +103,7 @@ def do_import(self): """ default_flow_type = self.get_child_elem_attrib( - self.parent_elem, 'default-flow-type', 'code', 'default_flow_type') + self.parent_elem, 'default-flow-type', 'code', 'default_flow_type') return self.update_project_field('default_flow_type', default_flow_type) @@ -120,7 +120,7 @@ def do_import(self): """ default_finance_type = self.get_child_elem_attrib( - self.parent_elem, 'default-finance-type', 'code', 'default_finance_type') + self.parent_elem, 'default-finance-type', 'code', 'default_finance_type') return self.update_project_field('default_finance_type', default_finance_type) @@ -136,7 +136,7 @@ def do_import(self): """ default_aid_type = self.get_child_elem_attrib( - self.parent_elem, 'default-aid-type', 'code', 'default_aid_type') + self.parent_elem, 'default-aid-type', 'code', 'default_aid_type') return self.update_project_field('default_aid_type', default_aid_type) @@ -153,7 +153,7 @@ def do_import(self): """ default_tied_status = self.get_child_elem_attrib( - self.parent_elem, 'default-tied-status', 'code', 'default_tied_status') + self.parent_elem, 'default-tied-status', 'code', 'default_tied_status') return self.update_project_field('default_tied_status', default_tied_status) @@ -169,7 +169,7 @@ def do_import(self): """ iati_status = self.get_child_elem_attrib( - self.parent_elem, 'activity-status', 'code', 'status') + self.parent_elem, 'activity-status', 'code', 'status') if not iati_status: self.add_log('activity-status@code', 'iati_status', 'invalid status code') @@ -183,7 +183,7 @@ class Conditions(ImportMapper): def __init__(self, iati_import_job, parent_elem, project, globals, related_obj=None): super(Conditions, self).__init__( - iati_import_job, parent_elem, project, globals) + iati_import_job, parent_elem, project, globals) self.model = ProjectCondition def do_import(self): @@ -211,7 +211,7 @@ def do_import(self): ) if created: changes.append(u'added condition (id: {}): {}'.format( - project_condition.pk, project_condition)) + project_condition.pk, project_condition)) imported_conditions.append(project_condition) changes += self.delete_objects(self.project.conditions, imported_conditions, 'condition') diff --git a/akvo/iati/imports/mappers/descriptions.py b/akvo/iati/imports/mappers/descriptions.py index a274da63c7..e481dd95f6 100644 --- a/akvo/iati/imports/mappers/descriptions.py +++ b/akvo/iati/imports/mappers/descriptions.py @@ -17,8 +17,8 @@ SECTION_FOUR = 4 TextFieldInfo = collections.namedtuple( - 'TextFieldInfo', - ['akvo_type', 'order', 'cf_section'] + 'TextFieldInfo', + ['akvo_type', 'order', 'cf_section'] ) project_text_fields = { @@ -39,14 +39,14 @@ class Descriptions(ImportMapper): def __init__(self, iati_import_job, parent_elem, project, globals, related_obj=None): super(Descriptions, self).__init__( - iati_import_job, parent_elem, project, globals) + iati_import_job, parent_elem, project, globals) self.model = Project def find_description_by_akvo_type(self, field): type = project_text_fields[field].akvo_type if type: return self.parent_elem.find( - "description[@{}='{}']".format(akvo_ns('type'), type)) + "description[@{}='{}']".format(akvo_ns('type'), type)) def find_description_by_order(self, field): """ @@ -106,7 +106,7 @@ def get_subtitle(self): def get_goals_overview(self): text, element = self.get_child_element_text( - self.parent_elem, "description[@type='2']", 'goals_overview', return_element=True) + self.parent_elem, "description[@type='2']", 'goals_overview', return_element=True) if element is None: text = '\n'.join( ["- {}".format( @@ -118,7 +118,7 @@ def get_goals_overview(self): def get_target_group(self): text, element = self.get_child_element_text( - self.parent_elem, "description[@type='3']", 'target_group', return_element=True) + self.parent_elem, "description[@type='3']", 'target_group', return_element=True) return element, text @@ -155,7 +155,7 @@ def do_import(self): self.add_log(custom_description, 'section', str(e)) max_characters = self.get_attrib( - custom_field, akvo_ns('max-characters'), 'max_characters') + custom_field, akvo_ns('max-characters'), 'max_characters') try: max_characters = int(max_characters) except ValueError as e: @@ -164,7 +164,7 @@ def do_import(self): help_text = self.get_attrib(custom_field, akvo_ns('help-text'), 'help_text') mandatory = self.get_attrib( - custom_field, akvo_ns('mandatory'), 'mandatory', 'false') + custom_field, akvo_ns('mandatory'), 'mandatory', 'false') mandatory = self.to_boolean(mandatory) order = self.get_attrib(custom_field, akvo_ns('order'), 'order', 0) @@ -186,7 +186,7 @@ def do_import(self): ) if created: changes.append(u'added custom field (id: {}): {}'.format( - custom_field_obj.pk, custom_field_obj)) + custom_field_obj.pk, custom_field_obj)) imported_fields.append(custom_field_obj) for custom_field in self.project.custom_fields.all(): @@ -195,7 +195,7 @@ def do_import(self): 'goals_overview', 'background', 'current_status', 'target_group']: changes.append(u'deleted custom field (id: {}): {}'.format( - custom_field.pk, custom_field.__unicode__())) + custom_field.pk, custom_field.__unicode__())) custom_field.delete() return changes diff --git a/akvo/iati/imports/mappers/financials.py b/akvo/iati/imports/mappers/financials.py index 1c96c53e7d..07737a684f 100644 --- a/akvo/iati/imports/mappers/financials.py +++ b/akvo/iati/imports/mappers/financials.py @@ -55,17 +55,17 @@ def do_import(self): humanitarian = self.get_attrib(transaction, 'humanitarian', 'humanitarian', None) transaction_type = self.get_child_elem_attrib( - transaction, 'transaction-type', 'code', 'transaction_type') + transaction, 'transaction-type', 'code', 'transaction_type') if transaction_type in TYPE_TO_CODE.keys(): transaction_type = TYPE_TO_CODE[transaction_type] transaction_date = self.get_child_as_date( - transaction, 'transaction-date', 'iso-date', 'transaction_date') + transaction, 'transaction-date', 'iso-date', 'transaction_date') value = self.get_child_element_text_as_decimal(transaction, 'value', 'value', None) if value: value_date = self.get_child_as_date( - transaction, 'value', 'value-date', 'value_date') + transaction, 'value', 'value-date', 'value_date') currency = self.get_child_elem_attrib(transaction, 'value', 'currency', 'currency') else: value_date = None @@ -76,10 +76,10 @@ def do_import(self): prov_org_element = transaction.find('provider-org') if prov_org_element is not None: transaction_provider_org = self.get_or_create_organisation( - prov_org_element.get('ref', ''), self.get_text(prov_org_element)) + prov_org_element.get('ref', ''), self.get_text(prov_org_element)) provider_organisation_activity = self.get_child_elem_attrib( - transaction, 'provider-org', 'provider-activity-id', - 'provider_organisation_activity') + transaction, 'provider-org', 'provider-activity-id', + 'provider_organisation_activity') else: transaction_provider_org = None provider_organisation_activity = '' @@ -87,25 +87,25 @@ def do_import(self): rec_org_element = transaction.find('receiver-org') if rec_org_element is not None: transaction_receiver_org = self.get_or_create_organisation( - rec_org_element.get('ref'), self.get_text(rec_org_element)) + rec_org_element.get('ref'), self.get_text(rec_org_element)) receiver_organisation_activity = self.get_child_elem_attrib( - transaction, 'receiver-org', 'receiver-activity-id', - 'receiver_organisation_activity') + transaction, 'receiver-org', 'receiver-activity-id', + 'receiver_organisation_activity') else: transaction_receiver_org = None receiver_organisation_activity = '' disbursement_channel = self.get_child_elem_attrib( - transaction, 'disbursement-channel', 'code', 'disbursement_channel') + transaction, 'disbursement-channel', 'code', 'disbursement_channel') flow_type = self.get_child_elem_attrib(transaction, 'flow-type', 'code', 'flow_type') finance_type = self.get_child_elem_attrib( - transaction, 'finance-type', 'code', 'finance_type') + transaction, 'finance-type', 'code', 'finance_type') aid_type = self.get_child_elem_attrib(transaction, 'aid-type', 'code', 'aid_type') tied_status = self.get_child_elem_attrib( - transaction, 'tied-status', 'code', 'tied_status') + transaction, 'tied-status', 'code', 'tied_status') recipient_country = self.get_child_elem_attrib( - transaction, 'recipient-country', 'code', 'recipient_country') + transaction, 'recipient-country', 'code', 'recipient_country') region_element = transaction.find('recipient-region') if region_element is not None: @@ -148,19 +148,19 @@ def do_import(self): if not transaction_obj in imported_transactions: if created: changes.append(u'added transaction (id: {}): {}'.format( - transaction_obj.pk, transaction_obj)) + transaction_obj.pk, transaction_obj)) imported_transactions.append(transaction_obj) # Process transaction sectors transaction_sectors = TransactionsSectors( - self.iati_import_job, transaction, self.project, - self.globals, related_obj=transaction_obj) + self.iati_import_job, transaction, self.project, + self.globals, related_obj=transaction_obj) for sector_change in transaction_sectors.do_import(): changes.append(sector_change) changes += self.delete_objects( - self.project.transactions, imported_transactions, 'transaction') + self.project.transactions, imported_transactions, 'transaction') return changes @@ -198,11 +198,11 @@ def do_import(self): ) if created: changes.append(u'added transaction sector (id: {}): {}'.format( - sector_obj.pk, sector_obj)) + sector_obj.pk, sector_obj)) imported_sectors.append(sector_obj) changes += self.delete_objects( - self.related_obj.sectors, imported_sectors, 'transaction sector') + self.related_obj.sectors, imported_sectors, 'transaction sector') return changes @@ -261,12 +261,12 @@ def do_import(self): other_extra = akvo_budget_label if len(other_extra) > 30: self.add_log('budget[@label]', 'budget_item_label', - 'label too long (30 characters allowed)', - LOG_ENTRY_TYPE.VALUE_PARTLY_SAVED) + 'label too long (30 characters allowed)', + LOG_ENTRY_TYPE.VALUE_PARTLY_SAVED) other_extra = other_extra[:30] period_start = self.get_child_as_date( - budget, 'period-start', 'iso-date', 'period_start') + budget, 'period-start', 'iso-date', 'period_start') if period_start and other_extra == 'Other': other_extra = str(period_start.year) @@ -275,7 +275,7 @@ def do_import(self): amount = self.get_child_element_text_as_decimal(budget, 'value', 'amount', None) if amount: value_date = self.get_child_as_date( - budget, 'value', 'value-date', 'value_date') + budget, 'value', 'value-date', 'value_date') currency = self.get_child_elem_attrib(budget, 'value', 'currency', 'currency') if not currency: currency = self.get_attrib(activity, 'default-currency', 'currency') @@ -297,7 +297,7 @@ def do_import(self): ) if created: changes.append(u'added budget item (id: {}): {}'.format( - budget_obj.pk, budget_obj)) + budget_obj.pk, budget_obj)) imported_budgets.append(budget_obj) changes += self.delete_objects(self.project.budget_items, imported_budgets, 'budget item') @@ -309,7 +309,7 @@ class CountryBudgetItems(ImportMapper): def __init__(self, iati_import_job, parent_elem, project, globals, related_obj=None): super(CountryBudgetItems, self).__init__( - iati_import_job, parent_elem, project, globals) + iati_import_job, parent_elem, project, globals) self.model = CountryBudgetItem def do_import(self): @@ -345,7 +345,7 @@ def do_import(self): ) if created: changes.append( - u'added country budget item (id: {}): {}'.format(cbi_obj.pk, cbi_obj)) + u'added country budget item (id: {}): {}'.format(cbi_obj.pk, cbi_obj)) imported_cbis.append(cbi_obj) changes += self.delete_objects(self.project.country_budget_items, imported_cbis, @@ -365,10 +365,10 @@ def do_import(self): :return: List; contains fields that have changed """ capital_spend_percentage = self.get_child_elem_attrib( - self.parent_elem, 'capital-spend', 'percentage', 'capital_spend_percentage', None) + self.parent_elem, 'capital-spend', 'percentage', 'capital_spend_percentage', None) if capital_spend_percentage: capital_spend_percentage = self.cast_to_decimal( - capital_spend_percentage, 'capital-spend', 'capital_spend_percentage') + capital_spend_percentage, 'capital-spend', 'capital_spend_percentage') return self.update_project_field('capital_spend_percentage', capital_spend_percentage) @@ -378,7 +378,7 @@ class PlannedDisbursements(ImportMapper): def __init__(self, iati_import_job, parent_elem, project, globals, related_obj=None): super(PlannedDisbursements, self).__init__( - iati_import_job, parent_elem, project, globals) + iati_import_job, parent_elem, project, globals) self.model = PlannedDisbursement def do_import(self): @@ -399,17 +399,17 @@ def do_import(self): disbursement_type = self.get_attrib(planned_disbursement, 'type', 'type') updated = self.get_date(planned_disbursement, 'updated', 'updated') - period_start = self.get_child_as_date( - planned_disbursement, 'period-start', 'iso-date', 'period_start') + period_start = self.get_child_as_date( + planned_disbursement, 'period-start', 'iso-date', 'period_start') period_end = self.get_child_as_date( - planned_disbursement, 'period-end', 'iso-date', 'period_end') + planned_disbursement, 'period-end', 'iso-date', 'period_end') value = self.get_child_element_text_as_decimal(planned_disbursement, 'value', 'value') if value: value_date = self.get_child_as_date( - planned_disbursement, 'value', 'value-date', 'value_date') + planned_disbursement, 'value', 'value-date', 'value_date') currency = self.get_child_elem_attrib( - planned_disbursement, 'value', 'currency', 'currency') + planned_disbursement, 'value', 'currency', 'currency') else: value_date = None currency = '' @@ -417,10 +417,10 @@ def do_import(self): prov_org_element = planned_disbursement.find('provider-org') if prov_org_element is not None: provider_org = self.get_or_create_organisation( - prov_org_element.get('ref', ''), self.get_text(prov_org_element)) + prov_org_element.get('ref', ''), self.get_text(prov_org_element)) provider_org_activity = self.get_child_elem_attrib( - planned_disbursement, 'provider-org', 'provider-activity-id', - 'provider_organisation_activity') + planned_disbursement, 'provider-org', 'provider-activity-id', + 'provider_organisation_activity') else: provider_org = None provider_org_activity = '' @@ -428,10 +428,10 @@ def do_import(self): rec_org_element = planned_disbursement.find('receiver-org') if rec_org_element is not None: receiver_org = self.get_or_create_organisation( - rec_org_element.get('ref'), self.get_text(rec_org_element)) + rec_org_element.get('ref'), self.get_text(rec_org_element)) receiver_org_activity = self.get_child_elem_attrib( - planned_disbursement, 'receiver-org', 'receiver-activity-id', - 'receiver_organisation_activity') + planned_disbursement, 'receiver-org', 'receiver-activity-id', + 'receiver_organisation_activity') else: receiver_org = None receiver_org_activity = '' @@ -452,9 +452,9 @@ def do_import(self): ) if created: changes.append(u'added planned disbursement (id: {}): {}'.format( - disbursement_obj.pk, disbursement_obj)) + disbursement_obj.pk, disbursement_obj)) imported_pds.append(disbursement_obj) changes += self.delete_objects( - self.project.planned_disbursements, imported_pds, 'planned disbursement') + self.project.planned_disbursements, imported_pds, 'planned disbursement') return changes diff --git a/akvo/iati/imports/mappers/links.py b/akvo/iati/imports/mappers/links.py index 37adc47137..e023bf9bf2 100644 --- a/akvo/iati/imports/mappers/links.py +++ b/akvo/iati/imports/mappers/links.py @@ -77,13 +77,13 @@ def do_import(self): 'Error trying to fetch image: {}'.format(url)) current_image_caption = self.get_child_element_text( - document_link_element, 'title', 'current_image_caption') + document_link_element, 'title', 'current_image_caption') if current_image_caption: self.project.current_image_caption = current_image_caption image_meta_changes.append('current_image_caption') current_image_credit = self.get_attrib( - document_link_element, akvo_ns('photo-credit'), - 'current_image_credit') + document_link_element, akvo_ns('photo-credit'), + 'current_image_credit') if current_image_credit: self.project.current_image_credit = current_image_credit image_meta_changes.append('current_image_credit') @@ -98,7 +98,7 @@ class Links(ImportMapper): def __init__(self, iati_import_job, parent_elem, project, globals, related_obj=None): super(Links, self).__init__( - iati_import_job, parent_elem, project, globals) + iati_import_job, parent_elem, project, globals) self.model = Link def do_import(self): @@ -137,7 +137,7 @@ def do_import(self): caption = self.get_child_element_text(doc_link, 'title', 'caption') link, created = Link.objects.get_or_create( - project=self.project, url=url, caption=caption) + project=self.project, url=url, caption=caption) if created: changes.append(u'added link (id: {}): {}'.format(link.pk, link)) imported_links.append(link) @@ -151,7 +151,7 @@ class Documents(ImportMapper): def __init__(self, iati_import_job, parent_elem, project, globals, related_obj=None): super(Documents, self).__init__( - iati_import_job, parent_elem, project, globals) + iati_import_job, parent_elem, project, globals) self.model = ProjectDocument def do_import(self): @@ -182,16 +182,16 @@ def do_import(self): continue title, title_element = self.get_child_element_text( - doc_link, 'title', 'title', return_element=True) + doc_link, 'title', 'title', return_element=True) title_language = '' if title: if self.globals['version'][0] == '1': title_language = self.get_child_elem_attrib( - doc_link, 'title', xml_ns('lang'), 'title_language') + doc_link, 'title', xml_ns('lang'), 'title_language') elif self.globals['version'][0] == '2': title_language = self.get_child_elem_attrib( - title_element, 'narrative', xml_ns('lang'), 'title_language') + title_element, 'narrative', xml_ns('lang'), 'title_language') language = self.get_child_elem_attrib(doc_link, 'language', 'code', 'language') @@ -250,7 +250,7 @@ def do_import(self): ) if created: changes.append(u'added document category (id: {}): {}'.format( - category_obj.pk, category_obj)) + category_obj.pk, category_obj)) imported_categories.append(category_obj) changes += self.delete_objects(self.related_obj.categories, imported_categories, diff --git a/akvo/iati/imports/mappers/locations.py b/akvo/iati/imports/mappers/locations.py index f5e6ca15c3..080d9a2d3a 100644 --- a/akvo/iati/imports/mappers/locations.py +++ b/akvo/iati/imports/mappers/locations.py @@ -19,7 +19,7 @@ class Locations(ImportMapper): def __init__(self, iati_import_job, parent_elem, project, globals, related_obj=None): super(Locations, self).__init__( - iati_import_job, parent_elem, project, globals) + iati_import_job, parent_elem, project, globals) self.model = ProjectLocation def do_import(self): @@ -40,7 +40,7 @@ def do_import(self): reference = self.get_attrib(location, 'ref', 'reference') location_reach = self.get_child_elem_attrib( - location, 'location-reach', 'code', 'location_reach') + location, 'location-reach', 'code', 'location_reach') id_element = location.find('location-id') if id_element is not None: @@ -53,7 +53,7 @@ def do_import(self): name = self.get_child_element_text(location, 'name', 'name') description = self.get_child_element_text(location, 'description', 'description') activity_description = self.get_child_element_text( - location, 'activity-description', 'activity_description') + location, 'activity-description', 'activity_description') point = location.find('point') if point is not None: @@ -64,19 +64,19 @@ def do_import(self): coordinates = location.find('coordinates') if coordinates is not None: latitude = self.get_child_elem_attrib( - location, 'coordinates', 'latitude', 'latitude', 0) + location, 'coordinates', 'latitude', 'latitude', 0) longitude = self.get_child_elem_attrib( - location, 'coordinates', 'longitude', 'longitude', 0) + location, 'coordinates', 'longitude', 'longitude', 0) else: latitude = None longitude = None exactness = self.get_child_elem_attrib(location, 'exactness', 'code', 'exactness') location_class = self.get_child_elem_attrib( - location, 'location-class', 'code', 'location_class') + location, 'location-class', 'code', 'location_class') feature_designation = self.get_child_elem_attrib( - location, 'feature-designation', 'code', 'feature_designation').upper() + location, 'feature-designation', 'code', 'feature_designation').upper() if not feature_designation: feature_designation = self.get_child_elem_attrib( location, 'location-type', 'code', 'feature_designation').upper() @@ -117,8 +117,8 @@ def do_import(self): # Process location administratives administratives = Administratives( - self.iati_import_job, location, self.project, self.globals, - related_obj=loc) + self.iati_import_job, location, self.project, self.globals, + related_obj=loc) for admin_change in administratives.do_import(): changes.append(admin_change) @@ -167,7 +167,7 @@ def do_import(self): imported_admins.append(admin) changes += self.delete_objects( - self.related_obj.administratives, imported_admins, 'location administrative') + self.related_obj.administratives, imported_admins, 'location administrative') return changes @@ -209,11 +209,11 @@ def do_import(self): ) if created: changes.append(u'added recipient country (id: {}): {}'.format( - recipient_country.pk, recipient_country)) + recipient_country.pk, recipient_country)) imported_countries.append(recipient_country) changes += self.delete_objects( - self.project.recipient_countries, imported_countries, 'recipient country') + self.project.recipient_countries, imported_countries, 'recipient country') return changes @@ -222,7 +222,7 @@ class RecipientRegions(ImportMapper): def __init__(self, iati_import_job, parent_elem, project, globals, related_obj=None): super(RecipientRegions, self).__init__( - iati_import_job, parent_elem, project, globals) + iati_import_job, parent_elem, project, globals) self.model = RecipientRegion def do_import(self): @@ -261,7 +261,7 @@ def do_import(self): ) if created: changes.append( - u'added recipient region (id: {}): {}'.format(region_obj.pk, region_obj)) + u'added recipient region (id: {}): {}'.format(region_obj.pk, region_obj)) imported_regions.append(region_obj) changes += self.delete_objects( diff --git a/akvo/iati/imports/mappers/partnerships.py b/akvo/iati/imports/mappers/partnerships.py index 7decf92353..7025ab2db2 100644 --- a/akvo/iati/imports/mappers/partnerships.py +++ b/akvo/iati/imports/mappers/partnerships.py @@ -61,11 +61,11 @@ def do_import(self): iati_activity_id = self.get_attrib(partnership, 'activity-id', 'iati_activity_id') funding_amount = self.get_attrib( - partnership, akvo_ns('funding-amount'), 'funding_amount', None) + partnership, akvo_ns('funding-amount'), 'funding_amount', None) if funding_amount: funding_amount_present = True funding_amount = self.cast_to_decimal( - funding_amount, 'participating-org', 'funding_amount') + funding_amount, 'participating-org', 'funding_amount') if not (organisation and organisation_role): self.add_log('participating-org', 'participating_org', @@ -81,12 +81,12 @@ def do_import(self): ) if created: changes.append(u'added partnership (id: {}): {}'.format( - partnership_obj.pk, partnership_obj)) + partnership_obj.pk, partnership_obj)) imported_partnerships.append(partnership_obj) changes += self.delete_objects( - self.project.partnerships.filter(iati_organisation_role__lt=100), - imported_partnerships, 'partnership') + self.project.partnerships.filter(iati_organisation_role__lt=100), + imported_partnerships, 'partnership') if not funding_amount_present: funding_partners = self.project.partnerships.filter(iati_organisation_role=1) @@ -99,6 +99,6 @@ def do_import(self): funding_partner.funding_amount = average_budget funding_partner.save() changes.append( - u'updated funding amount for partnership (id: {}): {}'.format( - funding_partner.pk, funding_partner)) + u'updated funding amount for partnership (id: {}): {}'.format( + funding_partner.pk, funding_partner)) return changes diff --git a/akvo/iati/imports/mappers/related_projects.py b/akvo/iati/imports/mappers/related_projects.py index 8e1fcfed40..f2cd572eac 100644 --- a/akvo/iati/imports/mappers/related_projects.py +++ b/akvo/iati/imports/mappers/related_projects.py @@ -55,5 +55,5 @@ def do_import(self): imported_related_projects.append(rp) changes += self.delete_objects( - self.project.related_projects, imported_related_projects, 'related project') + self.project.related_projects, imported_related_projects, 'related project') return changes diff --git a/akvo/iati/imports/mappers/results.py b/akvo/iati/imports/mappers/results.py index 95428dd5e3..39bb9fb4f9 100644 --- a/akvo/iati/imports/mappers/results.py +++ b/akvo/iati/imports/mappers/results.py @@ -95,10 +95,10 @@ def do_import(self): baseline_element = indicator.find('baseline') if baseline_element is not None: baseline_year = self.get_attrib_as_int( - baseline_element, 'year', 'baseline_year', None) + baseline_element, 'year', 'baseline_year', None) baseline_value = self.get_attrib(baseline_element, 'value', 'baseline_value') baseline_comment = self.get_child_element_text( - baseline_element, 'comment', 'baseline_comment') + baseline_element, 'comment', 'baseline_comment') else: baseline_year = None baseline_value = '' @@ -118,7 +118,7 @@ def do_import(self): if not indicator_obj in imported_indicators: if created: changes.append(u'added indicator (id: {}): {}'.format( - indicator_obj.pk, indicator_obj)) + indicator_obj.pk, indicator_obj)) imported_indicators.append(indicator_obj) # Process indicator references @@ -135,7 +135,7 @@ def do_import(self): changes.append(period_change) changes += self.delete_objects( - self.related_obj.indicators, imported_indicators, 'indicator') + self.related_obj.indicators, imported_indicators, 'indicator') return changes @@ -200,7 +200,7 @@ def do_import(self): for period in self.parent_elem.findall('period'): period_start = self.get_child_as_date( - period, 'period-start', 'iso-date', 'period_start') + period, 'period-start', 'iso-date', 'period_start') period_end = self.get_child_as_date(period, 'period-end', 'iso-date', 'period_end') target_element = period.find('target') @@ -266,7 +266,7 @@ def do_import(self): changes.append(location_change) changes += self.delete_objects( - self.related_obj.periods, imported_periods, 'indicator period') + self.related_obj.periods, imported_periods, 'indicator period') return changes @@ -344,7 +344,7 @@ class PeriodActualDimensions(ImportMapper): def __init__(self, iati_import_job, parent_elem, project, globals, related_obj=None): super(PeriodActualDimensions, self).__init__(iati_import_job, parent_elem, project, globals, - related_obj) + related_obj) self.model = IndicatorPeriodActualDimension def do_import(self): @@ -381,7 +381,7 @@ class PeriodTargetDimensions(ImportMapper): def __init__(self, iati_import_job, parent_elem, project, globals, related_obj=None): super(PeriodTargetDimensions, self).__init__(iati_import_job, parent_elem, project, globals, - related_obj) + related_obj) self.model = IndicatorPeriodTargetDimension def do_import(self): diff --git a/akvo/iati/imports/mappers/special_reporting.py b/akvo/iati/imports/mappers/special_reporting.py index 9aefd7613f..bd1983761e 100644 --- a/akvo/iati/imports/mappers/special_reporting.py +++ b/akvo/iati/imports/mappers/special_reporting.py @@ -48,7 +48,7 @@ def do_import(self): ) if created: changes.append(u'added legacy data (id: {}): {}'.format( - legacy_obj.pk, legacy_obj)) + legacy_obj.pk, legacy_obj)) imported_lds.append(legacy_obj) changes += self.delete_objects(self.project.legacy_data, imported_lds, 'legacy data') @@ -78,21 +78,21 @@ def do_import(self): if loan_terms_element is not None: loan_terms_rate1 = self.get_attrib( - loan_terms_element, 'rate-1', 'loan_terms_rate1', None) + loan_terms_element, 'rate-1', 'loan_terms_rate1', None) loan_terms_rate2 = self.get_attrib( - loan_terms_element, 'rate-2', 'loan_terms_rate2', None) + loan_terms_element, 'rate-2', 'loan_terms_rate2', None) repayment_type = self.get_child_elem_attrib( - loan_terms_element, 'repayment-type', 'code', 'repayment_type') + loan_terms_element, 'repayment-type', 'code', 'repayment_type') repayment_plan = self.get_child_elem_attrib( - loan_terms_element, 'repayment-plan', 'code', 'repayment_plan') + loan_terms_element, 'repayment-plan', 'code', 'repayment_plan') commitment_date = self.get_child_as_date( - loan_terms_element, 'commitment-date', 'iso-date', 'commitment_date') + loan_terms_element, 'commitment-date', 'iso-date', 'commitment_date') repayment_first_date = self.get_child_as_date( - loan_terms_element, 'repayment-first-date', 'iso-date', - 'repayment_first_date') + loan_terms_element, 'repayment-first-date', 'iso-date', + 'repayment_first_date') repayment_final_date = self.get_child_as_date( - loan_terms_element, 'repayment-final-date', 'iso-date', - 'repayment_final_date') + loan_terms_element, 'repayment-final-date', 'iso-date', + 'repayment_final_date') else: loan_terms_rate1 = None @@ -107,19 +107,19 @@ def do_import(self): if loan_status_element is not None: loan_status_year = self.get_attrib_as_int( - loan_status_element, 'year', 'loan_status_year', None) + loan_status_element, 'year', 'loan_status_year', None) loan_status_currency = self.get_attrib( - loan_status_element, 'currency', 'loan_status_currency') + loan_status_element, 'currency', 'loan_status_currency') loan_status_value_date = self.get_date( loan_status_element, 'value-date', 'loan_status_value_date') interest_received = self.get_child_element_text_as_decimal( - loan_status_element, 'interest-received', 'interest_received', None) + loan_status_element, 'interest-received', 'interest_received', None) principal_outstanding = self.get_child_element_text_as_decimal( - loan_status_element, 'principal-outstanding', 'principal_outstanding', None) + loan_status_element, 'principal-outstanding', 'principal_outstanding', None) principal_arrears = self.get_child_element_text_as_decimal( - loan_status_element, 'principal-arrears', 'principal_arrears', None) + loan_status_element, 'principal-arrears', 'principal_arrears', None) interest_arrears = self.get_child_element_text_as_decimal( - loan_status_element, 'interest-arrears', 'interest_arrears', None) + loan_status_element, 'interest-arrears', 'interest_arrears', None) else: loan_status_year = None @@ -150,7 +150,7 @@ def do_import(self): channel_code=channel_code ) crs_obj, created = CrsAdd.objects.update_or_create( - project=self.project, defaults=defaults) + project=self.project, defaults=defaults) if created: changes.append(u'added CRS++ (id: {})'.format(crs_obj.pk)) @@ -214,7 +214,7 @@ def do_import(self): priority = self.to_boolean(priority) phaseout_year = self.get_attrib_as_int( - fss_element, 'phaseout-year', 'phaseout_year', None) + fss_element, 'phaseout-year', 'phaseout_year', None) defaults = dict( extraction_date=extraction_date, diff --git a/akvo/rest/views/project_location.py b/akvo/rest/views/project_location.py index e51f36774d..1d7a2560c2 100644 --- a/akvo/rest/views/project_location.py +++ b/akvo/rest/views/project_location.py @@ -42,8 +42,8 @@ class MapProjectLocationViewSet(BaseRSRViewSet): paginate_by = 100 # TODO: shouldn't this be subject to private project filtering? queryset = ProjectLocation.objects.select_related('location_target', 'country').only( - 'id', 'latitude', 'longitude', - 'location_target__id', 'location_target__title', - 'location_target__current_image', - 'country' + 'id', 'latitude', 'longitude', + 'location_target__id', 'location_target__title', + 'location_target__current_image', + 'country' ) diff --git a/akvo/rest/views/project_update_location.py b/akvo/rest/views/project_update_location.py index 7828375576..7b0a7052c4 100644 --- a/akvo/rest/views/project_update_location.py +++ b/akvo/rest/views/project_update_location.py @@ -35,10 +35,10 @@ class MapProjectUpdateLocationViewSet(BaseRSRViewSet): paginate_by = 100 # TODO: shouldn't this be subject to private project filtering? queryset = ProjectUpdateLocation.objects.select_related( - 'location_target', - 'location_target__project' - ).only( - 'id', 'latitude', 'longitude', 'location_target__id', 'location_target__project', - 'location_target__title', 'location_target__photo', 'location_target__video' - ) + 'location_target', + 'location_target__project' + ).only( + 'id', 'latitude', 'longitude', 'location_target__id', 'location_target__project', + 'location_target__title', 'location_target__photo', 'location_target__video' + ) serializer_class = MapProjectUpdateLocationSerializer diff --git a/akvo/rsr/admin.py b/akvo/rsr/admin.py index c277b8255e..70c316344b 100644 --- a/akvo/rsr/admin.py +++ b/akvo/rsr/admin.py @@ -766,7 +766,7 @@ class TransactionInline(NestedStackedInline): }), ('IATI fields (advanced)', { 'classes': ('collapse',), - 'fields': ('currency', 'value_date', 'provider_organisation', + 'fields': ('currency', 'value_date', 'provider_organisation', 'provider_organisation_activity', 'receiver_organisation', 'receiver_organisation_activity', 'aid_type', 'disbursement_channel', 'finance_type', 'flow_type', 'tied_status', 'recipient_country', @@ -958,7 +958,7 @@ class ProjectAdmin(TimestampsAdminDisplayMixin, ObjectPermissionsModelAdmin, Nes search_fields = ('title', 'subtitle', 'project_plan_summary', 'iati_activity_id',) list_filter = ('currency', 'status', 'keywords',) # created_at and last_modified_at MUST be readonly since they have the auto_now/_add attributes - readonly_fields = ('budget', 'funds', 'funds_needed', 'created_at', 'last_modified_at', + readonly_fields = ('budget', 'funds', 'funds_needed', 'created_at', 'last_modified_at', 'last_update') def __init__(self, model, admin_site): diff --git a/akvo/rsr/feeds.py b/akvo/rsr/feeds.py index 7f61b33aeb..100f928205 100644 --- a/akvo/rsr/feeds.py +++ b/akvo/rsr/feeds.py @@ -27,8 +27,8 @@ def __dict_replace(s, d): def __escape(data, entities): # must do ampersand first data = data.replace("&", "&") - data = data.replace(">", ">") - data = data.replace("<", "<") + data = data.replace(">", ">") + data = data.replace("<", "<") if entities: data = __dict_replace(data, entities) return data @@ -85,8 +85,8 @@ def addQuickElement(self, name, contents=None, attrs=None): class RSRMediaRssFeed(Rss201rev2Feed): def rss_attributes(self): attrs = super(RSRMediaRssFeed, self).rss_attributes() - attrs['xmlns:media'] = 'http://search.yahoo.com/mrss/' - attrs['xmlns:atom'] = 'http://www.w3.org/2005/Atom' + attrs['xmlns:media'] = 'http://search.yahoo.com/mrss/' + attrs['xmlns:atom'] = 'http://www.w3.org/2005/Atom' return attrs def add_item_elements(self, handler, item): diff --git a/akvo/rsr/forms.py b/akvo/rsr/forms.py index 2cce5d8353..19d4aad001 100644 --- a/akvo/rsr/forms.py +++ b/akvo/rsr/forms.py @@ -283,11 +283,11 @@ class ProjectUpdateForm(forms.ModelForm): 'size': '42', 'maxlength': '80', 'placeholder': _(u'Title'), - })) + })) text = forms.CharField(label='', required=False, widget=forms.Textarea(attrs={ 'class': 'textarea', 'placeholder': _(u'Description'), - })) + })) language = forms.ChoiceField(choices=settings.LANGUAGES, initial='en') photo = forms.ImageField(required=False, widget=forms.FileInput(attrs={ @@ -295,37 +295,37 @@ class ProjectUpdateForm(forms.ModelForm): 'size': '15', }), help_text=_(u'Please upload an image of 2 MB or less.'), - ) + ) photo_caption = forms.CharField(label='', required=False, widget=forms.TextInput(attrs={ 'class': 'input', 'size': '25', 'maxlength': '75', 'placeholder': _(u'Photo caption'), - })) + })) photo_credit = forms.CharField(label='', required=False, widget=forms.TextInput(attrs={ 'class': 'input', 'size': '25', 'maxlength': '75', 'placeholder': _(u'Photo credit'), - })) + })) video = forms.CharField(required=False, widget=forms.TextInput(attrs={ 'class': 'input', 'size': '42', 'maxlength': '255', 'placeholder': _(u'Video link'), - })) + })) video_caption = forms.CharField(label='', required=False, widget=forms.TextInput(attrs={ 'class': 'input', 'size': '25', 'maxlength': '75', 'placeholder': _(u'Video caption'), - })) + })) video_credit = forms.CharField(label='', required=False, widget=forms.TextInput(attrs={ 'class': 'input', 'size': '25', 'maxlength': '75', 'placeholder': _(u'Video credit'), - })) + })) latitude = forms.FloatField(widget=forms.HiddenInput()) longitude = forms.FloatField(widget=forms.HiddenInput()) diff --git a/akvo/rsr/management/commands/check_project_creators.py b/akvo/rsr/management/commands/check_project_creators.py index 08a07ac67a..4ddf0d34b3 100644 --- a/akvo/rsr/management/commands/check_project_creators.py +++ b/akvo/rsr/management/commands/check_project_creators.py @@ -26,10 +26,10 @@ def handle(self, *args, **options): for project in Project.objects.all().prefetch_related('partners').select_related('sync_owner)'): if not project.partners.filter(Q(can_create_projects=True) | Q(name__icontains='akvo')): self.stdout.write(u'{},"{}",{},"{}"'.format( - project.pk, - project.title, - project.sync_owner.pk if project.sync_owner else "", - project.sync_owner.name if project.sync_owner else "", - )) + project.pk, + project.title, + project.sync_owner.pk if project.sync_owner else "", + project.sync_owner.name if project.sync_owner else "", + )) self.stdout.write("\nDone!") diff --git a/akvo/rsr/management/commands/fix_latest_update.py b/akvo/rsr/management/commands/fix_latest_update.py index 79d32c0974..838d714f60 100644 --- a/akvo/rsr/management/commands/fix_latest_update.py +++ b/akvo/rsr/management/commands/fix_latest_update.py @@ -22,9 +22,9 @@ def handle(self, *args, **options): This fixes a bug that was introduced when updates could be deleted. """ sys.stdout.write(u"Fix latest update for projects" - "\n+ means latest update added" - "\n. means no change" - "\n! means project has no updates\n\n") + "\n+ means latest update added" + "\n. means no change" + "\n! means project has no updates\n\n") for project in Project.objects.all().prefetch_related( Prefetch( "project_updates", diff --git a/akvo/rsr/management/commands/lock_unlock_periods.py b/akvo/rsr/management/commands/lock_unlock_periods.py index 04d83af4a2..75ecbacd64 100644 --- a/akvo/rsr/management/commands/lock_unlock_periods.py +++ b/akvo/rsr/management/commands/lock_unlock_periods.py @@ -21,7 +21,7 @@ class Command(BaseCommand): make_option('-k', '--keyword', action='store', dest='keyword', help='Keyword to use for filtering Indicator Periods'), - ) + ) def handle(self, *args, **options): diff --git a/akvo/rsr/management/commands/project_cleanup.py b/akvo/rsr/management/commands/project_cleanup.py index 4c0f02d023..2b74ad7ee3 100644 --- a/akvo/rsr/management/commands/project_cleanup.py +++ b/akvo/rsr/management/commands/project_cleanup.py @@ -25,7 +25,7 @@ class Command(BaseCommand): action='store_true', dest='delete', default=False, help='Delete filtered projects in addition to listing them'), - ) + ) def handle(self, *args, **options): diff --git a/akvo/rsr/management/commands/reporting_orgs.py b/akvo/rsr/management/commands/reporting_orgs.py index 59badc508c..fd564f5dd2 100644 --- a/akvo/rsr/management/commands/reporting_orgs.py +++ b/akvo/rsr/management/commands/reporting_orgs.py @@ -137,14 +137,14 @@ def print_ok_data(self, data): def print_fix_data(self, data, partner): self.stdout.write( - u'{},"{}",{},"{}","{}",{},"{}"'.format( - data.project.id, - data.project.title, - partner.organisation.id, - partner.organisation.name, - data.reason, - data.sync_owner.id if data.sync_owner else '', - data.sync_owner.name if data.sync_owner else '')) + u'{},"{}",{},"{}","{}",{},"{}"'.format( + data.project.id, + data.project.title, + partner.organisation.id, + partner.organisation.name, + data.reason, + data.sync_owner.id if data.sync_owner else '', + data.sync_owner.name if data.sync_owner else '')) def output_ok_list(self): self.stdout.write( diff --git a/akvo/rsr/management/commands/user_cleanup.py b/akvo/rsr/management/commands/user_cleanup.py index 3d4ea29a06..ba86b1c574 100644 --- a/akvo/rsr/management/commands/user_cleanup.py +++ b/akvo/rsr/management/commands/user_cleanup.py @@ -23,9 +23,9 @@ class Command(BaseCommand): default=7, help='Filter users who joined more than \'n\' days ago'), make_option('-d', '--delete', - action='store_true', dest='delete', - default=False, - help='Delete filtered users in addition to listing them'), + action='store_true', dest='delete', + default=False, + help='Delete filtered users in addition to listing them'), make_option('-i', '--inactive', action='store_true', dest='inactive', default=False, @@ -34,7 +34,7 @@ class Command(BaseCommand): action='store_true', dest='no_employment', default=False, help='Filter users lacking employment'), - ) + ) def handle(self, *args, **options): @@ -90,8 +90,8 @@ def handle(self, *args, **options): if delete: if verbosity > 0: self.stdout.write('%s user(s) matched filter and were successfully removed.' - % (len(set(list(chain(non_active, no_employment)))))) + % (len(set(list(chain(non_active, no_employment)))))) else: if verbosity > 0: self.stdout.write('%s user(s) matched filter, use \'-d\' flag to remove them.' - % (len(set(list(chain(non_active, no_employment)))))) + % (len(set(list(chain(non_active, no_employment)))))) diff --git a/akvo/rsr/models/budget_item.py b/akvo/rsr/models/budget_item.py index 7e1559fb04..0b55ce5d29 100644 --- a/akvo/rsr/models/budget_item.py +++ b/akvo/rsr/models/budget_item.py @@ -108,7 +108,7 @@ def clean(self): {'period_start': u'%s' % _(u'Period start cannot be at a later time than period ' u'end.'), 'period_end': u'%s' % _(u'Period start cannot be at a later time than period ' - u'end.')} + u'end.')} ) def get_label(self): diff --git a/akvo/rsr/models/focus_area.py b/akvo/rsr/models/focus_area.py index 5f9c739269..04c2637d8f 100644 --- a/akvo/rsr/models/focus_area.py +++ b/akvo/rsr/models/focus_area.py @@ -46,7 +46,7 @@ class FocusArea(models.Model): upload_to=image_path, help_text=_(u'The image that will appear on the focus area project ' u'listing page.'), - ) + ) link_to = models.URLField( _(u'accordion link'), max_length=200, diff --git a/akvo/rsr/models/iati_activity_import.py b/akvo/rsr/models/iati_activity_import.py index 1f739cc368..eea2b94b2b 100644 --- a/akvo/rsr/models/iati_activity_import.py +++ b/akvo/rsr/models/iati_activity_import.py @@ -50,7 +50,7 @@ class IatiActivityImport(TimestampsMixin): iati_import_job = models.ForeignKey('IatiImportJob', related_name='iati_activity_imports') project = models.ForeignKey( - 'Project', verbose_name=_(u'project'), related_name='iati_project_imports', null=True) + 'Project', verbose_name=_(u'project'), related_name='iati_project_imports', null=True) activity_xml = models.TextField(verbose_name=_('activity xml')) sha1_hexdigest = models.CharField( max_length=40, verbose_name=_(u'sha1 hexadecimal digest of the activity XML'), blank=True, ) @@ -65,7 +65,7 @@ def __init__(self, *args, **kwargs): def __unicode__(self): return unicode(u'IATI activity import (ID: {}) in job {}'.format( - getattr(self, 'pk', ''), self.iati_import_job)) + getattr(self, 'pk', ''), self.iati_import_job)) # return unicode(u'IATI activity import (ID: {})'.format(getattr(self, 'pk', ''))) class Meta: @@ -101,7 +101,7 @@ def publish(self): if self.project.is_published(): return - if self.activity.attrib.get('{{{}}}publish'.format(settings.AKVO_NS), '').lower() == 'false': + if self.activity.attrib.get('{{{}}}publish'.format(settings.AKVO_NS), '').lower() == 'false': return try: @@ -154,14 +154,14 @@ def add_log(self, tag='', field='', text='', message_type=LOG_ENTRY_TYPE.VALUE_N text = "IatiActivityImport.{}(): {}".format(caller, text) self._log_objects += [IatiImportLog( - iati_import_job=self.iati_import_job, - project=self.project, - iati_activity_import=self, - message_type=message_type, - tag=tag, - field=field, - text=text, - created_at=datetime.now(), + iati_import_job=self.iati_import_job, + project=self.project, + iati_activity_import=self, + message_type=message_type, + tag=tag, + field=field, + text=text, + created_at=datetime.now(), )] def set_reporting_org(self): @@ -186,9 +186,9 @@ def set_reporting_org(self): if not organisation.can_create_projects: self.add_log('reporting-org', 'reporting_org', - 'Reporting organisation, {}, ID: {}, not allowed to import projects in RSR.'.format( - organisation.name, organisation.id - ), LOG_ENTRY_TYPE.CRITICAL_ERROR) + 'Reporting organisation, {}, ID: {}, not allowed to import projects in RSR.'.format( + organisation.name, organisation.id + ), LOG_ENTRY_TYPE.CRITICAL_ERROR) return False try: @@ -237,7 +237,7 @@ def get_or_create_project(self): ) if created: self.create_log_entry( - LOG_ENTRY_TYPE.ACTION_CREATE, u'IATI activity import, created project.') + LOG_ENTRY_TYPE.ACTION_CREATE, u'IATI activity import, created project.') return created @@ -257,11 +257,11 @@ def activity_has_changed(self): iati_import_job__iati_import=self.iati_import_job.iati_import, ).values_list('iati_import_job', flat=True) previous_job = IatiImportJob.objects.filter( - iati_import=self.iati_import_job.iati_import - ).exclude( - pk=self.iati_import_job.pk - ).exclude( - pk__in=cancelled_jobs).latest() + iati_import=self.iati_import_job.iati_import + ).exclude( + pk=self.iati_import_job.pk + ).exclude( + pk__in=cancelled_jobs).latest() except IatiImportJob.DoesNotExist: previous_job = None @@ -327,7 +327,7 @@ def do_import(self, activities_globals): tag='', field='', text="Exception in {}, error message: \n{}".format( - Klass.__name__, e.message,), + Klass.__name__, e.message,), created_at=datetime.now() )] if changes: diff --git a/akvo/rsr/models/iati_import.py b/akvo/rsr/models/iati_import.py index 886a96849d..23be280483 100644 --- a/akvo/rsr/models/iati_import.py +++ b/akvo/rsr/models/iati_import.py @@ -110,22 +110,22 @@ class IatiImport(models.Model): label = models.CharField(max_length=50, verbose_name=_(u'label'), unique=True) next_execution = models.DateTimeField( - verbose_name=_(u'next time the import is run'), null=True, blank=True) + verbose_name=_(u'next time the import is run'), null=True, blank=True) frequency = models.PositiveIntegerField(choices=FREQUENCIES, null=True, blank=True, help_text='Set the frequency interval of the import') user = models.ForeignKey( - settings.AUTH_USER_MODEL, verbose_name=_(u'user'), related_name='iati_imports',) + settings.AUTH_USER_MODEL, verbose_name=_(u'user'), related_name='iati_imports',) url = models.URLField(_(u'url'), blank=True) mapper_prefix = models.CharField( - max_length=30, verbose_name=_(u'Custom mappers'), blank=True, choices=custom_mappers(), - help_text='Choose a custom mapper to invoke custom behaviour for this import') + max_length=30, verbose_name=_(u'Custom mappers'), blank=True, choices=custom_mappers(), + help_text='Choose a custom mapper to invoke custom behaviour for this import') enabled = models.BooleanField(verbose_name=_(u'importing enabled'), default=False, help_text='Set to enable running of this import.') run_immediately = models.BooleanField(verbose_name=_(u'run immediately'), default=False, - help_text='Run the job immediately.') + help_text='Run the job immediately.') running = models.BooleanField(verbose_name=_(u'import currently running'), default=False, - help_text='Running is set while the import executes. This is to guarantee that the same ' - 'import never runs twice (or more) in parallel.') + help_text='Running is set while the import executes. This is to guarantee that the same ' + 'import never runs twice (or more) in parallel.') def __unicode__(self): @@ -136,7 +136,7 @@ class Meta: verbose_name = _(u'IATI import') verbose_name_plural = _(u'IATI imports') - def model_mappers(self): + def model_mappers(self): """ Import the ImportMapper subclasses for this IatiImport instance. See ImportMapper docstring for more info. @@ -163,7 +163,7 @@ def model_mappers(self): # with classes we find in the submodule if self.mapper_prefix: module = import_module( - 'akvo.iati.imports.mappers.{}'.format(self.mapper_prefix)) + 'akvo.iati.imports.mappers.{}'.format(self.mapper_prefix)) if getattr(module, class_name, None): klass = getattr(module, class_name) klasses.append(klass) diff --git a/akvo/rsr/models/iati_import_job.py b/akvo/rsr/models/iati_import_job.py index c6be4faa4b..0fe9256544 100644 --- a/akvo/rsr/models/iati_import_job.py +++ b/akvo/rsr/models/iati_import_job.py @@ -68,12 +68,12 @@ class IatiImportJob(models.Model): iati_import = models.ForeignKey('IatiImport', related_name='jobs') iati_xml_file = models.FileField(_(u'local file'), blank=True, upload_to=file_path) status = models.PositiveSmallIntegerField( - _(u'status'), choices=STATUS_CODES, default=LOG_ENTRY_TYPE.STATUS_PENDING) + _(u'status'), choices=STATUS_CODES, default=LOG_ENTRY_TYPE.STATUS_PENDING) projects = models.ManyToManyField( 'Project', verbose_name=_(u'projects'), through='IatiActivityImport', blank=True ) sha1_hexdigest = models.CharField( - max_length=40, verbose_name=_(u'sha1 hexadecimal digest of the XML file'), blank=True,) + max_length=40, verbose_name=_(u'sha1 hexadecimal digest of the XML file'), blank=True,) def __init__(self, *args, **kwargs): self._log_objects = [] @@ -133,8 +133,8 @@ def save_import_logs(self, iati_activity_import): def admin_url(self): return u'{}'.format( - urlresolvers.reverse('admin:rsr_iatiimportjob_change', args=(self.pk,)), - self.__unicode__()) + urlresolvers.reverse('admin:rsr_iatiimportjob_change', args=(self.pk,)), + self.__unicode__()) admin_url.short_description = "IATI import job" admin_url.allow_tags = True @@ -157,12 +157,12 @@ def get_log_list(self, type): """ if type == self.CRITICAL_LOG: logs = self.iati_import_logs.filter( - message_type=LOG_ENTRY_TYPE.CRITICAL_ERROR, iati_import_job=self) + message_type=LOG_ENTRY_TYPE.CRITICAL_ERROR, iati_import_job=self) elif type == self.WARNINGS_LOG: logs = self.iati_import_logs.filter( - message_type__in=[LOG_ENTRY_TYPE.VALUE_PARTLY_SAVED, - LOG_ENTRY_TYPE.VALUE_NOT_SAVED], - iati_import_job=self + message_type__in=[LOG_ENTRY_TYPE.VALUE_PARTLY_SAVED, + LOG_ENTRY_TYPE.VALUE_NOT_SAVED], + iati_import_job=self ) elif type == self.FULL_LOG: logs = self.iati_import_logs.filter(iati_import_job=self) @@ -170,15 +170,15 @@ def get_log_list(self, type): logs = [] records = [ - [ - log.created_at, - log.project.pk if log.project else '', - log.project.iati_activity_id if log.project else '', - log.show_message_type(), - log.text, - log.tag, - log.model_field() - ] for log in logs] + [ + log.created_at, + log.project.pk if log.project else '', + log.project.iati_activity_id if log.project else '', + log.show_message_type(), + log.text, + log.tag, + log.model_field() + ] for log in logs] headers = ['Timestamp', 'Project ID', 'Message type', 'Text', 'Tag', 'Model', 'Field'] return headers, records @@ -219,19 +219,19 @@ def send_mail(self): 'iati_import_job': self, 'project_count': self.projects.count(), 'projects_created': self.iati_import_logs.filter( - message_type=LOG_ENTRY_TYPE.ACTION_CREATE).count(), + message_type=LOG_ENTRY_TYPE.ACTION_CREATE).count(), 'projects_updated': self.iati_import_logs.filter( - message_type=LOG_ENTRY_TYPE.ACTION_UPDATE).count(), + message_type=LOG_ENTRY_TYPE.ACTION_UPDATE).count(), 'projects_published': self.projects.all().published().count(), 'critical_errors_log': self.iati_import_logs.filter( - message_type=LOG_ENTRY_TYPE.CRITICAL_ERROR), + message_type=LOG_ENTRY_TYPE.CRITICAL_ERROR), 'warnings_log': self.iati_import_logs.filter( - message_type__in=[LOG_ENTRY_TYPE.VALUE_PARTLY_SAVED, - LOG_ENTRY_TYPE.VALUE_NOT_SAVED] + message_type__in=[LOG_ENTRY_TYPE.VALUE_PARTLY_SAVED, + LOG_ENTRY_TYPE.VALUE_NOT_SAVED] ), 'projects_log': self.iati_import_logs.filter( - message_type__in=[LOG_ENTRY_TYPE.ACTION_CREATE, - LOG_ENTRY_TYPE.ACTION_UPDATE] + message_type__in=[LOG_ENTRY_TYPE.ACTION_CREATE, + LOG_ENTRY_TYPE.ACTION_UPDATE] ), 'full_log': self.iati_import_logs.filter(iati_import_job=self), 'LOG_ENTRY_TYPE': LOG_ENTRY_TYPE, @@ -250,7 +250,7 @@ def check_version(self): return True else: self.add_log( - 'IATI Version %s not supported' % version, LOG_ENTRY_TYPE.CRITICAL_ERROR) + 'IATI Version %s not supported' % version, LOG_ENTRY_TYPE.CRITICAL_ERROR) else: self.add_log('No version specified', LOG_ENTRY_TYPE.CRITICAL_ERROR) self.add_log(u"Import cancelled. IATI file version error.", LOG_ENTRY_TYPE.STATUS_CANCELLED) @@ -338,7 +338,7 @@ def check_file(self): 'Error message:\n{}'.format(e.message), LOG_ENTRY_TYPE.CRITICAL_ERROR) else: - # No file or URL specified. + # No file or URL specified. self.add_log('No file or URL specified', LOG_ENTRY_TYPE.CRITICAL_ERROR) self.add_log(u"Import cancelled. File missing.", LOG_ENTRY_TYPE.STATUS_CANCELLED) @@ -366,7 +366,7 @@ def is_new_file(self): # TODO: this filter fails when the previous job completed, but no activities were # imported. This can happen if the reporting-org isn't allowed to create projects previous_job = self.iati_import.jobs.exclude(pk=self.pk).filter( - status=LOG_ENTRY_TYPE.STATUS_COMPLETED).latest() + status=LOG_ENTRY_TYPE.STATUS_COMPLETED).latest() except IatiImportJob.DoesNotExist: previous_job = None @@ -397,7 +397,7 @@ def run(self): try: with transaction.atomic(): iati_activity_import = IatiActivityImport( - iati_import_job=self, activity_xml=etree.tostring(activity)) + iati_import_job=self, activity_xml=etree.tostring(activity)) iati_activity_import.do_import(self.activities.attrib) iati_activity_import.save() @@ -462,13 +462,13 @@ def import_organisations(self): updated_count += 1 except Exception as e: self.add_log( - u'CordaidZip: Critical error when importing ' - u'organisations: {}'.format(e.message), - LOG_ENTRY_TYPE.CRITICAL_ERROR) + u'CordaidZip: Critical error when importing ' + u'organisations: {}'.format(e.message), + LOG_ENTRY_TYPE.CRITICAL_ERROR) self.add_log(u'CordaidZip: Organisations import done. ' u'{} organisations created, {} organisations updated'.format( - created_count, updated_count), + created_count, updated_count), LOG_ENTRY_TYPE.INFORMATIONAL) def create_log_entry(self, organisation, action_flag=LOG_ENTRY_TYPE.ACTION_UPDATE, @@ -503,7 +503,7 @@ def log_creation(self, organisation): Log the creation of an organisation in the LogEntry model. """ message = u"CordaidZip: IATI activity import, created organisation: {}.".format( - organisation.__unicode__()) + organisation.__unicode__()) self.create_log_entry(organisation, LOG_ENTRY_TYPE.ACTION_CREATE, message) def parse_xml(self, xml_file, root_tag='', children_tag=''): @@ -531,9 +531,9 @@ def parse_xml(self, xml_file, root_tag='', children_tag=''): if objects_root.tag == root_tag: self._objects_root = objects_root self.add_log( - 'CordaidZip: Retrieved {} <{}> objects'.format( - len(objects_root.findall(children_tag)), children_tag), - LOG_ENTRY_TYPE.INFORMATIONAL) + 'CordaidZip: Retrieved {} <{}> objects'.format( + len(objects_root.findall(children_tag)), children_tag), + LOG_ENTRY_TYPE.INFORMATIONAL) return True else: self.add_log('CordaidZip: Not a valid XML file, ' diff --git a/akvo/rsr/models/iati_import_log.py b/akvo/rsr/models/iati_import_log.py index 3dfe2109df..d751bc3cd7 100644 --- a/akvo/rsr/models/iati_import_log.py +++ b/akvo/rsr/models/iati_import_log.py @@ -18,18 +18,18 @@ assert DELETION == 3, 'django.contrib.admin.models.DELETION is not equal to 3 any more. Chaos awaits' IatiImportLogCollector = namedtuple('IatiImportLogCollector', - [ - 'iati_import_job', - 'project', - 'activity', - 'message_type', - 'tag', - 'model', - 'field', - 'text', - 'created_at', - ] -) + [ + 'iati_import_job', + 'project', + 'activity', + 'message_type', + 'tag', + 'model', + 'field', + 'text', + 'created_at', + ] + ) LogEntryType = namedtuple( 'LogEntryType', @@ -109,11 +109,11 @@ class IatiImportLog(models.Model): iati_activity_import = models.ForeignKey('IatiActivityImport', verbose_name=_(u'activity'), blank=True, null=True,) message_type = models.PositiveSmallIntegerField( - verbose_name=_(u'type of message'), choices=MESSAGE_TYPE_CODES, - default=LOG_ENTRY_TYPE.CRITICAL_ERROR) + verbose_name=_(u'type of message'), choices=MESSAGE_TYPE_CODES, + default=LOG_ENTRY_TYPE.CRITICAL_ERROR) tag = ValidXMLCharField(_(u'xml tag'), max_length=100, default='',) model = ValidXMLCharField(_(u'model'), max_length=255, default='',) - field = ValidXMLCharField(_(u'field'), max_length=100, default='',) + field = ValidXMLCharField(_(u'field'), max_length=100, default='',) text = ValidXMLTextField(_(u'text')) created_at = models.DateTimeField(db_index=True, editable=False) diff --git a/akvo/rsr/models/organisation.py b/akvo/rsr/models/organisation.py index 7d40652744..1b4725ec15 100644 --- a/akvo/rsr/models/organisation.py +++ b/akvo/rsr/models/organisation.py @@ -72,8 +72,8 @@ def org_type_from_iati_type(cls, iati_type): """ utility that maps the IATI organisation types to the old Akvo organisation types """ types = dict(zip([int(type) for type, name in ORGANISATION_TYPE[1:]], - cls.NEW_TO_OLD_TYPES - )) + cls.NEW_TO_OLD_TYPES + )) return types[iati_type] name = ValidXMLCharField( @@ -115,7 +115,7 @@ def org_type_from_iati_type(cls, iati_type): logo = ImageField(_(u'logo'), blank=True, upload_to=image_path, help_text=_(u'Logos should be approximately 360x270 pixels ' u'(approx. 100-200kB in size) on a white background.') - ) + ) url = models.URLField( blank=True, help_text=_(u'Enter the full address of your web site, beginning with http://.'), @@ -207,7 +207,7 @@ def clean(self): if name and names.exists(): validation_errors['name'] = u'{}: {}'.format( - _('An Organisation with this name already exists'), name) + _('An Organisation with this name already exists'), name) elif not name: # This prevents organisation names with only spaces validation_errors['name'] = _(u'Organisation name may not be blank') diff --git a/akvo/rsr/models/planned_disbursement.py b/akvo/rsr/models/planned_disbursement.py index b8f3fd6bcc..863a022c3a 100644 --- a/akvo/rsr/models/planned_disbursement.py +++ b/akvo/rsr/models/planned_disbursement.py @@ -101,7 +101,7 @@ def clean(self): {'period_start': u'%s' % _(u'Period start cannot be at a later time than period ' u'end.'), 'period_end': u'%s' % _(u'Period start cannot be at a later time than period ' - u'end.')} + u'end.')} ) class Meta: diff --git a/akvo/rsr/models/publishing_status.py b/akvo/rsr/models/publishing_status.py index ae8e79d120..66163db937 100644 --- a/akvo/rsr/models/publishing_status.py +++ b/akvo/rsr/models/publishing_status.py @@ -90,7 +90,7 @@ def clean(self): validation_errors.append( ValidationError(_('All funding partners should have a funding amount.'), code='partners' - ) + ) ) break diff --git a/akvo/rsr/models/user.py b/akvo/rsr/models/user.py index 00143c6018..08ef200e49 100644 --- a/akvo/rsr/models/user.py +++ b/akvo/rsr/models/user.py @@ -97,7 +97,7 @@ class User(AbstractBaseUser, PermissionsMixin): notes = ValidXMLTextField(verbose_name=_(u'Notes and comments'), blank=True, default='') avatar = ImageField(_(u'avatar'), null=True, upload_to=image_path, help_text=_(u'The avatar should be less than 500 kb in size.'), - ) + ) objects = CustomUserManager() diff --git a/akvo/rsr/permissions.py b/akvo/rsr/permissions.py index 88762b927a..70bbe063cb 100644 --- a/akvo/rsr/permissions.py +++ b/akvo/rsr/permissions.py @@ -69,15 +69,15 @@ def is_org_admin(user, obj): pass try: if obj.period.indicator.result.project and \ - obj.period.indicator.result.project in employment.organisation.\ - all_projects(): + obj.period.indicator.result.project in employment.organisation.\ + all_projects(): return True except: pass try: if obj.data.period.indicator.result.project and \ - obj.data.period.indicator.result.project in employment.organisation.\ - all_projects(): + obj.data.period.indicator.result.project in employment.organisation.\ + all_projects(): return True except: pass @@ -166,15 +166,15 @@ def is_org_project_editor(user, obj): pass try: if obj.period.indicator.result.project and \ - obj.period.indicator.result.project in employment.organisation.\ - all_projects(): + obj.period.indicator.result.project in employment.organisation.\ + all_projects(): return True except: pass try: if obj.data.period.indicator.result.project and \ - obj.data.period.indicator.result.project in employment.organisation.\ - all_projects(): + obj.data.period.indicator.result.project in employment.organisation.\ + all_projects(): return True except: pass diff --git a/akvo/rsr/signals.py b/akvo/rsr/signals.py index b4e996cbb9..00e4f26059 100644 --- a/akvo/rsr/signals.py +++ b/akvo/rsr/signals.py @@ -149,7 +149,7 @@ def act_on_log_entry(sender, **kwargs): """ CRITERIA = [ {'app': 'rsr', 'model': 'project', 'action': ADDITION, 'call': create_benchmark_objects}, - {'app': 'rsr', 'model': 'project', 'action': CHANGE, 'call': create_benchmark_objects}, + {'app': 'rsr', 'model': 'project', 'action': CHANGE, 'call': create_benchmark_objects}, ] if kwargs.get('created', False) and not kwargs.get('raw', False): log_entry = kwargs['instance'] diff --git a/akvo/rsr/templatetags/piwik_tags.py b/akvo/rsr/templatetags/piwik_tags.py index dad719fa5a..1c939f7a60 100644 --- a/akvo/rsr/templatetags/piwik_tags.py +++ b/akvo/rsr/templatetags/piwik_tags.py @@ -36,6 +36,6 @@ def piwik_tracking_code(context): return { 'id': context['request'].rsr_page.piwik_id, 'url': piwik_url - } + } return {'id': piwik_id, 'url': piwik_url} diff --git a/akvo/rsr/templatetags/rsr_tags.py b/akvo/rsr/templatetags/rsr_tags.py index d77c9d031f..90aa2d12c4 100644 --- a/akvo/rsr/templatetags/rsr_tags.py +++ b/akvo/rsr/templatetags/rsr_tags.py @@ -102,7 +102,7 @@ def partner_sites_funding_box(context, project): 'request': context['request'], 'domain_url': context['domain_url'], 'akvoapp_root_url': context['akvoapp_root_url'] - } + } @register.inclusion_tag('inclusion_tags/institutions_sponsor.html', @@ -323,7 +323,7 @@ def hidden_inputs_from_qs(parser, token): 'asc': {'icon': DEFAULT_SORT_UP, 'inverse': 'desc'}, 'desc': {'icon': DEFAULT_SORT_DOWN, 'inverse': 'asc'}, '': {'icon': DEFAULT_SORT_DOWN, 'inverse': 'asc'}, - } +} class SortAnchorNode(template.Node): diff --git a/akvo/rsr/tests/iati_import/test_iati_import.py b/akvo/rsr/tests/iati_import/test_iati_import.py index 76c03f76d6..9dfca5ee8a 100644 --- a/akvo/rsr/tests/iati_import/test_iati_import.py +++ b/akvo/rsr/tests/iati_import/test_iati_import.py @@ -283,7 +283,7 @@ def test_partial_iati_import(self): partial_import_xml_file.write(IATI_PARTIAL_IMPORT) partial_import_xml_file.flush() partial_import_job = IatiImportJob.objects.create( - iati_import=partial_import, iati_xml_file=File(partial_import_xml_file)) + iati_import=partial_import, iati_xml_file=File(partial_import_xml_file)) partial_import_job.run() project_partial_import = Project.objects.get(iati_activity_id="NL-KVK-0987654321-v2") @@ -320,7 +320,7 @@ def test_partial_iati_import(self): self.assertEqual(project_v2.recipient_regions.count(), 3) related_project_1 = project_v2.related_projects.get( - related_iati_id="AA-AAA-123456789-6789") + related_iati_id="AA-AAA-123456789-6789") self.assertIsInstance(related_project_1, RelatedProject) self.assertEqual(project_v2.sectors.count(), 3) self.assertEqual(project_v2.transactions.count(), 1) diff --git a/akvo/rsr/tests/rest/test_project_update.py b/akvo/rsr/tests/rest/test_project_update.py index 7cc2e114a1..d01289e880 100644 --- a/akvo/rsr/tests/rest/test_project_update.py +++ b/akvo/rsr/tests/rest/test_project_update.py @@ -74,7 +74,7 @@ def test_rest_project_update_project_filter(self): self.assertEqual(content['count'], 1) response = self.c.get('/rest/v1/project_update/', - {'format': 'json', 'project__title__exact': 'REST test project'}) + {'format': 'json', 'project__title__exact': 'REST test project'}) self.assertEqual(response.status_code, 200) content = json.loads(response.content) diff --git a/akvo/rsr/tests/up/test_up.py b/akvo/rsr/tests/up/test_up.py index cba619528f..ed62b1524d 100644 --- a/akvo/rsr/tests/up/test_up.py +++ b/akvo/rsr/tests/up/test_up.py @@ -78,7 +78,7 @@ def test_get_api_key(self): - Test whether there is a published project available. """ response = self.c.post('/auth/token/?format=json', - {'username': 'TestUser', 'password': 'TestPassword'}) + {'username': 'TestUser', 'password': 'TestPassword'}) self.assertEqual(response.status_code, 200) contents = json.loads(response.content) diff --git a/akvo/rsr/views/my_rsr.py b/akvo/rsr/views/my_rsr.py index 8d11e03e03..88410dca15 100644 --- a/akvo/rsr/views/my_rsr.py +++ b/akvo/rsr/views/my_rsr.py @@ -109,7 +109,7 @@ def my_updates(request): page, paginator, page_range = pagination(page, updates, 10) org_admin_view = True if request.user.get_admin_employment_orgs() or \ - request.user.is_admin or request.user.is_superuser else False + request.user.is_admin or request.user.is_superuser else False context = { 'page': page, diff --git a/akvo/scripts/cleanup_images.py b/akvo/scripts/cleanup_images.py index 8d7ef22121..e188906845 100644 --- a/akvo/scripts/cleanup_images.py +++ b/akvo/scripts/cleanup_images.py @@ -30,7 +30,7 @@ def cleanup_images(queryset): if type(f).__name__ == 'ImageField': model_field = getattr(obj, f.name) if hasattr(model_field, 'file'): - print "Temp saving:", model_field.name + print "Temp saving:", model_field.name name = os.path.split(model_field.name)[1] #save the func used for upload_to. model_field.field.generate_filename points #to the model's image_path() function, but the function isn't a true model method @@ -67,7 +67,7 @@ def cleanup_images(queryset): name = model_and_instance_based_filename(opts.object_name, obj.pk, f.name, model_field.name) model_field.field.generate_filename = orig_image_path model_field.save(name, model_field.file) - print "Putting back:", model_field.name + print "Putting back:", model_field.name def cleanup(): diff --git a/akvo/scripts/cordaid/cordaid_project_upload.py b/akvo/scripts/cordaid/cordaid_project_upload.py index 02d4aa654b..dcceeea244 100644 --- a/akvo/scripts/cordaid/cordaid_project_upload.py +++ b/akvo/scripts/cordaid/cordaid_project_upload.py @@ -51,7 +51,7 @@ def compare_dicts(dict1, dict2): # Return False if the number of shared attributes is different shared_keys = set(dict1.keys()) & set(dict2.keys()) if not (len(shared_keys) == len(dict1.keys()) - dict1_extra and - len(shared_keys) == len(dict2.keys()) - dict2_extra): + len(shared_keys) == len(dict2.keys()) - dict2_extra): return False # Return True if all attributes are similar @@ -121,27 +121,27 @@ def post_an_activity(activity_element, user): ) except Exception, e: return False, "{extra}", dict( - iati_id = iati_id, - event = ERROR_EXCEPTION, - extra = e.message, + iati_id=iati_id, + event=ERROR_EXCEPTION, + extra=e.message, ) if project.response.text: - return False, "**** Error creating iati-activity: {iati_id}", dict( - iati_id = iati_id, - event = ERROR_CREATE_ACTIVITY, - extra = project.response.text + return False, "**** Error creating iati-activity: {iati_id}", dict( + iati_id=iati_id, + event=ERROR_CREATE_ACTIVITY, + extra=project.response.text ) elif project.response.status_code is HttpCreated.status_code: return True, "Created project for iati-activity: {iati_id}", dict( - iati_id = iati_id, event = ACTION_CREATE_PROJECT + iati_id=iati_id, event=ACTION_CREATE_PROJECT ) else: return ( False, "**** Error creating iati-activity: {iati_id}. HTTP status code: {extra}", dict( - iati_id = iati_id, - event = ERROR_UPLOAD_ACTIVITY, - extra = project.response.status_code, + iati_id=iati_id, + event=ERROR_UPLOAD_ACTIVITY, + extra=project.response.status_code, ) ) @@ -167,29 +167,29 @@ def put_an_activity(activity_element, pk, url_args): ) except Exception, e: return False, "{extra}", dict( - iati_id = iati_id, - event = ERROR_EXCEPTION, - extra = e.message + iati_id=iati_id, + event=ERROR_EXCEPTION, + extra=e.message ) if project.response.text: return False, "**** Error creating iati-activity: {iati_id}", dict( - iati_id = iati_id, - event = ERROR_UPDATE_ACTIVITY, - extra = project.response.text + iati_id=iati_id, + event=ERROR_UPDATE_ACTIVITY, + extra=project.response.text ) elif project.response.status_code is HttpNoContent.status_code: return True, "Updated project for iati-activity: {iati_id} (Akvo pk: {pk})", dict( - iati_id = iati_id, - event = ACTION_UPDATE_PROJECT, - pk = pk + iati_id=iati_id, + event=ACTION_UPDATE_PROJECT, + pk=pk ) else: return ( False, "**** Error updating iati-activity: {iati_id}. HTTP status code: {extra}", dict( - iati_id = iati_id, - event = ERROR_UPLOAD_ACTIVITY, - extra = project.response.status_code, + iati_id=iati_id, + event=ERROR_UPLOAD_ACTIVITY, + extra=project.response.status_code, ) ) @@ -266,7 +266,7 @@ def get_project_count(user, **q_args): """ url_args = user url_args.update( - extra_args = "&".join( + extra_args="&".join( ["{}={}".format(item[0], item[1]) for item in q_args.items()] ) ) @@ -321,7 +321,7 @@ def upload_activities(argv): ) else: message = "Iati-activity {iati_id} has no participating-orgs, aborting" - data = dict(iati_id = iati_id, event = ERROR_NO_ORGS,) + data = dict(iati_id=iati_id, event=ERROR_NO_ORGS,) log(message, data) print(message.format(**data)) diff --git a/akvo/scripts/cordaid/organisation_upload.py b/akvo/scripts/cordaid/organisation_upload.py index 2cf90e3ee1..d1c8b166c0 100644 --- a/akvo/scripts/cordaid/organisation_upload.py +++ b/akvo/scripts/cordaid/organisation_upload.py @@ -27,13 +27,13 @@ me = sys.modules[__name__] api_settings = dict( #UPLOAD_ROOT_DIR = '/Users/gabriel/Downloads/api_upload', - UPLOAD_ROOT_DIR = '/Users/gabriel/Downloads/cordaid_full', - PROJECT_IMAGES_SUBDIR = 'project_images', - LOGOS_SUBDIR = 'logos', - IATI_ACTIVITES_FILENAME = 'iati_export0.xml', + UPLOAD_ROOT_DIR='/Users/gabriel/Downloads/cordaid_full', + PROJECT_IMAGES_SUBDIR='project_images', + LOGOS_SUBDIR='logos', + IATI_ACTIVITES_FILENAME='iati_export0.xml', #ORGANISATIONS_FILENAME = 'organisations.xml', - ORGANISATIONS_FILENAME = 'cordaid_organisations.xml', - ORGANISATIONS_UPLOAD_LOG_FILENAME = 'organisations_upload_{datetime}.csv', + ORGANISATIONS_FILENAME='cordaid_organisations.xml', + ORGANISATIONS_UPLOAD_LOG_FILENAME='organisations_upload_{datetime}.csv', ) # construct local variables for Cordaid supporting data @@ -117,7 +117,7 @@ def post_an_org(org_element, user_cred): elif organisation.response.status_code != HTTP_201_CREATED: import pdb pdb.set_trace() - return False, "**** Error creating organisation: {internal_org_id}", dict( + return False, "**** Error creating organisation: {internal_org_id}", dict( internal_org_id=internal_org_id, event=ERROR_CREATE_ORG, extra=organisation.response.text @@ -150,15 +150,15 @@ def post_an_internal_id(user_cred, reporting_org_id, internal_identifier, pk): except Exception, e: return False, "{extra}", dict( pk, - event = ERROR_EXCEPTION, - extra = e.message, + event=ERROR_EXCEPTION, + extra=e.message, ) if internal_org_id.response.status_code is HTTP_201_CREATED: import pdb pdb.set_trace() return True, "Created internal organisation ID: {identifier}", dict( - pk = internal_org_id.response.json()['identifier'], - event = ACTION_CREATE_IOI + pk=internal_org_id.response.json()['identifier'], + event=ACTION_CREATE_IOI ) diff --git a/akvo/scripts/cordaid/post_import.py b/akvo/scripts/cordaid/post_import.py index 3e9ce78b39..dee830fab6 100644 --- a/akvo/scripts/cordaid/post_import.py +++ b/akvo/scripts/cordaid/post_import.py @@ -120,8 +120,8 @@ def assign_funding_partner(project, organisation, amount): old_budgets.delete() BudgetItem.objects.create( project=project, - label = BudgetItemLabel.objects.get(pk=BudgetItemLabel.TOTAL_BUDGET_LABEL_ID), - amount = total_budget + label=BudgetItemLabel.objects.get(pk=BudgetItemLabel.TOTAL_BUDGET_LABEL_ID), + amount=total_budget ) log( u"Total budget for project {pk}: {extra}", @@ -131,7 +131,7 @@ def assign_funding_partner(project, organisation, amount): except Exception, e: log(u"Error setting up funding partners for project {pk}\nException class: {extra}", dict(internal_id=internal_id, pk=getattr(project, 'pk', None), event=e.__class__, extra=e.message), - ) + ) outsys("*") outsys('\n') @@ -155,7 +155,7 @@ def set_publishing_status(publishing_statuses): except Exception, e: log(u"Error setting publishing status for project {internal_id}\nException class: {extra}", dict(internal_id=internal_id, event=e.__class__, extra=e.message), - ) + ) outsys("*") outsys('\n') diff --git a/akvo/scripts/cordaid/pre_import.py b/akvo/scripts/cordaid/pre_import.py index d59f247196..e6be9f7c7e 100644 --- a/akvo/scripts/cordaid/pre_import.py +++ b/akvo/scripts/cordaid/pre_import.py @@ -67,7 +67,7 @@ def find_cordaid_business_units(business_units): internal_org, created = InternalOrganisationID.objects.get_or_create( recording_org=cordaid, referenced_org=organisation, - identifier= internal_id + identifier=internal_id ) if cat_name: new_cat, created = Category.objects.get_or_create(name=cat_name) @@ -103,7 +103,7 @@ def create_cats_and_benches(business_units): pk=new_bench.id, event=ACTION_BENCH_CREATE ) - ) + ) else: log(u"Found existing bench: {pk}, {label}", dict( @@ -111,7 +111,7 @@ def create_cats_and_benches(business_units): pk=new_bench.id, event=ACTION_BENCH_FOUND ) - ) + ) try: data['category'].benchmarknames.add(new_bench) except: @@ -139,7 +139,7 @@ def import_cordaid_benchmarks(csv_file): for line in indicators_reader: business_units.setdefault( line[COL_BUSINESS_UNID_ID], dict(benchmarknames=[]))['benchmarknames'].append(line[COL_BENCHMARKNAME] - ) + ) return business_units @@ -165,7 +165,7 @@ def find_benchmarknames_and_BUs(): def get_organisation_type(new_organisation_type): types = dict(zip([int(type) for type, name in IATI_LIST_ORGANISATION_TYPE[1:]], Organisation.NEW_TO_OLD_TYPES - )) + )) return types[new_organisation_type] diff --git a/akvo/utils.py b/akvo/utils.py index 94b8b2ebee..0a39a4f786 100644 --- a/akvo/utils.py +++ b/akvo/utils.py @@ -53,8 +53,8 @@ def rsr_image_path(instance, file_name, path_template='db/project/%s/%s'): def send_mail_with_attachments(subject, message, from_email, recipient_list, - fail_silently=False, auth_user=None, auth_password=None, - connection=None, html_message=None, attachments=None): + fail_silently=False, auth_user=None, auth_password=None, + connection=None, html_message=None, attachments=None): """ Extension of django.core.main.send_mail to allow the inclusion of attachments @@ -101,7 +101,7 @@ def rsr_send_mail(to_list, subject='templates/email/test_subject.txt', if undefined """ subject_context = subject_context or {} - msg_context = msg_context or {} + msg_context = msg_context or {} current_site = getattr(settings, 'RSR_DOMAIN', 'rsr.akvo.org') subject_context.update({'site': current_site})