def test_route_version_chunker_replacement(self):
        """ Try to get valid reffs
        """

        urn = "urn:cts:latinLit:phi1294.phi002.perseus-lat2"
        def chunker(text, level):
            self.assertIsInstance(text, MyCapytain.resources.inventory.Text)
            self.assertEqual(str(text.urn), "urn:cts:latinLit:phi1294.phi002.perseus-lat2")
            return True

        nemo = Nemo(
            api_url=NemoTestControllers.endpoint,
            inventory="annotsrc",
            chunker={"default": chunker}
        )

        with patch('requests.get', return_value=self.getValidReff) as patched:
            view = nemo.r_version("latinLit", "phi1294", "phi002", "perseus-lat2")
            self.assertIsInstance(view["version"], MyCapytain.resources.inventory.Text)
            patched.assert_called_once_with(
                NemoTestControllers.endpoint,
                params={
                    "inv": "annotsrc",
                    "request": "GetCapabilities"
                }
            )
            self.assertEqual(view["reffs"], True)
    def test_template_folder(self):
        app = Flask(__name__)
        nemo = Nemo(app=app, template_folder="/examples")
        nemo.register_routes()

        self.assertEqual(nemo.template_folder, "/examples")
        self.assertEqual(nemo.blueprint.template_folder, "/examples")
class TestFilters(NemoResource):

    def test_f_active_link(self):
        """ Test checking if something is in the path
        """
        wrong = Nemo.f_active_link("phi003", {"collection": "latinLit"})
        wrong2 = Nemo.f_active_link("phi003", {"collection": "latinLit", "textgroup": "phi0003"})
        right = Nemo.f_active_link("phi003", {"collection": "latinLit", "textgroup": "phi0003", "work": "phi003"})
        self.assertEqual(wrong, "")
        self.assertEqual(wrong2, "")
        self.assertEqual(right, "active")

    def test_f_collection_i18n(self):
        """ Test internationalization of collection identifier
        """
        self.assertEqual(Nemo.f_collection_i18n("latinLit"), "Latin")
        self.assertEqual(Nemo.f_collection_i18n("greekLit"), "Ancient Greek")
        self.assertEqual(Nemo.f_collection_i18n("freLit"), "freLit")

    def test_f_formatting_passage_reference(self):
        """ Test split of passage range identifier
        """
        self.assertEqual(Nemo.f_formatting_passage_reference("1.1-1.2"), "1.1")
        self.assertEqual(Nemo.f_formatting_passage_reference("1.1"), "1.1")

    def test_register_filter(self):
        app = Flask(__name__)
        self.nemo = Nemo(app=app)
        self.nemo.register_filters()
        self.assertEqual(self.nemo.app.jinja_env.filters["formatting_passage_reference"], Nemo.f_formatting_passage_reference)
        self.assertEqual(self.nemo.app.jinja_env.filters["collection_i18n"], Nemo.f_collection_i18n)
        self.assertEqual(self.nemo.app.jinja_env.filters["active_link"], Nemo.f_active_link)
 def test_f_active_link(self):
     """ Test checking if something is in the path
     """
     wrong = Nemo.f_active_link("phi003", {"collection": "latinLit"})
     wrong2 = Nemo.f_active_link("phi003", {"collection": "latinLit", "textgroup": "phi0003"})
     right = Nemo.f_active_link("phi003", {"collection": "latinLit", "textgroup": "phi0003", "work": "phi003"})
     self.assertEqual(wrong, "")
     self.assertEqual(wrong2, "")
     self.assertEqual(right, "active")
    def test_static_url_path(self):
        app = Flask(__name__)
        nemo = Nemo(app=app, static_url_path="/assets/nemoOo")
        nemo.register_routes()
        self.assertIn("flask_nemo", app.blueprints)

        rules = [(rule.rule, rule.endpoint) for rule in app.url_map.iter_rules()]
        self.assertIn("/nemo/assets/nemoOo/<path:filename>", [rule[0] for rule in rules])
        self.assertIn("/nemo/assets/nemoOo.secondary/<type>/<asset>", [rule[0] for rule in rules])
    def test_view_maker(self):
        """ View maker should take care of returning a lambda using the function self.route and the function
        identified by the parameter name
        """
        nemo = Nemo()
        nemo.route = Mock()

        view = nemo.view_maker("r_collection")
        view(collection="latinLit")
        nemo.route.assert_called_with(nemo.r_collection, collection="latinLit")
    def test_overwrite_urls(self):
        routes = [("/index.html", "r_index", ["GET"])] + Nemo.ROUTES[1:]
        app = Flask(__name__)
        nemo = Nemo(app=app, urls=routes)
        nemo.register_routes()
        self.assertIn("flask_nemo", app.blueprints)

        rules = [(rule.rule, rule.endpoint) for rule in app.url_map.iter_rules()]
        self.assertIn("/nemo/index.html", [rule[0] for rule in rules])
        self.assertNotIn("/nemo/", [rule[0] for rule in rules])
 def test_default_chunker(self):
     """ Test default chunker
     """
     text = self.inventory["urn:cts:latinLit:phi1294.phi002.perseus-lat2"]
     reffs = Nemo.default_chunker(text, self.make_get_reff(3))
     self.assertEqual(reffs, [
         ("1.pr.5", "1.pr.5"),
         ("1.1.7", "1.1.7")
     ])
     Nemo.default_chunker(self.inventory["urn:cts:latinLit:phi0959.phi003.perseus-lat2"], self.make_get_reff(2))
    def test_additional_template(self):
        # Line 568-575
        app = Flask(__name__)
        nemo = Nemo(app=app, templates={"menu": "examples/ciham.menu.html"})
        blueprint = nemo.create_blueprint()

        html, path, function = blueprint.jinja_loader.get_source("", "examples/ciham.menu.html")
        self.assertIn("Text provided by CIHAM", html)

        with self.assertRaises(TemplateNotFound):
            html, path, function = blueprint.jinja_loader.get_source("", "examples/unknown.html")
 def test_transform_default_none(self):
     """ Test that the transform default is called and applied
     """
     nemo = Nemo()
     transformed = nemo.transform(
         MyCapytain.resources.inventory.Text(
             urn="urn:cts:phi1294.phi002.perseus-lat2"
         ),
         etree.fromstring("<a/>")
     )
     self.assertEqual(transformed, "<a/>")
