Skip to content

Commit

Permalink
Working tests
Browse files Browse the repository at this point in the history
  • Loading branch information
PonteIneptique committed Feb 7, 2017
1 parent 0fd0903 commit 72fbe21
Show file tree
Hide file tree
Showing 17 changed files with 360 additions and 6,793 deletions.
6,499 changes: 0 additions & 6,499 deletions data.txt

This file was deleted.

30 changes: 16 additions & 14 deletions example.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,14 +29,11 @@
)

tic = TextInventoryCollection()
latin = TextInventory("urn:perseus:latinLit")
latin.parent = tic
latin = TextInventory("urn:perseus:latinLit", parent=tic)
latin.set_label("Classical Latin", "eng")
farsi = TextInventory("urn:perseus:farsiLit")
farsi.parent = tic
farsi = TextInventory("urn:perseus:farsiLit", parent=tic)
farsi.set_label("Farsi", "eng")
gc = TextInventory("urn:perseus:greekLit")
gc.parent = tic
gc = TextInventory("urn:perseus:greekLit", parent=tic)
gc.set_label("Ancient Greek", "eng")
gc.set_label("Grec Ancien", "fre")

Expand All @@ -60,33 +57,38 @@ def dispatchGreekLit(collection, path=None, **kwargs):
return True
return False

cache = Cache(config={'CACHE_TYPE': 'redis'})
#cache = Cache()

NautilusDummy = CTSCapitainsLocalResolver(
resource=[
"../../canonicals/First1KGreek",
"../../canonicals/canonical-latinLit",
#"./tests/test_data/nautilus/farsiLit",
#"./tests/test_data/nautilus/latinLit"
#"../../canonicals/First1KGreek",
#"../../canonicals/canonical-latinLit",
"./tests/test_data/nautilus/farsiLit",
"./tests/test_data/nautilus/latinLit"
],
dispatcher=dispatcher
)
NautilusDummy.logger.setLevel(logging.ERROR)
print(
[
x.parents for x in
NautilusDummy.getMetadata()["urn:perseus:latinLit"].members
]
)

nemo = Nemo(
app=app,
base_url="",
resolver=NautilusDummy,
chunker={"default": lambda x, y: level_grouper(x, y, groupby=20)},
plugins=None,
cache=cache,
#cache=cache,
transform={
"default": "/home/thibault/dev/perseus_nemo_ui/aperire_ui/data/assets/static/xslt/epidocShort.xsl"
}
)


cache.init_app(app)
#cache.init_app(app)
# We run the app
app.debug = True
app.run(port=port)
35 changes: 26 additions & 9 deletions flask_nemo/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,13 +16,15 @@
from pkg_resources import resource_filename
from collections import Callable, OrderedDict
from MyCapytain.common.constants import Mimetypes
from MyCapytain.resources.prototypes.metadata import ResourceCollection
import inspect

import flask_nemo._data
import flask_nemo.filters
from flask_nemo.chunker import default_chunker as __default_chunker__
from flask_nemo.default import Breadcrumb
from flask_nemo.common import resource_qualifier, ASSETS_STRUCTURE
from flask_nemo.jinjaext import FakeCacheExtension


class Nemo(object):
Expand Down Expand Up @@ -260,7 +262,10 @@ def init_app(self, app=None):
def get_locale(self):
best_match = request.accept_languages.best_match(['de', 'fr', 'en', 'la'])
if best_match is None:
best_match = request.accept_languages[0][0][:2]
if len(request.accept_languages) > 0:
best_match = request.accept_languages[0][0][:2]
else:
return self.__default_lang__
lang = self.__default_lang__
if best_match == "de":
lang = "ger"
Expand Down Expand Up @@ -451,7 +456,7 @@ def make_coins(self, collection, text, subreference="", lang=None):
)

def expose_ancestors_or_children(self, member, collection, lang=None):
""" Build an ancestor or descendant dict view based on select informations
""" Build an ancestor or descendant dict view based on selected information
:param member: Current Member to build for
:param collection: Collection from which we retrieved it
Expand All @@ -468,14 +473,16 @@ def expose_ancestors_or_children(self, member, collection, lang=None):
"size": member.size,
"semantic": self.semantic(member, parent=collection)
}
if hasattr(member, "lang") and member.lang is not None:
print(type(member).__bases__)
if isinstance(member, ResourceCollection):
x["lang"] = str(member.lang)
return x

