Esempio n. 1
0
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
Esempio n. 2
0
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