Exemplo n.º 11
0
 def test_get_siblings(self):
     """ Test first passage
     """
     app = Flask("Nemo")
     nemo = Nemo(app=app,
                 base_url="",
                 resolver=NautilusDummy,
                 original_breadcrumb=False,
                 chunker={
                     "default": lambda x, y: level_grouper(x, y, groupby=20)
                 })
     # First range
     p = nemo.get_passage("urn:cts:latinLit:phi1294.phi002.perseus-lat2",
                          "1.pr.1-1.pr.20")
     l, r = nemo.get_siblings(
         "urn:cts:latinLit:phi1294.phi002.perseus-lat2", "1.pr.1-1.pr.20",
         p)
     self.assertEqual(l, None, "There should be nothing on the left")
     self.assertEqual(r, "1.pr.21-1.pr.22",
                      "Next passage should not be 20 long")
     # Second range
     p = nemo.get_passage("urn:cts:latinLit:phi1294.phi002.perseus-lat2",
                          "1.pr.21-1.pr.22")
     l, r = nemo.get_siblings(
         "urn:cts:latinLit:phi1294.phi002.perseus-lat2", "1.pr.21-1.pr.22",
         p)
     self.assertEqual(l, "1.pr.1-1.pr.20",
                      "There should be something on the left")
     self.assertEqual(r, "1.1.1-1.1.6",
                      "Next passage should not be 20 long")
     # Last range
     p = nemo.get_passage("urn:cts:latinLit:phi1294.phi002.perseus-lat2",
                          "14.223.1-14.223.2")
     l, r = nemo.get_siblings(
         "urn:cts:latinLit:phi1294.phi002.perseus-lat2",
         "14.223.1-14.223.2", p)
     self.assertEqual(l, "14.222.1-14.222.2",
                      "Previous passage does not have to be 20 long")
     self.assertEqual(r, None, "There should be nothing on the right")
     # Passage with unknown range
     p = nemo.get_passage("urn:cts:latinLit:phi1294.phi002.perseus-lat2",
                          "1.11.1-1.11.2")
     l, r = nemo.get_siblings(
         "urn:cts:latinLit:phi1294.phi002.perseus-lat2", "1.11.1-1.11.2", p)
     self.assertEqual(
         l, "1.10.3-1.10.4",
         "Passage should be computed specifically if texts have unknown range"
     )
     self.assertEqual(
         r, "1.11.3-1.11.4",
         "Passage should be computed specifically if texts have unknown range"
     )
 def test_route_passage_without_urn_xslt(self):
     nemo = Nemo(
         api_url=NemoTestControllers.endpoint,
         inventory="annotsrc",
         transform={"urn:cts:latinLit:phi1294.phi002.perseus-lat3": NemoTestControllers.body_xsl}
     )
     with patch('requests.get', return_value=self.getPassage_Route) as patched:
         view = nemo.r_passage("latinLit", "phi1294", "phi002", "perseus-lat2", "1.pr.1")
         # Reparsing xml
         xml = etree.fromstring(str(view["text_passage"]))
         self.assertEqual(
             len(xml.xpath("//tei:body", namespaces={"tei": "http://www.tei-c.org/ns/1.0"})),
             1
         )
    def test_transform_urn_xslt(self):
        """ Test that the transform default is called and applied
        """

        nemo = Nemo(transform={
            "default": "testing_data/xsl_test.xml"
        })
        transformed = nemo.transform(
            MyCapytain.resources.inventory.Text(
                urn="urn:cts:phi1294.phi002.perseus-lat2"
            ),
            etree.fromstring('<tei:body xmlns:tei="http://www.tei-c.org/ns/1.0" />')
        )
        self.assertEqual(transformed, '<tei:notbody xmlns:tei="http://www.tei-c.org/ns/1.0"/>')
    def test_scheme_chunker(self):
        """ Test chunking according to scheme
        """
        text = self.inventory["urn:cts:latinLit:phi1294.phi002.perseus-lat2"] # book, poem
        reffs = Nemo.scheme_chunker(text, self.make_get_reff(2))
        self.assertEqual(reffs, [
            ("1.pr.5", "1.pr.5"),
            ("1.1.7", "1.1.7")
        ])

        with patch("flask_nemo.Nemo.line_chunker", return_value=True) as line_chunker:
            self.assertEqual(Nemo.scheme_chunker(
                self.inventory["urn:cts:latinLit:phi0959.phi007.perseus-lat2"],
                self.make_get_reff(2)
            ), True)
    def test_urntransform_override_function(self):
        """ Test that the transform override is called and applied
        """
        def override(urn):
          self.assertEqual(str(urn), "urn:cts:latinLit:phi1294.phi002.perseus-lat2:1.pr")
          return "override"

        nemo = Nemo(urntransform={
            "urn:cts:latinLit:phi1294.phi002.perseus-lat2": override
        })
        transformed = nemo.transform_urn(
            MyCapytain.resources.inventory.Text(
                urn="urn:cts:latinLit:phi1294.phi002.perseus-lat2:1.pr"
            ).urn
        )
        self.assertEqual(transformed, "override")
    def test_get_validreffs_without_specific_callback(self):
        """ Try to get valid reffs
        """
        self.nemo = Nemo(api_url=NemoTestControllers.endpoint, inventory="annotsrc")
        with patch('requests.get', return_value=self.getValidReff) as patched:
            text, callback = self.nemo.get_reffs("latinLit", "phi1294", "phi002", "perseus-lat2")
            self.assertIsInstance(text, MyCapytain.resources.inventory.Text)

            reffs = callback(level=3)
            self.assertIsInstance(reffs, list)
            self.assertEqual(reffs[0], "urn:cts:latinLit:phi1294.phi002.perseus-lat2:1.pr.1")
            self.assertEqual(patched.mock_calls, [
                call(
                    NemoTestControllers.endpoint,
                    params={
                        "inv": "annotsrc",
                        "request": "GetCapabilities"
                    }
                ),
                call(
                    NemoTestControllers.endpoint,
                    params={
                        "inv": "annotsrc",
                        "request": "GetValidReff",
                        "level": "3",
                        "urn": "urn:cts:latinLit:phi1294.phi002.perseus-lat2"
                    }
                )
                ]
            )
 def test_route_passage_with_transform(self):
     """ Try with a non xslt just to be sure
     """
     urn = "urn:cts:latinLit:phi1294.phi002.perseus-lat2"
     def transformer(version, text):
         self.assertEqual(str(version.urn), "urn:cts:latinLit:phi1294.phi002.perseus-lat2")
         self.assertIsInstance(text, etree._Element)
         return "<a>Hello</a>"
     nemo = Nemo(
         api_url=NemoTestControllers.endpoint,
         inventory="annotsrc",
         transform={"default": transformer}
     )
     with patch('requests.get', return_value=self.getPassage_Route) as patched:
         view = nemo.r_passage("latinLit", "phi1294", "phi002", "perseus-lat2", "1.pr.1")
         self.assertEqual(view["text_passage"], Markup("<a>Hello</a>"))
 def test_register_filter(self):
     app = Flask(__name__)
     self.nemo = Nemo(app=app)
     self.nemo.register_filters()
     self.assertEqual(self.nemo.app.jinja_env.filters["formatting_passage_reference"], Nemo.f_formatting_passage_reference)
     self.assertEqual(self.nemo.app.jinja_env.filters["collection_i18n"], Nemo.f_collection_i18n)
     self.assertEqual(self.nemo.app.jinja_env.filters["active_link"], Nemo.f_active_link)
    def test_urntransform_default_function(self):
        """ Test that the transform default is called and applied
        """
        def default(urn):
          self.assertEqual(str(urn), "urn:cts:latinLit:phi1294.phi002.perseus-lat2:1.pr")
          return str(urn)

        nemo = Nemo(urntransform={
            "default": default
        })
        transformed = nemo.transform_urn(
            MyCapytain.resources.inventory.Text(
                urn="urn:cts:latinLit:phi1294.phi002.perseus-lat2:1.pr"
            ).urn
        )
        self.assertEqual(transformed, "urn:cts:latinLit:phi1294.phi002.perseus-lat2:1.pr")
    def test_route_assets_all(self):
        nemo = Nemo(
            statics=["testing_data/getcapabilities.xml"],
            js=["testing_data/getcapabilities.xml"],
            css=["testing_data/style.css"]
        )

        nemo.blueprint = Mock()
        nemo.register_assets()
        with patch("flask_nemo.send_from_directory") as patched:
            nemo.r_assets("js", "getcapabilities.xml")
            nemo.r_assets("static", "getcapabilities.xml")
            nemo.r_assets("css", "style.css")
            patched.assert_has_calls([
                call(directory="testing_data", filename="getcapabilities.xml"),
                call(directory="testing_data", filename="getcapabilities.xml"),
                call(directory="testing_data", filename="style.css")
            ])
    def test_transform_default_function(self):
        """ Test that the transform default is called and applied when it's a function
        """
        def default(work, xml):
            self.assertEqual(str(work.urn), "urn:cts:phi1294.phi002.perseus-lat2")
            self.assertEqual(xml, "<a></a>")
            return "<b></b>"

        nemo = Nemo(transform={
            "default": default
        })
        transformed = nemo.transform(
            MyCapytain.resources.inventory.Text(
                urn="urn:cts:phi1294.phi002.perseus-lat2"
            ),
            "<a></a>"
        )
        self.assertEqual(transformed, "<b></b>")
    def test_chunker_default(self):
        """ Test that the chunker default is called and applied
        """
        def default(text, reffs):
            self.assertEqual(str(text.urn), "urn:cts:phi1294.phi002.perseus-lat2")
            self.assertEqual(reffs, ["1.pr"])
            return [("1.pr", "I PR")]

        nemo = Nemo(chunker={
            "default": default
        })
        chunked = nemo.chunk(
            MyCapytain.resources.inventory.Text(
                urn="urn:cts:phi1294.phi002.perseus-lat2"
            ),
            ["1.pr"]
        )
        self.assertEqual(chunked, [("1.pr", "I PR")])
    def test_transform_default_xslt(self):
        """ Test that the transform default is called and applied
        """
        def default(text, cb):
            self.assertEqual(str(text.urn), "urn:cts:phi1294.phi002.perseus-lat2")
            self.assertEqual(cb(1), 1)
            return [("1.pr", "I PR")]

        nemo = Nemo(prevnext={
            "default": default
        })
        prevnext = nemo.getprevnext(
            MyCapytain.resources.inventory.Text(
                urn="urn:cts:phi1294.phi002.perseus-lat2"
            ),
            lambda x: x
        )
        self.assertEqual(prevnext, [("1.pr", "I PR")])
    def test_prevnext_urn(self):
        """ Test that the prevnext by urn is called and applied
        """
        def urn(text, cb):
            self.assertEqual(str(text.urn), "urn:cts:phi1294.phi002.perseus-lat2")
            self.assertEqual(cb(1), 1)
            return [("1.pr", "I PR")]

        nemo = Nemo(prevnext={
            "default": lambda x, y: y,
            "urn:cts:phi1294.phi002.perseus-lat2": urn
        })
        chunked = nemo.getprevnext(
            MyCapytain.resources.inventory.Text(
                urn="urn:cts:phi1294.phi002.perseus-lat2"
            ),
            lambda x: x
        )
        self.assertEqual(chunked, [("1.pr", "I PR")])
    def test_route_passage_with_xslt(self):
        nemo = Nemo(
            api_url=NemoTestControllers.endpoint,
            inventory="annotsrc",
            transform={"default": NemoTestControllers.body_xsl}
        )
        with patch('requests.get', return_value=self.getPassage_Route) as patched:
            view = nemo.r_passage("latinLit", "phi1294", "phi002", "perseus-lat2", "1.pr.1")
            self.assertEqual(view["template"], nemo.templates["text"])
            self.assertIsInstance(view["version"], MyCapytain.resources.inventory.Text)
            self.assertEqual(str(view["version"].urn), "urn:cts:latinLit:phi1294.phi002.perseus-lat2")
            self.assertEqual(view["prev"], "1.1.1")
            self.assertEqual(view["next"], "1.1.3")
            self.assertIsInstance(view["text_passage"], Markup)

            # Reparsing xml
            xml = etree.fromstring(str(view["text_passage"]))
            self.assertEqual(
                len(xml.xpath("//tei:notbody", namespaces={"tei":"http://www.tei-c.org/ns/1.0"})),
                1
            )
    def test_line_chunker(self):
        """ Test line grouping chunker
        """
        def validReff(level):
            self.assertEqual(level, 3)
            return ["urn:cts:latinLit:phi1294.phi002.perseus-lat2:1.pr.1","urn:cts:latinLit:phi1294.phi002.perseus-lat2:1.pr.2","urn:cts:latinLit:phi1294.phi002.perseus-lat2:1.pr.3","urn:cts:latinLit:phi1294.phi002.perseus-lat2:1.pr.4","urn:cts:latinLit:phi1294.phi002.perseus-lat2:1.pr.5","urn:cts:latinLit:phi1294.phi002.perseus-lat2:1.pr.6","urn:cts:latinLit:phi1294.phi002.perseus-lat2:1.pr.7","urn:cts:latinLit:phi1294.phi002.perseus-lat2:1.pr.8","urn:cts:latinLit:phi1294.phi002.perseus-lat2:1.pr.9","urn:cts:latinLit:phi1294.phi002.perseus-lat2:1.pr.10","urn:cts:latinLit:phi1294.phi002.perseus-lat2:1.pr.11","urn:cts:latinLit:phi1294.phi002.perseus-lat2:1.pr.12","urn:cts:latinLit:phi1294.phi002.perseus-lat2:1.pr.13","urn:cts:latinLit:phi1294.phi002.perseus-lat2:1.pr.14","urn:cts:latinLit:phi1294.phi002.perseus-lat2:1.pr.15","urn:cts:latinLit:phi1294.phi002.perseus-lat2:1.pr.16","urn:cts:latinLit:phi1294.phi002.perseus-lat2:1.pr.17","urn:cts:latinLit:phi1294.phi002.perseus-lat2:1.pr.18","urn:cts:latinLit:phi1294.phi002.perseus-lat2:1.pr.19","urn:cts:latinLit:phi1294.phi002.perseus-lat2:1.pr.20","urn:cts:latinLit:phi1294.phi002.perseus-lat2:1.pr.21","urn:cts:latinLit:phi1294.phi002.perseus-lat2:1.pr.22"]

        reffs = Nemo.line_chunker(self.inventory["urn:cts:latinLit:phi1294.phi002.perseus-lat2"], validReff, 5)
        self.assertEqual(reffs, [
            ("1.pr.1-1.pr.5","1.pr.1"),
            ("1.pr.6-1.pr.10","1.pr.6"),
            ("1.pr.11-1.pr.15","1.pr.11"),
            ("1.pr.16-1.pr.20","1.pr.16"),
            ("1.pr.21-1.pr.22","1.pr.21")
        ])

        reffs = Nemo.line_chunker(self.inventory["urn:cts:latinLit:phi1294.phi002.perseus-lat2"], validReff, 11)
        self.assertEqual(reffs, [
            ("1.pr.1-1.pr.11","1.pr.1"),
            ("1.pr.12-1.pr.22","1.pr.12")
        ])
    def test_register_route(self):
        app = Flask(__name__)
        nemo = Nemo(app=app, base_url="/perseus")
        nemo.register_routes()
        self.assertIn("flask_nemo", app.blueprints)

        rules = [(rule.rule, rule.endpoint) for rule in app.url_map.iter_rules()]
        self.assertIn("/perseus/read/<collection>/<textgroup>/<work>/<version>/<passage_identifier>", [rule[0] for rule in rules])
        self.assertIn("flask_nemo.r_passage", [rule[1] for rule in rules])

        app = Flask(__name__)
        nemo = Nemo("nemo", app=app)
        nemo.register_routes()
        self.assertIn("nemo", app.blueprints)

        rules = [(rule.rule, rule.endpoint) for rule in app.url_map.iter_rules()]
        self.assertIn("/nemo/read/<collection>/<textgroup>/<work>/<version>/<passage_identifier>", [rule[0] for rule in rules])
        self.assertIn("nemo.r_passage", [rule[1] for rule in rules])

        nemo = Nemo()
        self.assertEqual(nemo.register_routes(), None)
