def import_memberships(self, ris_data: RisData): logger.info(f"Importing {len(ris_data.memberships)} memberships") # TODO: Currently, the persons list is incomplete. This patches it up until that's solved # properly by a rewrite of the relevant scraper part # Use https://buergerinfo.ulm.de/kp0043.php?__swords=%22%22&__sgo=Suchen instead to get all persons and memberships # at once and then use some custom id scheme where no original id exists person_name_map = { name: person_id for name, person_id in models.Person.objects.values_list( "name", "id") } db_persons_fixup = [] persons_fixup_done = set() for csv_membership in ris_data.memberships: family_name, given_names, name = normalize_name( csv_membership.person_name) if not name in person_name_map and name not in persons_fixup_done: db_persons_fixup.append( models.Person(given_name=given_names, family_name=family_name, name=name)) persons_fixup_done.add(name) models.Person.objects.bulk_create(db_persons_fixup, 100) person_name_map = { name: person_id for name, person_id in models.Person.objects.values_list( "name", "id") } # Assumption: Organizations that don't have an id in the overview page aren't linked anywhere organization_id_map = make_id_map( models.Organization.objects.filter(oparl_id__isnull=False)) db_memberships = [] for csv_membership in ris_data.memberships: person_id = person_name_map[normalize_name( csv_membership.person_name)[2]] organization = organization_id_map[ csv_membership.organization_original_id] db_membership = models.Membership( person_id=person_id, start=csv_membership.start_date, end=csv_membership.end_date, role=csv_membership.role, organization_id=organization, ) db_memberships.append(db_membership) models.Membership.objects.bulk_create(db_memberships, 100)
def import_memberships(ris_data: RisData): logger.info(f"Importing {len(ris_data.memberships)} memberships") # TODO: Currently, the persons list is incomplete. This patches it up until that's solved # properly by a rewrite of the relevant scraper part # Use https://buergerinfo.ulm.de/kp0043.php?__swords=%22%22&__sgo=Suchen instead to get all persons and memberships # at once and then use some custom id scheme where no original id exists person_name_map = { name: person_id for name, person_id in models.Person.objects.values_list("name", "id") } persons_fixup_done = set() for json_membership in ris_data.memberships: family_name, given_names, name = normalize_name( json_membership.person_name) if not name in person_name_map and name not in persons_fixup_done: models.Person(given_name=given_names, family_name=family_name, name=name).save() persons_fixup_done.add(name) person_name_map = { name: person_id for name, person_id in models.Person.objects.values_list("name", "id") } # Assumption: Organizations that don't have an id in the overview page aren't linked anywhere organization_id_map = make_id_map( models.Organization.objects.filter(oparl_id__isnull=False)) objects = [] for i in ris_data.memberships: person_id = person_name_map[normalize_name(i.person_name)[2]] organization = organization_id_map[i.organization_original_id] objects.append({ "person_id": person_id, "start": i.start_date, "end": i.end_date, "role": i.role, "organization_id": organization, }) incremental_import(models.Membership, objects)
def users(request): print("GET", request.GET) print("POST", request.body) #return Api_JsonResponseGetError(0, "Break Point, For testing") if request.method == 'GET': if request.GET == {}: persons = models.Person.objects.all() return HttpResponse(models_to_json(persons), content_type='text/json') else: if len(request.GET) != 1: return Api_JsonResponseGetError( 1, "You sent in request type get more then one argument") if list(request.GET.keys())[0] == 'id': persons = models.Person.objects.filter(pk=request.GET['id']) elif list(request.GET.keys())[0] == 'name': persons = models.Person.objects.filter( name=request.GET['name']) elif list(request.GET.keys())[0] == 'age': persons = models.Person.objects.filter(age=request.GET['age']) else: return Api_JsonResponseGetError(3, 'wrong argument') if len(persons) == 0: return Api_JsonResponseGetError(2, "Object does not exist") return HttpResponse(models_to_json(persons), content_type='text/json') elif request.method == "POST": print("======") print(str(request.body)) print(type(request.body)) print("======") data = json.loads(request.body) if not isinstance(data, list): data = [data] for el in data: if not models.RequestChecker_addPerson(el).is_valid(): return Api_JsonResponseGetError(4, "Wrong json object.") for el in data: models.Person(**el).save() return HttpResponse('ok', content_type='text/json')
def convert_person(family_name: str, given_names: str, name: str) -> models.Person: return models.Person(name=name, given_name=given_names, family_name=family_name)