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
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:
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")