def import_orgs(xml_file): with open(xml_file, "rb") as f: report_data = dict(created=0, failed=0, updated=0) root = etree.fromstring(f.read()) for element in root: recording_org = Organisation.objects.get(id=CORDAID_ORG_ID) identifier = element.findtext("org_id") try: # Find existing InternalOrganisationID & Organisation ... action = "updated" internal_org_id = InternalOrganisationID.objects.get( recording_org=recording_org, identifier=identifier ) referenced_org = internal_org_id.referenced_org except: # ... or attempt to create new ones try: action = "created" referenced_org = Organisation() referenced_org.save() internal_org_id = InternalOrganisationID( recording_org=recording_org, referenced_org=referenced_org, identifier=identifier ) internal_org_id.save() for partner_type in PartnerType.objects.all(): referenced_org.partner_types.add(partner_type) except Exception, e: action = "failed" internal_org_id.delete() referenced_org.delete() print(u"*** UNABLE TO CREATE NEW ORGANISATION! " "Reason: {message}.".format(e.message)) name = element.findtext("name") referenced_org.name, referenced_org.long_name = name[:25], name referenced_org.description = element.findtext("description") or "N/A" referenced_org.url = normalize_url(element.findtext("url")) referenced_org.new_organisation_type = int(element.findtext("iati_organisation_type")) referenced_org.organisation_type = get_organisation_type(referenced_org.new_organisation_type) report_data[action] += 1 referenced_org.save() log_and_alert(u"{action} organisation {org_id} " "(Cordaid ID: {cordaid_org_id})".format( action=action.upper(), cordaid_org_id=internal_org_id.identifier, org_id=referenced_org.id )) run_import_report("organisation", report_data)
def import_orgs(xml_file): with open(xml_file, "rb") as f: report_data = dict(created=0, failed=0, updated=0) root = etree.fromstring(f.read()) for element in root: recording_org = Organisation.objects.get(id=CORDAID_ORG_ID) identifier = element.findtext("org_id") try: # Find existing InternalOrganisationID & Organisation ... action = "updated" internal_org_id = InternalOrganisationID.objects.get( recording_org=recording_org, identifier=identifier) referenced_org = internal_org_id.referenced_org except: # ... or attempt to create new ones try: action = "created" referenced_org = Organisation() referenced_org.save() internal_org_id = InternalOrganisationID( recording_org=recording_org, referenced_org=referenced_org, identifier=identifier) internal_org_id.save() for partner_type in PartnerType.objects.all(): referenced_org.partner_types.add(partner_type) except Exception, e: action = "failed" internal_org_id.delete() referenced_org.delete() print(u"*** UNABLE TO CREATE NEW ORGANISATION! " "Reason: {message}.".format(e.message)) name = element.findtext("name") referenced_org.name, referenced_org.long_name = name[:25], name referenced_org.description = element.findtext( "description") or "N/A" referenced_org.url = normalize_url(element.findtext("url")) referenced_org.new_organisation_type = int( element.findtext("iati_organisation_type")) referenced_org.organisation_type = get_organisation_type( referenced_org.new_organisation_type) report_data[action] += 1 referenced_org.save() log_and_alert(u"{action} organisation {org_id} " "(Cordaid ID: {cordaid_org_id})".format( action=action.upper(), cordaid_org_id=internal_org_id.identifier, org_id=referenced_org.id)) run_import_report("organisation", report_data)