Exemplo n.º 28
0
 def test_flask_nemo(self):
     """ Testing Flask Nemo is set up"""
     a = Nemo()
     self.assertIsInstance(a, Nemo)
     a = Nemo()
Exemplo n.º 29
0
app = Flask("Nautilus")
nautilus_cache = RedisCache("redis", port=6379, default_timeout=0)
nautilus = FlaskNautilus(app=app,
                         prefix="/api/cts",
                         name="nautilus",
                         resources=[
                             os.path.join(d, o) for o in os.listdir(d)
                             if os.path.isdir(os.path.join(d, o))
                         ],
                         parser_cache=WerkzeugCacheWrapper(nautilus_cache),
                         http_cache=Cache(config={'CACHE_TYPE': "simple"}))

# We set up Nemo
nemo = Nemo(app=app,
            name="nemo",
            base_url="",
            api_url="/api/cts",
            retriever=nautilus.retriever,
            chunker={"default": Nemo.level_grouper},
            css=["/opt/static/assets/nemo.secondary/css/theme-ext.css"],
            transform={"default": "/opt/static/assets/xslt/epidocShort.xsl"},
            templates={"passage_footer": "templates/passage_footer.html"})
# We register its routes
nemo.register_routes()
# We register its filters
nemo.register_filters()

