{ "info": { "author": "David Lesieur", "author_email": "kerko@whiskyechobravo.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", "Framework :: Flask", "Intended Audience :: Developers", "Intended Audience :: Education", "Intended Audience :: Science/Research", "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3 :: Only", "Topic :: Database :: Front-Ends", "Topic :: Education", "Topic :: Internet :: WWW/HTTP :: Dynamic Content", "Topic :: Internet :: WWW/HTTP :: Indexing/Search", "Topic :: Scientific/Engineering", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "[![License](https://img.shields.io/pypi/l/kerko)][Kerko]\n[![Version](https://img.shields.io/pypi/v/kerko?color=informational)][Kerko_pypi]\n\n# Kerko\n\n[Kerko] is a web application component for the [Flask] framework that provides a\nuser-friendly search and browsing interface for sharing a bibliography managed\nwith the [Zotero] reference manager.\n\n\n## How it works\n\nKerko is implemented in [Python] as a Flask [blueprint][Flask_blueprint] and, as\nsuch, cannot do much unless it is incorporated into a Flask application. A\nsample application is available, [KerkoApp], which anyone with basic\nrequirements could deploy directly on a web server. It is expected, however,\nthat Kerko will usually be integrated into a larger application, either derived\nfrom KerkoApp or custom-built to specific needs. The Kerko-powered bibliography\nmight be just one section of a larger website.\n\nKerko does not provide any tools for managing bibliographic records. Instead, a\nwell-established reference management software, Zotero, is used for that\npurpose. The [Zotero desktop application][Zotero_desktop] provides powerful\ntools to individuals or teams for managing bibliographic data, which it stores\nin the cloud on zotero.org. Kerko can be configured to automatically synchronize\nits search index from zotero.org on a regular basis, ensuring that visitors get\nan up-to-date bibliography even if it is changing frequently. When users\ninteract with the Kerko application component, Kerko gets all its data from its\nown search index; it is only at indexing time that Kerko contacts zotero.org.\n\nThe combination of Kerko and Zotero gives you the best of both worlds: a\nuser-friendly interface for end-users of the bibliography, and a powerful\nbibliographic reference management tool for working on the bibliography's\ncontent.\n\n\n## Features\n\nThe following features are implemented in Kerko:\n\n* Faceted search interface: allows exploration of the bibliography both in\n search mode and in browsing mode, potentially suiting different user needs,\n behaviors and abilities. For example, users with a prior idea of the topic or\n expected results are able to enter keywords or a more complex query in a\n search field, while those who wish to become familiar with the content of the\n bibliography or discover new topics may choose to navigate along the proposed\n facets, to refine or broaden their results. Since both modes are integrated\n into a single interface, it is possible to combine them.\n* Keyword search features:\n * Boolean operators:\n * `AND`: matches items that contain all specified terms. This is the default\n relation between terms when no operator is specified, e.g., `a b` is the\n same as `a AND b`.\n * `OR`: matches items that contain any of the specified terms, e.g., `a OR\n b`.\n * `NOT`: excludes items that match the term, e.g., `NOT a`.\n * Boolean operators must be specified in uppercase and may be translated in\n other languages.\n * Logical grouping (with parentheses), e.g., `(a OR b) AND c`.\n * Sequence of words (with double quotes), e.g., `\"a b c\"`. The default\n difference between word positions is 1, meaning that an item will match if\n it contains the words next to each other, but a different maximum distance\n may be selected (with the tilde character), e.g. `\"web search\"~2` allows up\n to 1 word between `web` and `search`, meaning it could match `web site\n search` as well as `web search`.\n * Term boosting (with the caret), e.g., `faceted^2 search browsing^0.5`\n specifies that `faceted` is twice as important as `search` when computing\n the relevance score of results, while `browsing` is half as important.\n Boosting may be applied to a logical grouping, e.g., `(a b)^3 c`.\n * Keyword search is case-insentitive, accents are folded, and punctuation is\n ignored. To further improve recall (albeit at the cost of precision),\n stemming is also performed on terms from most text fields, e.g., title,\n abstract, notes. Stemming relieves the user from having to specify all\n variants of a word when searching, e.g., terms such as `search`, `searches`,\n and `searching` all return the same results. The [Snowball] algorithm is\n used for that purpose.\n * Field search: users may target all fields, author/contributor fields only,\n or titles only. Applications may provide additional choices.\n* Faceted browsing: allows filtering by topic (Zotero tag), by resource type\n (Zotero item type), by publication year. Moreover, an application may define\n facets modeled on collections and subcollections; in such case, any collection\n can be represented as a facet, and each subcollection as a value within that\n facet. By taking advantage of Zotero's ability to assign any given item to\n multiple collections, a faceted classification scheme can be modeled\n (including hierarchies within facets).\n* Relevance scoring: provided by the [Whoosh] library and based on the [BM25F]\n algorithm, which determines how important a term is to a document in the\n context of the whole collection of documents, while taking into account its\n relation to document structure (in this regard most fields are neutral, but\n the score is boosted when a term appears in specific fields, e.g., DOI, ISBN,\n ISSN, title, author/contributor). Any keyword search asks the question \"how\n well does this document match this query clause?\", which requires calculating\n a relevance score for each document. Filtering with facets, on the other hand,\n has no effect on the score because it asks \"does this document match this\n query clause?\", which leads to a yes or no answer.\n* Sort options: by relevance score (only applicable with keyword search), by\n publication date, by author, by title.\n* Citation styles: any from the [Zotero Style Repository][Zotero_styles], or\n custom stylesheet defined in the [Citation Style Language][CSL] (stylesheet\n must be accessible by URL).\n* Language support: the default user interface is in English, but [some\n translations][Kerko_translations] are provided. Additional translations may be\n created using gettext-compatible tools; see the **Translating Kerko** section\n below. Also to consider: [locales supported by Zotero][Zotero_locales] (which\n provides the names of fields, item types and author types displayed by Kerko),\n and languages supported by Whoosh (which provides the search capabilities):\n ar, da, nl, en, fi, fr, de, hu, it, no, pt, ro, ru, es, sv, tr.\n* Responsive design: the simple default implementation works on large monitors\n as well as on small screens. It is based on [Bootstrap].\n* Customizable front-end: applications may partly or fully replace the default\n templates, scripts and stylesheets with their own.\n* Semantic markup: users may easily import citations into their own reference\n manager software, either from search results pages or individual bibliographic\n record pages, both of which embed bibliographic metadata (using the [OpenURL\n COinS][COinS] model). Zotero Connector, for example, will automatically detect\n the metadata present in the page, but similar behavior applies to [many other\n reference management software][COinS_clients] as well.\n* Exporting: users may export individual citations as well as complete\n bibliographies corresponding to search results. By default, download links are\n provided for the RIS and BibTeX formats, but applications may be configured to\n export [any format supported by the Zotero API][Zotero_export].\n* Printing: stylesheets are provided for printing individual bibliographic\n records as well as lists of search results. When printing search results, all\n results get printed (not just the current page of results).\n* Modularity: although a [standalone application][KerkoApp] is available, Kerko\n is designed not as a standalone application, but to be part of a larger Flask\n application.\n\n\n## Demo site\n\nA [demo site][KerkoApp_demo] is available for you to try. You may also view the\n[Zotero library][Zotero_demo] that contains the source data for the demo site.\n\n\n## Requirements\n\nKerko requires Python 3.6 or later.\n\n\n### Dependencies\n\nThe following packages will be automatically installed when installing Kerko:\n\n* [Babel]: utilities for internationalization and localization.\n* [Bootstrap-Flask]: helper for integrating [Bootstrap].\n* [environs]: helper for separating configuration from code.\n* [Flask]: web application framework.\n* [Flask-BabelEx]: allows Kerko to provide its own translations, at the blueprint level.\n* [Flask-WTF]: simple integration of Flask and WTForms.\n* [Jinja2]: template engine.\n* [Pyzotero]: Python client for the Zotero API.\n* [Werkzeug]: WSGI web application library (also required by Flask).\n* [Whoosh]: pure Python full-text indexing and searching library.\n* [WTForms]: web forms validation and rendering library.\n\nThe following front-end resources are loaded from CDNs by Kerko's default\ntemplates (but could be completely removed or replaced by your application):\n\n* [Bootstrap]: front-end component library for web applications.\n* [FontAwesome]: beautiful open source icons.\n* [jQuery]: JavaScript library (required by Bootstrap).\n* [Popper.js]: JavaScript library for handling tooltips, popovers, etc. (used by Bootstrap).\n\n\n## Getting started\n\nThis section only applies if you intend to integrate Kerko into your own\napplication. If you are more interested into the standalone KerkoApp\napplication, please refer to its [installation instructions][KerkoApp].\n\nWe'll assume that you have some familiarity with Flask and suggest steps for\nbuilding a minimal app, let's call it `hello_kerko.py`, to get you started.\n\n1. The first step is to install Kerko. As with any Python library, it is highly\n recommended to install Kerko within a [virtualenv].\n\n Once the virtualenv is set and active, use the following command:\n\n ```bash\n pip install kerko\n ```\n\n\n2. In `hello_kerko.py`, configure variables required by Kerko and create your\n `app` object, as in the example below:\n\n ```python\n from flask import Flask\n from kerko.composer import Composer\n\n app = Flask(__name__)\n app.config['SECRET_KEY'] = '_5#y2L\"F4Q8z\\n\\xec]/' # Replace this value.\n app.config['KERKO_ZOTERO_API_KEY'] = 'xxxxxxxxxxxxxxxxxxxxxxxx' # Replace this value.\n app.config['KERKO_ZOTERO_LIBRARY_ID'] = '9999999' # Replace this value.\n app.config['KERKO_ZOTERO_LIBRARY_TYPE'] = 'group' # Replace this value.\n app.config['KERKO_COMPOSER'] = Composer()\n ```\n\n * `SECRET_KEY`: This variable is required for generating secure tokens in web\n forms. It should have a secure, random value and it really has to be\n secret. It is usually set in an environment variable rather than in Python\n code, to make sure it never ends up in a code repository. But here we're\n taking the minimal route and thus are cutting some corners!\n * `KERKO_ZOTERO_API_KEY`, `KERKO_ZOTERO_LIBRARY_ID` and\n `KERKO_ZOTERO_LIBRARY_TYPE`: These variables are required for Kerko to be\n able to access your Zotero library. See the **Configuration variables**\n section for details on how to properly set these variables.\n * `KERKO_COMPOSER`: This variable specifies key elements needed by Kerko,\n e.g., fields for display and search, facets for filtering. These are\n defined by instanciating the `Composer` class. Your application may\n manipulate the resulting object at configuration time to add, remove or\n alter fields, facets, sort options or search scopes. See the **Kerko\n Recipes** section for some examples.\n\n\n3. Also configure the Flask-BabelEx and Bootstrap-Flask extensions:\n\n ```python\n from flask_babelex import Babel\n from flask_bootstrap import Bootstrap\n\n babel = Babel(app)\n bootstrap = Bootstrap(app)\n ```\n\n See the respective docs of [Flask-BabelEx][Flask-BabelEx_documentation] and\n [Bootstrap-Flask][Bootstrap-Flask_documentation] for more details.\n\n\n4. Instanciate the Kerko blueprint and register it in your app:\n\n ```python\n from kerko import blueprint as kerko_blueprint\n\n app.register_blueprint(kerko_blueprint, url_prefix='/bibliography')\n ```\n\n The `url_prefix` argument defines the base path for every URL provided by\n Kerko.\n\n\n5. In the same directory as `hello_kerko.py` with your virtualenv active, run\n the following shell commands:\n\n ```bash\n export FLASK_APP=hello_kerko.py\n flask kerko index\n ```\n\n Kerko will retrieve your bibliographic data from zotero.org. If you have a\n large bibliography, this may take a while (and there is no progress\n indicator). In production use, that command is usually added to the crontab\n file for regular execution.\n\n To list all commands provided by Kerko:\n\n ```bash\n flask kerko --help\n ```\n\n6. Run your application:\n\n ```bash\n flask run\n ```\n\n7. Open http://127.0.0.1:5000/bibliography/ in your browser and explore the\n bibliography.\n\nYou have just built a really minimal application for Kerko. Check [KerkoApp] for\na slightly more complete example.\n\n\n## Configuration variables\n\nThe variables below are required and have no default values:\n\n* `KERKO_ZOTERO_LIBRARY_ID`: Your personal _userID_ for API calls, as given\n [on zotero.org](https://www.zotero.org/settings/keys) (you must be logged-in\n on zotero.org).\n* `KERKO_ZOTERO_LIBRARY_TYPE`: The type of library on zotero.org (either\n `'user'` for your main personal library, or `'group'` for a group library).\n* `KERKO_ZOTERO_API_KEY`: The API key associated to the library on zotero.org.\n You have to [create that key](https://www.zotero.org/settings/keys/new).\n* `KERKO_COMPOSER`: An instance of the `kerko.composer.Composer` class.\n\nAny of the following variables may be added to your configuration if you wish to\noverride their default value:\n\n* `KERKO_TITLE`: The title to display in web pages. Defaults to `'Kerko'`.\n* `KERKO_DATA_DIR`: The directory where to store the search index. Defaults\n to `data/kerko`.\n* `BABEL_DEFAULT_LOCALE`: The default language of the user interface. Defaults\n to `'en'`. Your application may set this variable and/or implement a locale\n selector function to override it (see the [Flask-BabelEx\n documentation][Flask-BabelEx_documentation]).\n* `KERKO_USE_TRANSLATIONS`: Use translations provided by the Kerko package.\n Defaults to `True`. When this is set to `False`, translations may be provided\n by the application's own translation catalog.\n* `KERKO_WHOOSH_LANGUAGE`: The language of search requests. Defaults to `'en'`.\n You may refer to Whoosh's source to get the list of supported languages\n (`whoosh.lang.languages`) and the list of languages that support stemming\n (`whoosh.lang.has_stemmer()`).\n* `KERKO_ZOTERO_LOCALE`: The locale to use with Zotero API calls. This dictates\n the locale of Zotero item types, field names, creator types and citations.\n Defaults to `'en-US'`. Supported locales are listed at\n https://api.zotero.org/schema, under \"locales\".\n* `KERKO_PAGE_LEN`: The number of search results per page. Defaults to `20`.\n* `KERKO_CSL_STYLE`: The citation style to use for formatted references. Can be\n either the file name (without the `.csl` extension) of one of the styles in the\n [Zotero Styles Repository][Zotero_styles] (e.g., `apa`) or the URL of a remote\n CSL file. Defaults to `'apa'`.\n* `KERKO_RESULTS_ABSTRACT`: Show abstracts in search result pages. Defaults to\n `False`.\n* `KERKO_PAGER_LINKS`: Number of pages to show in the pager (not counting the\n current page). Defaults to `8`.\n* `KERKO_FACET_COLLAPSING`: Allow collapsible facets. Defaults to `False`.\n* `KERKO_PRINT_ITEM_LINK`: Provide a print button on item pages. Defaults to\n `False`.\n* `KERKO_PRINT_CITATIONS_LINK`: Provide a print button on search results\n pages. Defaults to `False`.\n* `KERKO_PRINT_CITATIONS_MAX_COUNT`: Limit over which the print button should\n be hidden from search results pages. Defaults to `0` (i.e. no limit).\n* `KERKO_DOWNLOAD_CITATIONS_LINK`: Provide a download button on search results\n pages. Defaults to `True`.\n* `KERKO_DOWNLOAD_CITATIONS_MAX_COUNT`: Limit over which the download button\n should be hidden from search results pages. Defaults to `0` (i.e. no limit).\n* `KERKO_ZOTERO_MAX_ATTEMPTS`: Maximum number of tries after the Zotero API\n has returned an error or not responded during indexing. Defaults to `10`.\n* `KERKO_ZOTERO_WAIT`: Time to wait (in seconds) between failed attempts to\n call the Zotero API. Defaults to `120`.\n* `KERKO_ZOTERO_BATCH_SIZE`: Number of items to request on each call to the\n Zotero API. Defaults to `100` (which is the maximum currently allowed by the\n API).\n* `KERKO_ZOTERO_START`: Skip items, start at the specified position. Defaults\n to `0`. Useful only for development/tests.\n* `KERKO_ZOTERO_END`: Load items from Zotero until the specified position.\n Defaults to `0` (no limit). Useful only for development/tests.\n\n\n## Kerko Recipes\n\nTODO\n\n\n## Known limitations\n\n* The system can probably handle relatively large bibliographies (it has been\n tested so far with ~15k entries), but the number of distinct facet values has\n more impact on response times. For the best response times, it is recommended\n to limit the number of distinct facet values to a few hundreds.\n* Kerko can only manage a single bibliography per application.\n* Although Kerko might be integrated in a multilingual web application were the\n visitor may select a language, Zotero does not provide a way to manage tags or\n collections in multiple languages. Thus, there is no easy way for Kerko to\n provide those names in the user's language.\n* Whoosh does not provide much out-of-the-box support for non-Western languages.\n Therefore, search might not work very well with such languages.\n* No other referencement management tool than Zotero may serve as a back-end for\n Kerko.\n\n\n## Design choices\n\n* Do not build a back-end. Let Zotero act as the \"content management\" system.\n* Allow Kerko to integrate into richer web applications.\n* Only implement in Kerko features that are related to the exploration of a\n bibliography. Let other parts of the web application handle all other\n features that might be needed.\n* Use a lightweight framework (Flask) to avoid carrying many features that are\n not needed.\n* Use pure Python dependencies to keep installation and deployment simple. Hence\n the use of Whoosh for search, for example, instead of Elasticsearch or Solr.\n* Use a classic architecture for the front-end. Keep it simple and avoid asset\n management. Some will want to replace the front-end anyway.\n\n\n## Translating Kerko\n\nKerko can be translated using Babel's [setuptools\nintegration](http://babel.pocoo.org/en/latest/setup.html).\n\nThe following commands should be executed from the directory that contains\n`setup.py`, and the appropriate [virtualenv] must have been activated\nbeforehand.\n\nCreate or update the PO template (POT) file:\n\n```bash\npython setup.py extract_messages\n```\n\nCreate a new PO file (for a new locale) based on the POT file. Replace\n`YOUR_LOCALE` with the appropriate language code, e.g., `de`, `es`, `fr`:\n\n```bash\npython setup.py init_catalog --locale YOUR_LOCALE\n```\n\nUpdate an existing PO file based on the POT file:\n\n```bash\npython setup.py update_catalog --locale YOUR_LOCALE\n```\n\nCompile MO files:\n\n```bash\npython setup.py compile_catalog\n```\n\nYou are welcome to contribute your translation. See the **Submitting a\ntranslation** section.\n\n\n## Contributing\n\n### Reporting issues\n\nIssues may be submitted on [Kerko's issue tracker][Kerko_issues]. Please\nconsider the following guidelines:\n\n* Make sure that the same issue has not already been reported or fixed in the\n repository.\n* Describe what you expected to happen.\n* If possible, include a minimal reproducible example to help others identify\n the issue.\n* Describe what actually happened. Include the full traceback if there was an\n exception.\n\n\n### Submitting code changes\n\nPull requests may be submitted against [Kerko's repository][Kerko]. Please\nconsider the following guidelines:\n\n* Use [Yapf](https://github.com/google/yapf) to autoformat your code (with\n option `--style='{based_on_style: facebook, column_limit: 100}'`). Many\n editors provide Yapf integration.\n* Include a string like \"Fixes #123\" in your commit message (where 123 is the\n issue you fixed). See [Closing issues using\n keywords](https://help.github.com/en/articles/closing-issues-using-keywords).\n\n\n### Submitting a translation\n\nSome guidelines:\n\n* The PO file encoding must be UTF-8.\n* The header of the PO file must be filled out appropriately.\n* All messages of the PO file must be translated.\n\nPlease submit your translation as a pull request against [Kerko's\nrepository][Kerko], or by [e-mail][Kerko_email], with the PO file included as an\nattachment (**do not** copy the PO file's content into an e-mail's body, since\nthat could introduce formatting or encoding issues).\n\n\n### Supporting the project\n\nNurturing an open source project such as Kerko, following up on issues and\nhelping others in working with the system is a lot of work, but hiring the\noriginal developers of Kerko can do a lot in ensuring continued support and\ndevelopment of the project.\n\nIf you need professionnal support related to Kerko, have requirements not\ncurrently implemented in Kerko, want to make sure that some Kerko issue\nimportant to you gets resolved, or if you just like our work and would like to\nhire us for an unrelated project, please [e-mail us][Kerko_email].\n\n\n## Project background\n\nKerko was inspired by two prior projects:\n\n* [Bibliographie sur l\u2019histoire de\n Montr\u00e9al](https://bibliomontreal.uqam.ca/bibliographie/), developed in 2014 by\n David Lesieur and Patrick Fournier, of Whisky Echo Bravo, for the [Laboratoire\n d'histoire et de patrimoine de Montr\u00e9al](https://lhpm.uqam.ca/) (Universit\u00e9 du\n Qu\u00e9bec \u00e0 Montr\u00e9al).\n* [Bibliography on English-speaking Quebec](http://quescren.concordia.ca/),\n developed in 2017 by David Lesieur, for the [Quebec English-Speaking\n Communities Research Network\n (QUESCREN)](https://www.concordia.ca/artsci/scpa/quescren.html) (Concordia\n University).\n\nLater on, it became clear that other organizations needed a similar solution.\nHowever, software from the prior projects had to be rewritten so it could more\neasily be configured for different bibliographies from organizations with\ndifferent needs. That led to Kerko, whose development was made possible through\nthe following projects:\n\n* TODO: list project 1 when it's live.\n* TODO: list project 2 when it's live.\n\n\n### Etymology\n\nThe name _Zotero_ reportedly derives from the Albanian word _zot\u00ebroj_, which\nmeans \"to learn something extremely well, that is to master or acquire a skill\nin learning\" (Source: [Etymology of Zotero](http://ideophone.org/zotero-etymology/)).\n\nThe name _Kerko_ is a nod to Zotero as it takes a similar etymological route: it\nderives from the Albanian word _k\u00ebrkoj_, which means \"to ask, to request, to\nseek, to look for, to demand, to search\" and seems fit to describe a search\ntool.\n\n\n## Powered by Kerko\n\nIf you wish to share your Kerko-powered online bibliography with us all, we'll\nbe happy to list it in this section. To have it added, please [e-mail\nus][Kerko_email] or submit a pull request.\n\n\n[Babel]: https://pypi.org/project/Babel/\n[BM25F]: https://en.wikipedia.org/wiki/Okapi_BM25\n[Bootstrap]: https://getbootstrap.com/\n[Bootstrap-Flask]: https://pypi.org/project/Bootstrap-Flask/\n[Bootstrap-Flask_documentation]: https://bootstrap-flask.readthedocs.io/en/latest/basic.html\n[COinS]: https://en.wikipedia.org/wiki/COinS\n[COinS_clients]: https://en.wikipedia.org/wiki/COinS#Client_tools\n[CSL]: https://citationstyles.org/\n[environs]: https://pypi.org/project/environs/\n[Flask]: https://pypi.org/project/Flask/\n[Flask_blueprint]: https://flask.palletsprojects.com/en/1.1.x/blueprints/\n[Flask-BabelEx]: https://pypi.org/project/Flask-BabelEx/\n[Flask-BabelEx_documentation]: https://pythonhosted.org/Flask-BabelEx/\n[Flask-WTF]: https://pypi.org/project/Flask-WTF/\n[FontAwesome]: https://fontawesome.com/icons\n[Jinja2]: https://pypi.org/project/Jinja2/\n[jQuery]: https://jquery.com/\n[Kerko]: https://github.com/whiskyechobravo/kerko\n[Kerko_email]: mailto:kerko@whiskyechobravo.com\n[Kerko_issues]: https://github.com/whiskyechobravo/kerko/issues\n[Kerko_pypi]: https://pypi.org/project/Kerko/\n[Kerko_translations]: https://github.com/whiskyechobravo/kerko/tree/master/kerko/translations\n[KerkoApp]: https://github.com/whiskyechobravo/kerkoapp\n[KerkoApp_demo]: https://demo.kerko.whiskyechobravo.com\n[Popper.js]: https://popper.js.org/\n[Python]: https://www.python.org/\n[Pyzotero]: https://pypi.org/project/Pyzotero/\n[Snowball]: https://snowballstem.org/\n[virtualenv]: https://virtualenv.pypa.io/en/latest/\n[Werkzeug]: https://pypi.org/project/Werkzeug/\n[Whisky_Echo_Bravo]: https://whiskyechobravo.com\n[Whoosh]: https://pypi.org/project/Whoosh/\n[WTForms]: https://pypi.org/project/WTForms/\n[Zotero]: https://www.zotero.org/\n[Zotero_demo]: https://www.zotero.org/groups/2348869/kerko_demo/items\n[Zotero_desktop]: https://www.zotero.org/download/\n[Zotero_export]: https://www.zotero.org/support/dev/web_api/v3/basics#export_formats\n[Zotero_locales]: https://github.com/citation-style-language/locales\n[Zotero_styles]: https://www.zotero.org/styles/\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/whiskyechobravo/kerko", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "Kerko", "package_url": "https://pypi.org/project/Kerko/", "platform": "", "project_url": "https://pypi.org/project/Kerko/", "project_urls": { "Code": "https://github.com/whiskyechobravo/kerko", "Documentation": "https://github.com/whiskyechobravo/kerko", "Homepage": "https://github.com/whiskyechobravo/kerko", "Issue tracker": "https://github.com/whiskyechobravo/kerko/issues" }, "release_url": "https://pypi.org/project/Kerko/0.4/", "requires_dist": [ "Babel (>=2.6.0)", "Bootstrap-Flask (>=1.0.10)", "environs (>=5.0.0)", "Flask (>=1.0.2)", "Flask-BabelEx (>=0.9.3)", "Flask-WTF (>=0.14.2)", "Jinja2 (>=2.10.1)", "Pyzotero (>=1.4.1)", "Werkzeug (>=0.15.3)", "Whoosh (>=2.7.4)", "wrapt (>=1.10.0)", "WTForms (>=2.2)" ], "requires_python": ">=3.6", "summary": "A Flask blueprint that provides a faceted search interface for bibliographies based on Zotero.", "version": "0.4" }, "last_serial": 5900511, "releases": { "0.3": [ { "comment_text": "", "digests": { "md5": "baae3624f5349f636cdc99e7db0d3a1a", "sha256": "7fa9c45d894c597aa347fd27dd515c22a64472ad693d884582999b7ab1922557" }, "downloads": -1, "filename": "Kerko-0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "baae3624f5349f636cdc99e7db0d3a1a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 74895, "upload_time": "2019-07-29T22:10:32", "url": "https://files.pythonhosted.org/packages/55/83/c9007c3d1bd0ee878c98dfa1964ada08ff4c73dab14b5c999c24d9f859b0/Kerko-0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "dfa99dce2c917efc564aeccdb9c57fea", "sha256": "f191d0f55cd903122ba2c56dd34f37fa63110aba803760dba83ad82cc240a603" }, "downloads": -1, "filename": "Kerko-0.3.tar.gz", "has_sig": false, "md5_digest": "dfa99dce2c917efc564aeccdb9c57fea", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 72691, "upload_time": "2019-07-29T22:10:34", "url": "https://files.pythonhosted.org/packages/52/2b/9c328cf83e25e535f27c9d5fa5e6b489c323c202ff8f27ffc550e4e4b8a2/Kerko-0.3.tar.gz" } ], "0.3a0": [ { "comment_text": "", "digests": { "md5": "f56681ca6707980585d0d1642c25c610", "sha256": "520c4ec55433ed248abbf2ca38fffb14f1e3f4024267a1e01beae80a85f5cf2a" }, "downloads": -1, "filename": "Kerko-0.3a0-py3-none-any.whl", "has_sig": false, "md5_digest": "f56681ca6707980585d0d1642c25c610", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 69266, "upload_time": "2019-07-16T22:40:49", "url": "https://files.pythonhosted.org/packages/c7/9a/f9a892c0a9905fea652ce22ef81bc5919a6ebc9c7ec7d43a48a3537b64df/Kerko-0.3a0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1f7e215f7e8364e3e9f7ae80e9f0141b", "sha256": "9ae0cf48a684d353bb8c2e531bf792ebba49e76b9e1f9c8dc29f63f39f432d51" }, "downloads": -1, "filename": "Kerko-0.3a0.tar.gz", "has_sig": false, "md5_digest": "1f7e215f7e8364e3e9f7ae80e9f0141b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 62781, "upload_time": "2019-07-16T22:40:52", "url": "https://files.pythonhosted.org/packages/58/e5/b6a009335823a52071679fd9b0e28e8db2d8a9a6af17b70c5794889d62c3/Kerko-0.3a0.tar.gz" } ], "0.3a1": [ { "comment_text": "", "digests": { "md5": "364523d81670c2192d841a0704772bcc", "sha256": "678605c2a9f361a5c63dcdf2ed9fc31e1d1f1c4c42038d176156405beda88f27" }, "downloads": -1, "filename": "Kerko-0.3a1-py3-none-any.whl", "has_sig": false, "md5_digest": "364523d81670c2192d841a0704772bcc", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 69549, "upload_time": "2019-07-17T19:58:13", "url": "https://files.pythonhosted.org/packages/05/85/3856d1dc608270414b494f513e04771acdc717f0dadcf49d400745d4e166/Kerko-0.3a1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a3131cfd75859aa3fd96038ebb903690", "sha256": "56067dec9d4f9dca9ed9a3c29b0c09f5f57da79ea81b9d5df34165bcaa895f28" }, "downloads": -1, "filename": "Kerko-0.3a1.tar.gz", "has_sig": false, "md5_digest": "a3131cfd75859aa3fd96038ebb903690", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 63107, "upload_time": "2019-07-17T19:58:14", "url": "https://files.pythonhosted.org/packages/6c/63/25f306599bc950badc82775c84ab725820c5d7b5c529cfa66f561c7e2fe0/Kerko-0.3a1.tar.gz" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "64cddc474675c1a52c4805caf35a4abc", "sha256": "59e24cd444b050c49c6826f0762b83fc430dd7c8fcc3929f8c1c90d0020978f2" }, "downloads": -1, "filename": "Kerko-0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "64cddc474675c1a52c4805caf35a4abc", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 76014, "upload_time": "2019-09-28T19:54:00", "url": "https://files.pythonhosted.org/packages/1b/39/eef237ecc8315cfe00395b851433dee58d01b5b4cf1c1d2d4928ebcd2caf/Kerko-0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "301b717f314dadbb8f38380f6a9189ab", "sha256": "cad16fccfc20e87394a45f33f2c689939d99f139baf9c3672bc2775eb8ba3314" }, "downloads": -1, "filename": "Kerko-0.4.tar.gz", "has_sig": false, "md5_digest": "301b717f314dadbb8f38380f6a9189ab", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 78412, "upload_time": "2019-09-28T19:54:02", "url": "https://files.pythonhosted.org/packages/99/0b/9512c36696f9509638b0106a828e0736cd75c06cdf0f2d89d717b6381ee1/Kerko-0.4.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "64cddc474675c1a52c4805caf35a4abc", "sha256": "59e24cd444b050c49c6826f0762b83fc430dd7c8fcc3929f8c1c90d0020978f2" }, "downloads": -1, "filename": "Kerko-0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "64cddc474675c1a52c4805caf35a4abc", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 76014, "upload_time": "2019-09-28T19:54:00", "url": "https://files.pythonhosted.org/packages/1b/39/eef237ecc8315cfe00395b851433dee58d01b5b4cf1c1d2d4928ebcd2caf/Kerko-0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "301b717f314dadbb8f38380f6a9189ab", "sha256": "cad16fccfc20e87394a45f33f2c689939d99f139baf9c3672bc2775eb8ba3314" }, "downloads": -1, "filename": "Kerko-0.4.tar.gz", "has_sig": false, "md5_digest": "301b717f314dadbb8f38380f6a9189ab", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 78412, "upload_time": "2019-09-28T19:54:02", "url": "https://files.pythonhosted.org/packages/99/0b/9512c36696f9509638b0106a828e0736cd75c06cdf0f2d89d717b6381ee1/Kerko-0.4.tar.gz" } ] }