def make_members(self, collection, lang=None):
""" Build member list for given collection
:param collection: Collection to build dict view of for its members
:param lang: Language to express data in
:return: List of basic objects
"""
if lang is None:
Expand Down Expand Up @@ -745,22 +752,28 @@ def route(**kwargs):
kwargs["lang"] = self.get_locale()
if "semantic" in kwargs:
del kwargs["semantic"]
return self.route(getattr(self, name), **kwargs)
return self.route(getattr(instance, name), **kwargs)
return route

def main_collections(self, lang=None):
return [
return sorted([
{
"id": member.id,
"label": str(member.get_label()),
"label": str(member.get_label(lang=self.get_locale())),
"model": str(member.model),
"type": str(member.type),
"size": member.size
}
for member in self.resolver.getMetadata().members
]
], key=itemgetter("label"))

def make_cache_keys(self, endpoint, kwargs):
""" This function is built to provide cache keys for templates
:param endpoint:
:param kwargs:
:return:
"""
keys = sorted(kwargs.keys())
i18n_cache_key = endpoint+"|"+"|".join([kwargs[k] for k in keys])
if "lang" in keys:
Expand Down Expand Up @@ -822,6 +835,10 @@ def register(self):
if not self.blueprint:
self.blueprint = self.create_blueprint()
self.app.register_blueprint(self.blueprint)
if self.cache is None:
# We register a fake cache extension.
setattr(self.app.jinja_env, "_fake_cache_extension", self)
self.app.jinja_env.add_extension(FakeCacheExtension)
return self.blueprint
return None