app.debug = True
if __name__ == "__main__":
    app.run(debug=True, host='0.0.0.0')
Exemplo n.º 30
0
nemo = Nemo(
    # API URL is the URL of your endpoint.
    api_url="http://services2.perseids.org/exist/restxq/cts",
    # We set up the base url to be empty. If you want nemo to be on a
    # subpath called "cts", you would have
    # base_url="cts",
    base_url="",
    name="nemo",
    # In our case, we have an inventory named "nemo"
    inventory="nemo",
    css=[
        # USE Own CSS Files
        "static/tei.pb.min.css",
        "static/ciham.css"
    ],
    js=[
        # use own js file to load a script to go from normalized edition to diplomatic one.
        "static/ciham.js"
    ],
    transform={
        "urn:cts:froLit:jns915.jns1856.ciham-fro1": "static/ciham.xslt"
    },

    # We give thee ap object
    #app=app
    chunker={
        # The default chunker takes care of book, poem, lines
        # but it would be cool to have 30 lines group for Nemo
        "urn:cts:latinLit:phi0959.phi005.perseus-lat2":
        lambda version, callback: Nemo.line_chunker(
            version, callback, lines=30),
        "urn:cts:froLit:jns915.jns1856.ciham-fro1":
        lambda text, getLevel: [(reff.split(":")[-1], reff.split(":")[-1])
                                for reff in getLevel(1)],
        "urn:cts:latinLit:phi0472.phi001.perseus-lat2":
        lambda text, getLevel: [(reff.split(":")[-1], reff.split(":")[-1])
                                for reff in getLevel(1)],
        "urn:cts:latinLit:phi1212.phi002.perseus-lat1":
        lambda version, callback: Nemo.
        line_chunker(version, callback, lines=5
                     ),  #Apuleius, Metamorphoses, 5 sections at a time
        "default":
        Nemo.level_grouper  # lambda text, cb: Nemo.line_grouper(text, cb, 50),
    },
    templates={"passage_footer": "templates/passage_footer.html"})
