def fetch_witnesses(ismi_id): """ Fetches witnesses for a given ISMI ID """ rel = [] codex = api.fetch('get_ent', include_content="true", id=ismi_id) if not codex: return None codex_data = codex.get('ent', None) target_relations = codex_data.get('tar_rels', None) if target_relations: related_objects = [r for r in target_relations if r['name'] == 'is_part_of'] for wit in related_objects: witness = api.fetch('get_ent', include_content="true", id=wit['src_id']) rel.append(witness.get('ent', None)) return rel
def fetch_people(text_id): rel = [] text = api.fetch('get_ent', include_content="true", id=text_id) if not text: return None text_data = text.get('ent', None) target_relations = text_data.get('src_rels', None) if target_relations: related_objects = [r for r in target_relations if r['tar_oc'] == "PERSON"] for pers in related_objects: person = api.fetch('get_ent', include_content="true", id=pers['tar_id']) rel.append(person.get('ent', None)) return rel
def fetch_texts(witness_id): # fetches texts for a given witness_id rel = [] witness = api.fetch("get_ent", include_content="true", id=witness_id) if not witness: return None witness_data = witness.get("ent", None) source_relations = witness_data.get("src_rels", None) if source_relations: related_objects = [r for r in source_relations if r["tar_oc"] == "TEXT"] for text in related_objects: text = api.fetch("get_ent", include_content="true", id=text["tar_id"]) rel.append(text.get("ent", None)) return rel
def fetch_manuscripts(): r = api.fetch("get_ents", oc="CODEX") entities = r.get('ents', None) for entity in entities: if entity.get('ov', None): entity_name = parse.name(entity.get('ov')) entity_id = int(entity.get('id')) directory = os.path.join(settings.IMG_DIR, entity_name) ms = Manuscript.objects.filter(directory=directory) if ms.exists(): print("Matching {0} with {1} ID {2}".format(ms[0].directory, entity_name, entity_id)) ms.update(ismi_id=entity_id) else: print("Entry for {0} not found.".format(entity_name))
def fetch_entity(entity_id): print("Fetching {0}".format(entity_id)) ent_ = api.fetch('get_ent', include_content="true", id=entity_id) # ms_ is of type CODEX if not ent_.get('ent', None): return None if not ent_['ent'].get('oc', None): print("No type! Returning.") return None db_ent, created = get_model('imageserve', 'ISMIEntity').objects.get_or_create(ismi_id=entity_id) if db_ent.synced: return None print("Creating relationship with ms obj") db_ent.synced = True db_ent.data=ent_['ent'] db_ent.ismi_type = ent_['ent']['oc'] db_ent.save() print("Getting other relationships") if not ent_['ent'].get('tar_rels', None): return None tar_rels = ent_['ent']['tar_rels'] print("Getting target relationships") for rel in tar_rels: if not rel.get('src_id', None): continue if not rel.get('src_oc', None): continue db_ent, created = get_model('imageserve', 'ISMIEntity').objects.get_or_create(ismi_id=rel.get('src_id')) if not created: continue db_ent.synced = False db_ent.ismi_type = rel.get('src_oc') db_ent.ismi_id = rel.get('src_id') db_ent.save() fetch_entity(rel.get('src_id')) if not ent_['ent'].get('src_rels', None): return None print("Getting source relationships") src_rels = ent_['ent']['src_rels'] for rel in src_rels: if not rel.get('tar_id', None): continue if not rel.get('tar_oc', None): continue db_ent, created = get_model('imageserve', 'ISMIEntity').objects.get_or_create(ismi_id=rel.get('tar_id')) if not created: continue db_ent.synced = False db_ent.ismi_type = rel.get('tar_oc') db_ent.ismi_id = rel.get('tar_id') db_ent.save() fetch_entity(rel.get('tar_id'))