Skip to content

Commit

Permalink
Merge 0049ae2 into 8f56b80
Browse files Browse the repository at this point in the history
  • Loading branch information
PonteIneptique committed Aug 26, 2016
2 parents 8f56b80 + 0049ae2 commit 0767475
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 16 deletions.
10 changes: 7 additions & 3 deletions flask_nemo/__init__.py
Expand Up @@ -253,16 +253,20 @@ def init_app(self, app=None):

self.register()

def transform(self, work, xml):
def transform(self, work, xml, urn):
""" Transform input according to potentiallyregistered XSLT
.. note:: Since 1.0.0, transform takes a URN parameter which represent the passage which is called
.. note:: Due to XSLT not being able to be used twice, we rexsltise the xml at every call of xslt
.. warning:: Until a C libxslt error is fixed ( https://bugzilla.gnome.org/show_bug.cgi?id=620102 ), it is not possible to use strip tags in the xslt given to this application
:param work: Work object containing metadata about the xml
:type work: MyCapytains.resources.inventory.Text
:param xml: XML to transform
:type xml: etree._Element
:param urn: URN of the passage
:type urn: str
:return: String representation of transformed resource
:rtype: str
"""
Expand All @@ -280,7 +284,7 @@ def transform(self, work, xml):

# If we have a function, it means we return the result of the function
elif isinstance(func, Callable):
return func(work, xml)
return func(work, xml, urn)
# If we have None, it meants we just give back the xml
elif func is None:
return etree.tostring(xml, encoding=str)
Expand Down Expand Up @@ -561,7 +565,7 @@ def r_passage(self, collection, textgroup, work, version, passage_identifier):
edition = self.get_text(collection, textgroup, work, version)
text = self.get_passage(collection, textgroup, work, version, passage_identifier)

passage = self.transform(edition, text.xml)
passage = self.transform(edition, text.xml, str(text.urn))
prev, next = self.getprevnext(text, Nemo.prevnext_callback_generator(text))
urn = self.transform_urn(text.urn)
return {
Expand Down
2 changes: 1 addition & 1 deletion setup.py
@@ -1,6 +1,6 @@
from setuptools import setup, find_packages

version = "1.0.0b1"
version = "1.0.0b2"

setup(
name='flask_nemo',
Expand Down
26 changes: 16 additions & 10 deletions tests/test_customization.py
Expand Up @@ -129,7 +129,7 @@ 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(str(text.urn), "urn:cts:latinLit:phi1294.phi002.perseus-lat2")
self.assertEqual(cb(1), 1)
return [("1.pr", "I PR")]

Expand All @@ -138,7 +138,7 @@ def default(text, cb):
})
prevnext = nemo.getprevnext(
MyCapytain.resources.inventory.Text(
urn="urn:cts:phi1294.phi002.perseus-lat2"
urn="urn:cts:latinLit:phi1294.phi002.perseus-lat2"
),
lambda x: x
)
Expand All @@ -147,8 +147,11 @@ def default(text, cb):
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")
urn_given = "urn:cts:latinLit:phi1294.phi002.perseus-lat2:1.pr.1"

def default(work, xml, urn):
self.assertEqual(str(work.urn), "urn:cts:latinLit:phi1294.phi002.perseus-lat2")
self.assertEqual(urn, urn_given, "Passage URN should be passed to transform")
self.assertEqual(xml, "<a></a>")
return "<b></b>"

Expand All @@ -157,9 +160,10 @@ def default(work, xml):
})
transformed = nemo.transform(
MyCapytain.resources.inventory.Text(
urn="urn:cts:phi1294.phi002.perseus-lat2"
urn="urn:cts:latinLit:phi1294.phi002.perseus-lat2"
),
"<a></a>"
"<a></a>",
urn_given
)
self.assertEqual(transformed, "<b></b>")

Expand All @@ -169,9 +173,10 @@ def test_transform_default_none(self):
nemo = Nemo()
transformed = nemo.transform(
MyCapytain.resources.inventory.Text(
urn="urn:cts:phi1294.phi002.perseus-lat2"
urn="urn:cts:latinLit:phi1294.phi002.perseus-lat2"
),
etree.fromstring("<a/>")
etree.fromstring("<a/>"),
"urn:cts:latinLit:phi1294.phi002.perseus-lat2:1.pr.1"
)
self.assertEqual(transformed, "<a/>")

Expand All @@ -184,9 +189,10 @@ def test_transform_urn_xslt(self):
})
transformed = nemo.transform(
MyCapytain.resources.inventory.Text(
urn="urn:cts:phi1294.phi002.perseus-lat2"
urn="urn:cts:latinLit:phi1294.phi002.perseus-lat2"
),
etree.fromstring('<tei:body xmlns:tei="http://www.tei-c.org/ns/1.0" />')
etree.fromstring('<tei:body xmlns:tei="http://www.tei-c.org/ns/1.0" />'),
urn="urn:cts:latinLit:phi1294.phi002.perseus-lat2:1.pr.1"
)
self.assertEqual(transformed, '<tei:notbody xmlns:tei="http://www.tei-c.org/ns/1.0"></tei:notbody>',
"It should autoclose the tag"
Expand Down
9 changes: 7 additions & 2 deletions tests/test_routes.py
Expand Up @@ -122,8 +122,12 @@ def test_route_passage_without_xslt(self):
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):
urn_given = "urn:cts:latinLit:phi1294.phi002.perseus-lat2:1.pr.1"
self.urn_sent = False

def transformer(version, text, urn=None):
if urn_given == urn:
self.urn_sent = True
self.assertEqual(str(version.urn), "urn:cts:latinLit:phi1294.phi002.perseus-lat2")
self.assertIsInstance(text, etree._Element)
return "<a>Hello</a>"
Expand All @@ -135,6 +139,7 @@ def transformer(version, text):
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>"))
self.assertTrue(self.urn_sent, "URN should be sent with passage")

def test_route_passage_with_xslt(self):
nemo = Nemo(
Expand Down

0 comments on commit 0767475

Please sign in to comment.