Exemplo n.º 31
0
nemo = Nemo(
    # API URL is the URL of your endpoint.
    api_url="http://services2.perseids.org/exist/restxq/cts",
    # We set up the base url to be empty. If you want nemo to be on a
    # subpath called "cts", you would have
    # base_url="cts",
    base_url="",
    name="nemo",
    # In our case, we have an inventory named "nemo"
    inventory="nemo",
    css=[
            # USE Own CSS Files
            "static/tei.pb.min.css",
            "static/ciham.css"
    ],
    js=[
            # use own js file to load a script to go from normalized edition to diplomatic one.
            "static/ciham.js"
    ],
    transform={
        "urn:cts:froLit:jns915.jns1856.ciham-fro1" : "static/ciham.xslt"
    },

    # We give thee ap object
    #app=app
    chunker={
        # The default chunker takes care of book, poem, lines
        # but it would be cool to have 30 lines group for Nemo
        "urn:cts:latinLit:phi0959.phi005.perseus-lat2": lambda version, callback: Nemo.line_chunker(version, callback, lines=30),
        "urn:cts:froLit:jns915.jns1856.ciham-fro1": lambda text, getLevel: [(reff.split(":")[-1], reff.split(":")[-1]) for reff in getLevel(1)],
        "urn:cts:latinLit:phi0472.phi001.perseus-lat2": lambda text, getLevel: [(reff.split(":")[-1], reff.split(":")[-1]) for reff in getLevel(1)],
        "urn:cts:latinLit:phi1212.phi002.perseus-lat1": lambda version, callback: Nemo.line_chunker(version, callback, lines=5), #Apuleius, Metamorphoses, 5 sections at a time
        "default": Nemo.level_grouper  # lambda text, cb: Nemo.line_grouper(text, cb, 50),
    }, 

    templates = {
        "passage_footer": "templates/passage_footer.html"
    }
)
Exemplo n.º 32
0
    resources=[os.path.join(d,o) for o in os.listdir(d) if os.path.isdir(os.path.join(d,o))],
    parser_cache=WerkzeugCacheWrapper(nautilus_cache),
    http_cache=Cache(config={'CACHE_TYPE': "simple"})
)

