def get_zaken(query_params=None) -> list:
    query_params = query_params or {}

    zaken = []
    for zrc in Service.objects.filter(api_type=APITypes.zrc):
        client = zrc.build_client()
        zaken += get_paginated_results(client,
                                       "zaak",
                                       minimum=25,
                                       query_params=query_params)

    "resolve zaaktype url"
    fetched_zaaktypen = get_zaaktypen(dict_response=True)
    for zaak in zaken:
        zaak["zaaktype"] = fetched_zaaktypen[zaak["zaaktype"]]

    zaken = sorted(
        zaken,
        key=lambda zaak: (
            zaak["registratiedatum"],
            zaak["startdatum"],
            zaak["identificatie"],
        ),
        reverse=True,
    )
    return zaken
예제 #2
0
def update_zaaktype_children(
    session,
    log_scope: str,
    children_data: List[dict],
    zaaktype: dict,
    resource: str,
    type_key: str,
    match_field: str,
):
    """
    generically update/create a list of zaaktype child-resources
    """
    zaaktype_url = zaaktype["url"]
    client = session.client_from_url(zaaktype_url)

    # fetch existing and make lookup
    remote_list = get_paginated_results(
        client,
        resource,
        query_params={
            "zaaktype": zaaktype_url,
            "status": "alles"
        },
    )
    remote_map = {o[match_field]: o for o in remote_list}

    objects = []

    # update/create resources
    for i, child_data in enumerate(children_data, start=1):
        if i % FLUSH_OBJECTS == 0:
            session.flush_counts()

        _log_scope = f"{log_scope} {resource} {match_field}='{child_data[match_field]}'"
        child_data["zaaktype"] = zaaktype_url
        try:
            # check the lookup for existing resource
            remote = remote_map.get(child_data[match_field])
            if remote:
                obj = client.update(resource, child_data, url=remote["url"])
                session.counter.increment_updated(type_key)
                session.log_info(f"{_log_scope} updated existing")
            else:
                obj = client.create(resource, child_data)
                session.counter.increment_created(type_key)
                session.log_info(f"{_log_scope} created new")

        except (ClientError, HTTPError) as exc:
            session.counter.increment_errored(type_key)
            session.log_error(
                f"{_log_scope} can't be created: {format_exception(exc)}",
                type_key)
            continue
        else:
            objects.append(obj)

    session.flush_counts()

    return objects
def get_types_generic(type_name, dict_response=False) -> Union[list, dict]:
    typen = []

    for ztc in Service.objects.filter(api_type=APITypes.ztc):
        client = ztc.build_client()
        typen += get_paginated_results(client, type_name)

    if not dict_response:
        return typen

    return {t["url"]: t for t in typen}
    response = client.retrieve("zaaktype", url=url)
    return response


# ZRC
def get_zaken(query_params=None) -> list:
    query_params = query_params or {}
    if sort_by_zaaktype := query_params.get("sort_by_zaaktype"):
        query_params = query_params.copy()
        del query_params["sort_by_zaaktype"]

    zaken = []
    for zrc in Service.objects.filter(api_type=APITypes.zrc):
        client = zrc.build_client()
        zaken += get_paginated_results(client,
                                       "zaak",
                                       minimum=25,
                                       query_params=query_params)

    # Resolve zaaktype url
    fetched_zaaktypen = get_zaaktypen(dict_response=True)
    for zaak in zaken:
        zaak["zaaktype"] = fetched_zaaktypen[zaak["zaaktype"]]

    if sort_by_zaaktype:
        zaken = sorted(zaken,
                       key=lambda zaak: (zaak["zaaktype"]["omschrijving"]))

    return zaken


def fetch_zaak(url: str) -> dict:
예제 #5
0
def update_informatieobjecttypen(session, iotypen_data: List[dict]):
    """
    update/create list of informatieobjecttypen

    this is messy because we need to:
    1) fetch existing resources and create lookup map to match for update/create (API can't search)
    2) run the update/create logic on all items
    """
    client = session.client_from_url(session.catalogus_url)

    # fetch existing and create lookup
    remote_list = get_paginated_results(
        client,
        "informatieobjecttype",
        query_params={
            "catalogus": session.catalogus_url,
            "status": "alles"
        },
    )

    remote_map = defaultdict(list)
    for io in remote_list:
        remote_map[io["omschrijving"]].append(io)

    iotypen = []

    # update/create resources
    for i, iotype_data in enumerate(iotypen_data, start=1):
        if i % FLUSH_OBJECTS == 0:
            session.flush_counts()

        iotype_data["catalogus"] = session.catalogus_url

        omschrijving = iotype_data["omschrijving"]
        log_scope = f"informatieobjecttype '{omschrijving}'"
        concept = find_io_concept(iotype_data, remote_map)

        try:
            if omschrijving not in remote_map:
                # new resource
                iotype = client.create("informatieobjecttype",
                                       data=iotype_data)
                session.log_info(f"{log_scope} created new concept")
                session.counter.increment_created(
                    ObjectTypenKeys.informatieobjecttypen)

            elif concept:
                iotype = client.update("informatieobjecttype",
                                       iotype_data,
                                       url=concept["url"])
                session.log_info(f"{log_scope} updated existing concept")
                session.counter.increment_updated(
                    ObjectTypenKeys.informatieobjecttypen)

            else:
                # close old resource with start-date of the new resource
                if session.job.close_published:
                    for remote in remote_map[omschrijving]:
                        if not remote["concept"] and not remote[
                                "eindeGeldigheid"]:
                            client.partial_update(
                                "informatieobjecttype",
                                {
                                    "eindeGeldigheid":
                                    iotype_data["beginGeldigheid"]
                                },
                                url=remote["url"],
                            )
                            session.log_info(
                                f"{log_scope} closed existing published on '{iotype_data['beginGeldigheid']}'"
                            )
                else:
                    session.log_info(
                        f"{log_scope} existing published stays active")

                # create new resource
                iotype = client.create("informatieobjecttype",
                                       data=iotype_data)
                session.log_info(f"{log_scope} created new concept")
                session.counter.increment_updated(
                    ObjectTypenKeys.informatieobjecttypen)

        except (ClientError, HTTPError) as exc:
            session.counter.increment_errored(
                ObjectTypenKeys.informatieobjecttypen)
            session.log_error(
                f"{log_scope} can't be created: {format_exception(exc)}",
                ObjectTypenKeys.informatieobjecttypen,
            )
            continue
        else:
            iotypen.append(iotype)

    session.flush_counts()

    return iotypen
def get_resultaaten() -> List[dict]:
    client = get_client()
    return get_paginated_results(client, "resultaat")