Esempio n. 1
0
    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)
Esempio n. 3
0
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')
Esempio n. 4
0
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)