# We set up Nemo
nemo = Nemo(
    app=app,
    name="nemo",
    base_url="",
    api_url="/api/cts",
    retriever=nautilus.retriever,
    chunker={
        "default": Nemo.level_grouper
    },
    css=[
        "/opt/static/assets/nemo.secondary/css/theme-ext.css"
    ],
    transform={
        "default": "/opt/static/assets/xslt/epidocShort.xsl"
    },
    templates = {
        "passage_footer": "templates/passage_footer.html"
    }
)
# We register its routes
nemo.register_routes()
# We register its filters
nemo.register_filters()

app.debug = True
 def test_f_formatting_passage_reference(self):
     """ Test split of passage range identifier
     """
     self.assertEqual(Nemo.f_formatting_passage_reference("1.1-1.2"), "1.1")
     self.assertEqual(Nemo.f_formatting_passage_reference("1.1"), "1.1")
Exemplo n.º 34
0
nemo = Nemo(
    # API URL is the URL of your endpoint.
    api_url="http://services2.perseids.org/exist/restxq/cts",
    # We set up the base url to be empty. If you want nemo to be on a
    # subpath called "cts", you would have
    # base_url="cts",
    base_url="",
    name="nemo",
    # In our case, we have an inventory named "nemo"
    inventory="nemo",
    css=[
            # USE Own CSS Files
            "static/tei.pb.min.css",
            "static/ciham.css"
    ],
    js=[
            # use own js file to load a script to go from normalized edition to diplomatic one.
            "static/ciham.js"
    ],
    transform={
        "urn:cts:froLit:jns915.jns1856.ciham-fro1" : "static/ciham.xslt"
    },

    # We give thee ap object
    #app=app
    chunker={
        # The default chunker takes care of book, poem, lines
        # but it would be cool to have 30 lines group for Nemo
        "urn:cts:latinLit:phi0959.phi005.perseus-lat2": lambda version, callback: Nemo.line_chunker(version, callback, lines=30),
        "urn:cts:froLit:jns915.jns1856.ciham-fro1": lambda text, getLevel: [(reff.split(":")[-1], reff.split(":")[-1]) for reff in getLevel(1)],
        "urn:cts:latinLit:phi0472.phi001.perseus-lat2": lambda text, getLevel: [(reff.split(":")[-1], reff.split(":")[-1]) for reff in getLevel(1)],
        "urn:cts:latinLit:stoa0276.stoa010.opp-lat1": lambda version, callback: Nemo.line_chunker(version, callback, lines=30),
        "default": Nemo.scheme_chunker  # lambda text, cb: Nemo.line_grouper(text, cb, 50),
    }, 

    templates = {
        "passage_footer": "templates/passage_footer.html"
    }
)
Exemplo n.º 35
0
d = "/opt/data"
app = Flask("Nautilus")
nautilus_cache = FileSystemCache("/opt/cache")
nautilus = FlaskNautilus(
    app=app,
    prefix="/api/cts",
    name="nautilus",
    resources=[os.path.join(d,o) for o in os.listdir(d) if os.path.isdir(os.path.join(d,o))],
    parser_cache=WerkzeugCacheWrapper(nautilus_cache),
    http_cache=Cache(config={'CACHE_TYPE': "simple"})
)

# We set up Nemo
nemo = Nemo(
    app=app,
    name="nemo",
    base_url="",
    api_url="/api/cts",
    retriever=nautilus.retriever,
    **nemo_config
)
# We register its routes
nemo.register_routes()
# We register its filters
nemo.register_filters()

app.debug = True
if __name__ == "__main__":
    app.run(debug=True, host='0.0.0.0')