Package: annotator
Annotator StoreThis is a backend store forAnnotator.The functionality can roughly be separated in two parts:An abstraction layer wrapping Elasticsearch, to easily manage annotation
storage. It features authorization to filter search results according to
their permission settings.A Flask blueprint for a web server that exposes an HTTP API to the annotation
storage. To use this functionality, build this package with the[flask]option.Getting goingYou’ll need a recent version ofPython(Python 2 >=2.6
or Python 3 >=3.3) andElasticSearch(>=1.0.0)
installed.The quickest way to get going requires thepipandvirtualenvtools (easy_install virtualenvwill get them both). Run the
following in the repository root:virtualenv pyenv
source pyenv/bin/activate
pip install -e .[flask]
cp annotator.cfg.example annotator.cfg
python run.pyYou should see something like:* Running on http://127.0.0.1:5000/
* Restarting with reloader...If you wish to customize the configuration of the Annotator Store, make
your changes toannotator.cfgor dive intorun.py.Additionally, theHOSTandPORTenvironment variables override
the default socket binding of address127.0.0.1and port5000.Store APIThe Store API is designed to be compatible with theAnnotator. The annotation store, a
JSON-speaking REST API, will be mounted at/apiby default. See theAnnotator
documentationfor
details.Running testsWe usenoseteststo run tests. You can justpip install-e.[testing], ensure ElasticSearch is running, and
then:$ nosetests
......................................................................................
----------------------------------------------------------------------
Ran 86 tests in 19.171s

OKAlternatively (and preferably), you should installTox, and then runtox. This will run
the tests against multiple versions of Python (if you have them
installed).Pleaseopen an issueif you find that the tests don’t all pass on your machine, making sure to include
the output ofpip freeze.ChangelogAll notable changes to this project will be documented in this file. This
project endeavours to adhere toSemantic Versioning.0.14.2 2015-07-17FIXED:Annotation.searchno longer mutates the passed query.FIXED/BREAKING CHANGE:Document.get_by_uri()no longer returns a list for
empty resultsets, instead returningNone.0.14.1 2015-03-05FIXED: Document plugin doesn’t drop links without a type. The annotator
client generates a typeless link from the document href. (#116)ADDED: the search endpoint now supports ‘before’ and ‘after query parameters,
which can be used to return annotations created between a specific time
period.0.14 - 2015-02-13ADDED: the search endpoint now supports ‘sort’ and ‘order’ query parameters,
which can be used to control the sort order of the returned results.FIXED: previously only one document was returned when looking for equivalent
documents (#110). Now the Document model tracks all discovered equivalent
documents and keeps each document object up-to-date with them all.BREAKING CHANGE: Document.get_all_by_uris() no longer exists. Use
Document.get_by_uri() which should return a single document containing all
equivalent URIs. (You may wish to update your index by fetching all documents
and resaving them.)FIXED: the search_raw endpoint no longer throws an exception when the
‘fields’ parameter is provided.0.13.2 - 2014-12-03Avoid a confusing error about reindexing when annotator is used as a
library and not a standalone application (#107).0.13.1 - 2014-12-03Reindexer can run even when target exists.0.13.0 - 2014-12-02Slight changes to reindex.py to ease subclassing it.0.12.0 - 2014-10-06A tool for migrating/reindexing elasticsearch (reindex.py) was added (#103).The store returns more appropriate HTTP response codes (#96).Dropped support for ElasticSearch versions before 1.0.0 (#92).The default search query has been changed from a term-filtered “match all” to
a set of “match queries”, resulting in more liberal interpretations of
queries (#89).The default elasticsearch analyzer for annotation fields has been changed to
“keyword” in order to provide more consistent case-sensitivity behaviours
(#73, #88).Made Flask an optional dependency: it is now possible to use the persistence
components of the project without needing Flask (#76).Python 3 compatibility (#72).0.11.2 - 2014-07-25SECURITY: Fixed bug that allowed authenticated users to overwrite annotations
on which they did not have permissions (#82).0.11.1 - 2014-04-09Fixed support for using ElasticSearch instances behind HTTP Basic auth0.11.0 - 2014-04-08Add support for ElasticSearch 1.0Create changelog