def load_set_for_client(cls, tref: str): """ This method returns an array of results that can be converted to JSON instead of Sefaria MongoSet instances. This method uses a mongo aggregation to JOIN the manuscript with the manuscript page. :param tref: :return: """ try: oref = Ref(tref) except InputError: return [] segment_refs = [r.normal() for r in oref.all_segment_refs()] results, manuscripts = [], {} documents = cls.load_by_ref(oref) for document in documents: contained_refs, expanded = document.contained_refs, document.expanded_refs anchor_ref_list, anchor_ref_expanded_list = oref.get_all_anchor_refs( segment_refs, contained_refs, expanded) for anchor_ref, anchor_ref_expanded in zip( anchor_ref_list, anchor_ref_expanded_list): contents = document.contents() contents["anchorRef"] = anchor_ref.normal() contents["anchorRefExpanded"] = [ r.normal() for r in anchor_ref_expanded ] del contents['contained_refs'] del contents['expanded_refs'] if document.manuscript_slug in manuscripts: manuscript = manuscripts[document.manuscript_slug] else: manuscript = Manuscript().load( {'slug': document.manuscript_slug}) manuscripts[manuscript.slug] = manuscript man_contents = manuscript.contents() contents['manuscript'] = man_contents results.append(contents) return results
def get_expanded_refs_for_source(oref: Ref): return [r.normal() for r in oref.all_segment_refs()]