Exemple #1
0
    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