Expand Down Expand Up @@ -890,8 +907,8 @@ def chunk(self, text, reffs):
:return: Transformed list of references
:rtype: [str]
"""
if str(text.urn) in self.chunker:
return self.chunker[str(text.urn)](text, reffs)
if str(text.id) in self.chunker:
return self.chunker[str(text.id)](text, reffs)
return self.chunker["default"](text, reffs)

@staticmethod
Expand Down
4 changes: 2 additions & 2 deletions flask_nemo/data/templates/container.html
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
<link rel="stylesheet" href="{{url_for('.static', filename='css/theme.min.css')}}">
{% for filename, directory in assets["css"].items() %}
{% if directory %}<link rel="stylesheet" href="{{url_for('.secondary_assets', type='css', asset=filename)}}">
{% if directory %}<link rel="stylesheet" href="{{url_for('.secondary_assets', rtype='css', asset=filename)}}">
{% else %}<link rel="stylesheet" href="{{ filename }}">
{% endif %}
{% endfor %}
Expand Down Expand Up @@ -51,7 +51,7 @@
<!-- Latest compiled and minified JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
{% for filename, directory in assets["js"].items() %}
{% if directory %}<script src="{{url_for('.secondary_assets', type='js', asset=filename)}}"></script>
{% if directory %}<script src="{{url_for('.secondary_assets', rtype='js', asset=filename)}}"></script>
{% else %}<script src="{{ filename }}"></script>
{% endif %}
{% endfor %}
Expand Down
12 changes: 4 additions & 8 deletions flask_nemo/data/templates_plugins/breadcrumb/breadcrumb.html
Original file line number Diff line number Diff line change
@@ -1,13 +1,9 @@
<nav id="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="{{url_for(".r_index")}}">Home</a></li>
{% for crumb in breadcrumbs: %}
{%if crumb["link"] != None %}

<li class="breadcrumb-item"><a href="{{url_for(crumb["link"], **crumb["args"])}}">{{crumb["title"]}}</a></li>
{% else %}
<li class="breadcrumb-item active">{{crumb["title"]}}</li>
{% endif %}
{% endfor %}
{% for crumb in breadcrumbs: -%}
{%- if crumb["link"] != None -%}<li class="breadcrumb-item"><a href="{{url_for(crumb["link"], **crumb["args"])}}">{{crumb["title"]}}</a></li>
{% else %}<li class="breadcrumb-item active">{{crumb["title"]}}</li>{% endif %}
{%- endfor %}
</ol>
</nav>
24 changes: 12 additions & 12 deletions flask_nemo/default.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# -*- coding: utf-8 -*-

from flask_nemo.plugin import PluginPrototype
from flask_nemo.filters import f_slugify
from pkg_resources import resource_filename


Expand Down Expand Up @@ -36,18 +37,17 @@ def render(self, **kwargs):
}]

if "parents" in kwargs["collections"]:
breadcrumbs = breadcrumbs + \
[
{
"title": parent["label"],
"link": ".r_collection_semantic",
"args": {
"objectId": parent["id"],
"semantic": parent["label"],
},
}
for parent in kwargs["collections"]["parents"]
][::-1]
breadcrumbs += [
{
"title": parent["label"],
"link": ".r_collection_semantic",
"args": {
"objectId": parent["id"],
"semantic": f_slugify(parent["label"]),
},
}
for parent in kwargs["collections"]["parents"]
][::-1]

if "current" in kwargs["collections"]:
breadcrumbs.append({
Expand Down
39 changes: 39 additions & 0 deletions flask_nemo/jinjaext.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
from jinja2 import nodes
from jinja2.ext import Extension


class FakeCacheExtension(Extension):
""" This extension exists only to avoid breaks in Nemo if FlaskCache is not used.
Not that if you'd load Flask Cache en
"""
tags = set(['cache'])

def parse(self, parser):
# the first token is the token that started the tag. In our case
# we only listen to ``'cache'`` so this will be a name token with
# `cache` as value. We get the line number so that we can give
# that line number to the nodes we create by hand.
lineno = next(parser.stream).lineno

# now we parse a single expression that is used as cache key.
args = [parser.parse_expression()]

# if there is a comma, the user provided a timeout. If not use
# None as second parameter.
if parser.stream.skip_if('comma'):
args.append(parser.parse_expression())
else:
args.append(nodes.Const(None))

# now we parse the body of the cache block up to `endcache` and
# drop the needle (which would always be `endcache` in that case)
body = parser.parse_statements(['name:endcache'], drop_needle=True)

# now return a `CallBlock` node that calls our _cache_support
# helper method on this extension.
return nodes.CallBlock(self.call_method('_do_nothing', args),
[], [], body).set_lineno(lineno)

def _do_nothing(self, timeout, fragment_name, vary_on, caller):
return caller()
1 change: 1 addition & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
MyCapytain>=2.0.0b4
requests_cache>=0.4.9
Flask>=0.10.1
Flask-Caching>=1.1.1
34 changes: 33 additions & 1 deletion tests/resources.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@
from MyCapytain.resolvers.cts.local import CTSCapitainsLocalResolver
from MyCapytain.resolvers.cts.api import HttpCTSResolver
from MyCapytain.retrievers.cts5 import CTS
from MyCapytain.resources.collections.cts import TextInventory
from MyCapytain.resources.prototypes.cts.inventory import TextInventoryCollection
from MyCapytain.resolvers.utils import CollectionDispatcher
import logging


Expand Down Expand Up @@ -68,10 +71,39 @@ def setUp(self):
app=Flask(__name__)
)

tic = TextInventoryCollection()
latin = TextInventory("urn:perseus:latinLit")
latin.parent = tic
latin.set_label("Classical Latin", "eng")
farsi = TextInventory("urn:perseus:farsiLit")
farsi.parent = tic
farsi.set_label("Farsi", "eng")
gc = TextInventory("urn:perseus:greekLit")
gc.parent = tic
gc.set_label("Ancient Greek", "eng")
gc.set_label("Grec Ancien", "fre")

dispatcher = CollectionDispatcher(tic)


@dispatcher.inventory("urn:perseus:latinLit")
def dispatchLatinLit(collection, path=None, **kwargs):
if collection.id.startswith("urn:cts:latinLit:"):
return True
return False


@dispatcher.inventory("urn:perseus:farsiLit")
def dispatchfFarsiLit(collection, path=None, **kwargs):
if collection.id.startswith("urn:cts:farsiLit:"):
return True
return False

NautilusDummy = CTSCapitainsLocalResolver(
resource=[
"./tests/test_data/nautilus/farsiLit",
"./tests/test_data/nautilus/latinLit"
]
],
dispatcher=dispatcher
)
NautilusDummy.logger.setLevel(logging.ERROR)

0 comments on commit 72fbe21

Please sign in to comment.