def _add_ld_keys(rsc: [Resource, Dict], context: Optional[Union[Dict, List, str]], base: Optional[str]) -> Dict: local_attrs = dict() local_context = None items = rsc.__dict__.items() if isinstance(rsc, Resource) else rsc.items() for k, v in items: if k not in Resource._RESERVED: if k == "context": if v != context: local_context = Context(v) base = local_context.base else: key = LD_KEYS.get(k, k) if key == "@id" and local_context is not None: local_attrs[key] = local_context.resolve(v) else: if isinstance(v, Resource) or isinstance(v, Dict): local_attrs[key] = _add_ld_keys(v, context, base) elif isinstance(v, list): local_attrs[key] = [ _add_ld_keys(item, context, base) if isinstance(item, Resource) or isinstance(item, Dict) else item for item in v ] else: if isinstance(v, LazyAction): raise ValueError( "can't convert, resource contains LazyActions") local_attrs[key] = v.replace( base, "") if base and isinstance(v, str) else v return local_attrs
def _remove_ld_keys( dictionary: dict, context: Context, to_resource: Optional[bool] = True) -> Union[Dict, Resource]: local_attrs = dict() for k, v in dictionary.items(): if k == "@context": if v != context: local_attrs["context"] = v else: if k == "@id": local_attrs["id"] = context.resolve(v) elif k.startswith("@") and k in LD_KEYS.values(): local_attrs[k[1:]] = v else: if isinstance(v, dict): local_attrs[k] = _remove_ld_keys(v, context, to_resource) elif isinstance(v, list): local_attrs[k] = [ _remove_ld_keys(item, context, to_resource) if isinstance(item, dict) else item for item in v ] else: if k in context.terms: if context.terms[k].type == "@id": v = context.shrink_iri(v) local_attrs[k] = v if to_resource: return Resource(**local_attrs) else: return local_attrs
def _make_jsonld_compacted(r, store_metadata): data = dict() data["@context"] = model_context.iri if model_context.is_http_iri( ) else model_context.document["@context"] if hasattr(r, "id"): data["@id"] = r.id nested_context = Context(custom_context) data.update({ "@type": r.type, "name": r.name, "founder": { "@type": r.founder.type, "@id": nested_context.resolve(r.founder.id), "name": r.founder.name } }) if hasattr(r, "id") and store_metadata: data.update(metadata_data_compacted) return data