def oaimodstodpla(body, ctype, geoprop=None, provider=None): """ Convert output of JSON-ified OAI MODS format into the DPLA JSON-LD format. Parameter "geoprop" specifies the property name containing lat/long coords """ try : data = json.loads(body) except: response.code = 500 response.add_header("content-type","text/plain") return "Unable to parse body as JSON" global GEOPROP GEOPROP = geoprop out = { "@context": CONTEXT, "sourceResource": {} } if provider == "BPL": data = remove_key_prefix(data, "mods:") # Apply all transformation rules from original document transformer_pipeline = {} transformer_pipeline.update(CHO_TRANSFORMER.get(provider, {}), **CHO_TRANSFORMER["common"]) for p in transformer_pipeline: if exists(data, p): out["sourceResource"].update(transformer_pipeline[p](data, p)) transformer_pipeline = {} transformer_pipeline.update(AGGREGATION_TRANSFORMER.get(provider, {}), **AGGREGATION_TRANSFORMER["common"]) for p in transformer_pipeline: if exists(data, p): out.update(transformer_pipeline[p](data, p)) # Apply transformations that are dependent on more than one # original document field if provider == "HARVARD": out["sourceResource"].update(identifier_transform_harvard(data)) out.update(url_transform_harvard(data)) out.update(data_provider_transform_harvard(data)) # Join dataProvider with isPartOf for BPL if provider == "BPL": try: ipo = getprop(out, "dataProvider") + ". " + \ getprop(out, "sourceResource/isPartOf") setprop(out, "sourceResource/isPartOf", ipo.replace("..", ".")) except: pass # Strip out keys with None/null values? out = dict((k,v) for (k,v) in out.items() if v) return json.dumps(out)
def mods_to_dpla(body, ctype, geoprop=None, provider=None): """ Convert output of JSON-ified MODS/METS format into the DPLA JSON-LD format. Parameter "geoprop" specifies the property name containing lat/long coords. Parameter "provider" specifies the mapping dictionary. """ try : data = json.loads(body) except Exception: response.code = 500 response.add_header('content-type','text/plain') return "Unable to parse body as JSON" global GEOPROP GEOPROP = geoprop out = { "@context": CONTEXT, "sourceResource" : {} } if provider == "UVA": # Remove "mods:" prefix in keys data = remove_key_prefix(data, "mods:") # Apply all transformation rules from original document transformer_pipeline = {} transformer_pipeline.update(CHO_TRANSFORMER.get(provider, {}), **CHO_TRANSFORMER["common"]) for p in transformer_pipeline: if exists(data, p): out["sourceResource"].update(transformer_pipeline[p](data, p)) transformer_pipeline = {} transformer_pipeline.update(AGGREGATION_TRANSFORMER.get(provider, {}), **AGGREGATION_TRANSFORMER["common"]) for p in transformer_pipeline: if exists(data, p): out.update(transformer_pipeline[p](data, p)) # Strip out keys with None/null values? out = dict((k,v) for (k,v) in out.items() if v) return json.dumps(out)
def oaiuntltodpla(body, ctype, geoprop=None): """ Convert output of JSON-ified OAI UNTL format into the DPLA JSON-LD format. Parameter "geoprop" specifies the property name containing lat/long coords """ try : data = json.loads(body) except: response.code = 500 response.add_header("content-type","text/plain") return "Unable to parse body as JSON" global GEOPROP GEOPROP = geoprop out = { "@context": CONTEXT, "sourceResource": {} } # Remove "untl:" prefix from data keys data = remove_key_prefix(data, "untl:") # Apply all transformation rules from original document for p in CHO_TRANSFORMER: if exists(data, p): out["sourceResource"].update(CHO_TRANSFORMER[p](data, p)) for p in AGGREGATION_TRANSFORMER: if exists(data, p): out.update(AGGREGATION_TRANSFORMER[p](data, p)) # Strip out keys with None/null values? out = dict((k,v) for (k,v) in out.items() if v) return json.dumps(out)