{ "info": { "author": "John Harrison", "author_email": "john.harrison@liv.ac.uk", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers", "Intended Audience :: Information Technology", "License :: OSI Approved :: BSD License", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Topic :: Internet :: WWW/HTTP :: Indexing/Search", "Topic :: Internet :: WWW/HTTP :: WSGI :: Application", "Topic :: Internet :: Z39.50", "Topic :: Text Processing :: Indexing", "Topic :: Text Processing :: Linguistic", "Topic :: Text Processing :: Markup" ], "description": "Cheshire3\n=========\n\n24th July 2014 (2014-06-24)\n\n.. image:: https://travis-ci.org/cheshire3/cheshire3.png?branch=master,develop\n :target: https://travis-ci.org/cheshire3/cheshire3?branch=master,develop\n :alt: Build Status\n\n\nContents\n--------\n\n- `Description`_\n- `Authors`_\n- `Latest Version`_\n- `Installation`_\n- `Requirements / Dependencies`_\n\n - `Additional / Optional Features`_\n\n- `Documentation`_\n- `Development`_\n- `Bugs, Feature requests etc.`_\n- `Licensing`_\n- `Examples`_\n\n - `Command-line UI`_\n\n - `Creating a new Database`_\n - `Loading Data into the Database`_\n - `Searching the Database`_\n - `Exposing the Database via SRU`_\n\n - `Python API`_\n\n - `Initializing Cheshire3 Architecture`_\n\n - `Using the cheshire3 command`_\n\n - `Loading Data`_\n\n - `Pre-Processing (PreParsing)`_\n\n - `Searching`_\n - `Retrieving`_\n - `Transforming Records`_\n - `Indexes`_\n\n - `Browsing`_\n - `Facets and Filtering`_\n - `Looking Under The Hood`_\n\n\nDescription\n-----------\n\nCheshire3 is a fast XML search engine, written in Python_ for\nextensability and using C libraries for speed. Cheshire3 is feature\nrich, including support for XML namespaces, unicode, a distributable\nobject oriented model and all the features expected of a digital library\nsystem.\n\nStandards are foremost, including SRU_ and CQL_, as well as Z39.50 and\nOAI_. It is highly modular and configurable, enabling very specific needs\nto be addressed with a minimum of effort. The API_ is stable and fully\ndocumented, allowing easy third party development of components.\n\nGiven a set of documents records, Cheshire3 can extract data into one or\nmore indexes after processing with configurable workflows to add extra\nnormalization and processing. Once the indexes have been constructed, it\nsupports such operations as search, retrieve, browse and sort.\n\nThe abstract protocolHandler allows integration of Cheshire3 into any\nenvironment that will support Python_. For example using Apache_ handlers\nor WSGI_ applications, any interface from standard APIs like SRU_, Z39.50\nand OAI_ (all included by default in the cheshire3.web sub-package), to\nan online shop front can be provided.\n\n\nAuthors\n-------\n\nCheshire3 Team at the `University of Liverpool`_:\n\n- Robert Sanderson\n- **John Harrison** john.harrison@liv.ac.uk\n- Catherine Smith\n- Jerome Fuselier\n\n(Current maintainer in **bold**)\n\n\nLatest Version\n--------------\n\nThe latest stable version of Cheshire3 is available from `PyPi - the Python\nPackage Index`:\n\nhttp://pypi.python.org/pypi/cheshire3/\n\nBleeding edge source code is under version control and available from the\n`Cheshire3 GitHub repository`_:\n\nhttp://github.com/cheshire3/cheshire3\n\nPreviously, source code was available from our own Subversion server. The SVN\nrepository is being kept alive for the time being as read-only, and best\nefforts will be made to keep it up-to-date with the master (i.e.\nstable/production) branch from the `Cheshire3 Git repository`. It is available\nat:\n\nhttp://svn.cheshire3.org/repos/cheshire3\n\nPrevious versions, including code + dependency bundles, and\nauto-installation scripts are available from the `Cheshire3 download site`_:\n\nhttp://www.cheshire3.org/download/\n\n\nInstallation\n------------\n\nThe following guidelines assume that you administrative privileges on\nthe machine you're installing on. If this is not the case, then you\nmight need to use the option ``--user``. For more details, see:\nhttp://docs.python.org/install/index.html#alternate-installation\n\n**Users** (i.e. those not wanting to actually develop Cheshire3) have\nseveral choices:\n\n- pip_: ``pip install cheshire3``\n\n- `easy_install`_: ``easy_install cheshire3``\n\n- Install from source:\n\n 1. Download a source code archive from one of:\n\n http://pypi.python.org/pypi/cheshire3\n\n http://cheshire3.org/download/lastest/src/\n\n http://github.com/cheshire3/cheshire3\n\n 2. Unpack it:\n\n ``tar -xzf cheshire3-1.0.8.tar.gz``\n\n 3. Go into the unpacked directory:\n\n ``cd cheshire3-1.0.8``\n\n 4. Install:\n\n ``python setup.py install``\n\n\n**Developers**:\n\nWe recommend that you use virtualenv_ to isolate your development environment\nfrom system Python and any packages that may be installed there.\n\n1. In GitHub_, fork the `Cheshire3 GitHub repository`_\n\n2. Clone your fork of Cheshire3:\n\n\t``git clone git@github.com:/cheshire3.git``\n\n3. Install dependencies [#]_:\n\n\t``pip install -r requirements.txt``\n\n4. Install Cheshire3 in develop / editable mode:\n\n ``pip install -e .``\n\n5. Read the Development section of this README\n\n.. [#] While step 4 should theoretically resolve dependencies, we've found it \n more reliable to run this explicitly.\n\n\nRequirements / Dependencies\n---------------------------\n\nCheshire3 requires Python_ 2.6.0 or later. It has not yet been verified\nas Python 3 compliant.\n\nAs of the version 1.0 release Cheshire3's python dependencies *should* be\nresolved automatically by the standard Python package management\nmechanisms (e.g. pip_, `easy_install`_, distribute_/setuptools_).\n\nHowever on some systems, for example if installing on a machine without\nnetwork access, it may be necessary to manually install some 3rd party\ndependencies. In such cases we would encourage you to download the\nnecessary Cheshire3 bundles from the `Cheshire3 download site`_ and install\nthem using the automated build scripts included. If the automated scripts\nfail on your system, they should at least provide hints on how to resolve\nthe situation.\n\nIf you experience problems with dependencies, please get in touch via\nthe `GitHub issue tracker`_ or wiki_, and we'll do our best to help.\n\n\nAdditional / Optional Features\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nCertain features within the `Cheshire3 Information Framework`_ will have\nadditional dependencies (e.g. web APIs will require a web application\nserver). We'll try to maintain an accurate list of these in the module\ndocstring of the ``__init__.py`` file in each sub-package.\n\nThe bundles available from the `Cheshire3 download site`_ should\ncontinue to be a useful place to get hold of the source code for these\npre-requisites.\n\n\nDocumentation\n-------------\n\nDocumentation is available hosted by `Read the Docs`_:\nhttp://docs.cheshire3.org\n\nSome additional, but possibly redundant and outdated documentation is\navailable on our website:\nhttp://cheshire3.org/docs/\n\nIf you downloaded the source code, either as a tarball, or by checking\nout the repository, you'll find a copy of the Sphinx based Documentation in\nthe local docs directory.\n\nThere is additional documentation for the source code in the form of\ncomments and docstrings. Documentation for most default object\nconfigurations can be found within the ```` tag in the config XML\nfor each object. We would encourage users to take advantage of this tag\nto provide documentation for their own custom object configurations.\n\n\nDevelopment\n-----------\n\nThis section is intended for those who are intending to develop code to\ncontribute back to Cheshire3.\n\nThe Cheshire3 code base, configurations and documentation are maintained\nin the `Cheshire3 GitHub repository`_.\n\nDevelopment in the `Cheshire3 GitHub repository`_ will follow `Vincent\nDriessen's branching model\n`_, and use\n`git-flow `_ to facilitate this.\n\nSo your workflow should be something like:\n\n1. Fork the GitHub repository\n\n2. Clone your forked repository onto you local development machine\n\n3. Fix bugs in the ``develop`` branch, or develop new features in your own\n ``feature`` branch and merge back into the ``develop`` branch.)\n\n4. Push your changes back to you github fork\n\n5. Issue a pull request\n\nDeveloped code intended to be contributed back to Cheshire3 should\nfollow the recommendations made by the standard `Style Guide for Python\nCode`_ (which includes the provision that guidelines may be ignored in\nsituations where following them would make the code less readable.)\n\nParticular attention should be paid to documentation and source code\nannotation (comments). All developed modules, functions, classes, and\nmethods should be documented in the source code. Newly configured\nobjects at the server level should be documented using the ````\ntag. Comments and Documentation should be accurate and up-to-date, and\nshould *never* contradict the code itself.\n\n\nBugs, Feature requests etc.\n---------------------------\n\nBug reports, feature requests etc. should be made using the GitHub issue\ntracker: https://github.com/cheshire3/cheshire3/issues\n\n\nLicensing\n---------\n\nCopyright \u00a9 2005-2014, the `University of Liverpool`_. All rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are\nmet:\n\n- Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n- Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n- Neither the name of the `University of Liverpool`_ nor the names of its\n contributors may be used to endorse or promote products derived from\n this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS\nIS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED\nTO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A\nPARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\nHOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\nSPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED\nTO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\nPROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF\nLIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\nNEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\nSOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n\nMARC Utilities\n~~~~~~~~~~~~~~\n\nThe following licensing conditions apply to the marc\\_utils module\nincluded in the Cheshire3 package. In the following statements, \"This\nfile\" and \"the Software\" should be understood to mean marc\\_utils.py.\n\n This file should be available from\n http://www.pobox.com/~asl2/software/PyZ3950/ and is licensed under\n the X Consortium license: Copyright (c) 2001, Aaron S. Lav,\n asl2@pobox.com All rights reserved.\n\n Permission is hereby granted, free of charge, to any person\n obtaining a copy of this software and associated documentation files\n (the \"Software\"), to deal in the Software without restriction,\n including without limitation the rights to use, copy, modify, merge,\n publish, distribute, and/or sell copies of the Software, and to\n permit persons to whom the Software is furnished to do so, provided\n that the above copyright notice(s) and this permission notice appear\n in all copies of the Software and that both the above copyright\n notice(s) and this permission notice appear in supporting\n documentation.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE\n COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR\n ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY\n DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,\n WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS\n ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE\n OF THIS SOFTWARE.\n\n Except as contained in this notice, the name of a copyright holder\n shall not be used in advertising or otherwise to promote the sale,\n use or other dealings in this Software without prior written\n authorization of the copyright holder.\n\n\nExamples\n--------\n\nCommand-line UI\n~~~~~~~~~~~~~~~\n\nCheshire3 provides a number of command-line utilities to enable you to\nget started creating databases, indexing and searching your data quickly.\nAll of these commands have full help available, including lists\nof available options which can be accessed using the ``--help`` option.\ne.g.::\n\n ``cheshire3 --help``\n\n\nCreating a new Database\n'''''''''''''''''''''''\n\n``cheshire3-init [database-directory]``\n Initialize a database with some generic configurations in the given\n directory, or current directory if absent\n\nExample 1: create database in a new sub-directory::\n\n $ cheshire3-init mydb\n\nExample 2: create database in an existing directory::\n\n $ mkdir -p ~/dbs/mydb\n $ cheshire3-init ~/dbs/mydb\n \nExample 3: create database in current working directory::\n\n $ mkdir -p ~/dbs/mydb\n $ cd ~/dbs/mydb\n $ cheshire3-init\n\nExample 4: create database with descriptive information in a new\nsub-directory::\n \n $ cheshire3-init --database=mydb --title=\"My Database\" \\\n --description=\"A Database of Documents\" mydb\n\n\nLoading Data into the Database\n''''''''''''''''''''''''''''''\n\n``cheshire3-load data``\n Load data into the current Cheshire3 database\n\nExample 1: load data from a file::\n\n $ cheshire3-load path/to/file.xml\n\nExample 2: load data from a directory::\n\n $ cheshire3-load path/to/directory\n\nExample 3: load data from a URL::\n\n $ cheshire3-load http://www.example.com/index.html\n\n\nSearching the Database\n''''''''''''''''''''''\n\n``cheshire3-search query``\n Search the current Cheshire3 database based on the parameters given\n in query\n\nExample 1: search with a single keyword::\n\n $ cheshire3-search food\n\nExample 2: search with a complex CQL_ query::\n\n $ cheshire3-search \"cql.anywhere all/relevant food and \\\n rec.creationDate > 2012-01-01\"\n\n\nExposing the Database via SRU\n'''''''''''''''''''''''''''''\n\n``cheshire3-serve``\n Start a demo HTTP WSGI application server to serve configured databases\n via SRU\n\n*Please Note* the HTTP server started is probably not sufficiently robust\nfor production use. You should consider using something like `mod_wsgi`_.\n\nExample 1: start a demo HTTP WSGI server with default options::\n\n $ cheshire3-serve\n\nExample 2: start a demo HTTP WSGI server, specifying host name and port\nnumber::\n\n $ cheshire3-serve --host myhost.example.com --port 8080\n\n\nPython API\n~~~~~~~~~~\n\nThis section contains examples of using the Cheshire3 API_ from within\nPython, for embedding Cheshire3 services within a Python enabled web\napplication framework, such as Django, CherryPy, `mod_wsgi`_ etc. or when\nthe command-line interface is simply insufficient.\n\n\nInitializing Cheshire3 Architecture\n'''''''''''''''''''''''''''''''''''\n\nInitializing the Cheshire3 Architecture consists primarily of creating\ninstances of the following types within the `Cheshire3 Object Model`_:\n\nSession\n An object representing the user session. It will be passed around amongst\n the processing objects to maintain details of the current environment.\n It stores, for example, user and identifier for the database currently in\n use.\n\nServer\n A protocol neutral collection of databases, users and their dependent\n objects. It acts as an inital entry point for all requests and handles\n such things as user authentication, and global object configuration.\n\n\nThe first thing that we need to do is create a Session and build a Server.::\n\n >>> from cheshire3.baseObjects import Session\n >>> session = Session()\n\nThe Server looks after all of our objects, databases, indexes ...\neverything. Its constructor takes session and one argument, the filename\nof the top level configuration file. You could supply your own, or you can\nfind the filename of the default server configuration dynamically as\nfollows:::\n\n >>> import os\n >>> from cheshire3.server import SimpleServer\n >>> from cheshire3.internal import cheshire3Root\n >>> serverConfig = os.path.join(cheshire3Root, 'configs', 'serverConfig.xml')\n >>> server = SimpleServer(session, serverConfig)\n >>> server\n >> db = server.get_object(session, 'db_test')\n >>> db\n >> session.database = 'db_test'\n\n\nThis is primarily for efficiency in the workflow processing (objects are\ncached by their identifier, which might be duplicated for different\nobjects in different databases).\n\nAnother useful path to know is the database's default path:::\n\n >>> dfp = db.get_path(session, 'defaultPath')\n\n\n**Note:** You can often avoid having to type all of the above boiler-plate code,\nby `Using the cheshire3 command`_\n\n\nUsing the ``cheshire3`` command\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nOne way to ensure that Cheshire3 architecture is initialized is to use the\nCheshire3 interpreter, which wraps the main Python interpreter, to run your\nscript or just drop you into the interactive console.\n\n``cheshire3 [script]``\n Run the commands in the script inside the current cheshire3\n environment. If script is not provided it will drop you into an interactive\n console (very similar the the native Python interpreter.) You can also tell\n it to drop into interactive mode after executing your script using the\n ``--interactive`` option.\n\nWhen initializing the architecture in this way, ``session`` and ``server``\nvariables will be created corresponding to instances of Session and Server\nrespectively.\n\nAdditionally, if you ran the script from inside a Cheshire3 Database\ndirectory, or provided the Database identifier using the ``--database`` option,\nthe Database will be available as ``db``. The default RecordStore will also be\navailable as ``recordStore`` if it was possible to discover from the Database.\n\n\nLoading Data\n''''''''''''\n\nIn order to load data into your database you'll need a document factory\nto find your documents, a parser to parse the XML and a record store to\nput the parsed XML into. The most commonly used are\ndefaultDocumentFactory and LxmlParser. Each database needs its own\nrecord store.::\n\n >>> df = db.get_object(session, \"defaultDocumentFactory\")\n >>> parser = db.get_object(session, \"LxmlParser\")\n >>> recStore = db.get_object(session, \"recordStore\")\n\n\nBefore we get started, we need to make sure that the stores are all\nclear.::\n\n >>> recStore.clear(session)\n >> db.clear_indexes(session)\n\n\nFirst you should call db.begin\\_indexing() in order to let the database\ninitialise anything it needs to before indexing starts. Ditto for the\nrecord store.::\n\n >>> db.begin_indexing(session)\n >>> recStore.begin_storing(session)\n\n\nThen you'll need to tell the document factory where it can find your\ndata:::\n\n >>> df.load(session, 'data', cache=0, format='dir')\n >> for doc in df:\n ... rec = parser.process_document(session, doc) # [1]\n ... recStore.create_record(session, rec) # [2]\n ... db.add_record(session, rec) # [3]\n ... db.index_record(session, rec) # [4]\n recordStore/...\n\n\nIn this loop, we:\n\n1. Use the Lxml Parser to create a record object.\n\n2. Store the record in the recordStore. This assigns an identifier to it, by\n default a sequential integer.\n\n3. Add the record to the database. This stores database level metadata such\n as how many words in total, how many records, average number of words per\n record, average number of bytes per record and so forth.\n\n4. Index the record against all indexes known to the database - typically all\n indexes in the indexStore in the database's 'indexStore' path setting.\n\nThen we need to ensure this data is commited to disk:::\n\n >>> recStore.commit_storing(session)\n >>> db.commit_metadata(session)\n\n\nAnd, potentially taking longer, merge any temporary index files created:::\n\n >>> db.commit_indexing(session)\n\n\nPre-Processing (PreParsing)\n^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nAs often than not, documents will require some sort of pre-processing\nstep in order to ensure that they're valid XML in the schema that you\nwant them in. To do this, there are PreParser objects which take a\ndocument and transform it into another document.\n\nThe simplest preParser takes raw text, escapes the entities and wraps it\nin a element:::\n\n >>> from cheshire3.document import StringDocument\n >>> doc = StringDocument(\"This is some raw text with an & and a < and a >.\")\n >>> pp = db.get_object(session, 'TxtToXmlPreParser')\n >>> doc2 = pp.process_document(session, doc)\n >>> doc2.get_raw(session)\n 'This is some raw text with an & and a < and a >.'\n\n\nSearching\n'''''''''\n\nIn order to allow for translation between query languages (if possible)\nwe have a query factory, which defaults to CQL (SRU's query language,\nand our internal language).::\n\n >>> qf = db.get_object(session, 'defaultQueryFactory')\n >>> qf\n >> q = qf.get_query(session, 'c3.idx-text-kwd any \"compute\"')\n >>> q\n >> rs = db.search(session, q)\n >>> rs\n >> len(rs)\n 3\n\n\nThe 'rs' object here is a result set which acts much like a list. Each\nentry in the result set is a ResultSetItem, which is a pointer to a\nrecord.::\n\n >>> rs[0]\n Ptr:recordStore/1\n\n\nRetrieving\n''''''''''\n\nEach result set item can fetch its record:::\n\n >>> rec = rs[0].fetch_record(session)\n >>> rec.recordStore, rec.id\n ('recordStore', 1)\n\n\nRecords can expose their data as xml:::\n\n >>> rec.get_xml(session)\n '...\n\n\nAs SAX events:::\n\n >>> rec.get_sax(session)\n [\"4 None, 'record', 'record', {}...\n\n\nOr as DOM nodes, in this case using the Lxml Etree API:::\n\n >>> rec.get_dom(session)\n >> rec.process_xpath(session, '/record/header/identifier')\n [>> rec.process_xpath(session, '/record/header/identifier/text()')\n ['oai:CiteSeerPSU:2']\n\n\nTransforming Records\n''''''''''''''''''''\n\nRecords can be processed back into documents, typically in a different\nform, using Transformers::\n\n >>> dctxr = db.get_object(session, 'DublinCoreTxr')\n >>> doc = dctxr.process_record(session, rec)\n\n\nAnd you can get the data from the document with get\\_raw():::\n\n >>> doc.get_raw(session)\n '...\n\n\nThis transformer uses XSLT, which is common, but other transformers are\nequally possible.\n\n\nIndexes\n'''''''\n\nWhile `Searching`_ is the primary use of an Index, there are other API methods\nthat can be used to get information from an Index in slightly different forms\nthat can be useful when developing a user interface. This section describes\nthose API methods and then shows how to *really* get your hands dirty by\n`Looking Under the Hood`_ and getting direct access to some of the object types\nthat are used to process data within an Index.\n\n\nBrowsing\n^^^^^^^^\n\nIt is possible to browse through all terms in an index, just like reading the\nindex in a book. This is usualy done through ``scan`` method of a Database\nobject, so as to make use of the normal Index resolution machinery::\n\n >>> qf = db.get_object(session, 'defaultQueryFactory')\n >>> query = qf.get_query(session, 'dc.title = \"\"')\n >>> terms = db.scan(session, query, nTerms=25, direction=\">=\")\n\n\n``terms`` will be a list of no more than 25 items representing the terms\nfrom the start of the Index that was resolved from the context `dc.title`\n(by convention the Dublin-Core definition of \"title\"; the title of a piece of\nwork.) Each item in ``terms`` is a 2-item list:\n\n0. The unicode representation of the term\n1. A 3-item list:\n 0. internal numeric term id\n 1. number of records the term appears in\n 2. total number of occurrences of the term across the database\n\ne.g.::\n\n [u\"zen and the art of motorcycle maintenance\", [12345, 2, 3]]\n\n\nIt is also possible to use the `scan` method of an Index object directly::\n\n >>> idx = db.get_object(session, 'idx-title')\n >>> terms = idx.scan(session, query, nTerms=25, direction=\">=\")\n\n\nThe resulting ``terms`` will be the same as when obtained through the ``scan``\nmethod of the Database object.\n\n\nFacets and Filtering\n^^^^^^^^^^^^^^^^^^^^\n\nAssuming that you have configured your Index with the setting `vectors` set to\n`1`, it is possible to obtain search facets for the Index. That is to say that\ngiven a ResultSet obtained from a `Searching`_, one can obtain a list of the terms\nthat occur within the Records in that ResultSet. This list can be used to\npresent a search user with options for refining their search.::\n\n >>> qf = db.get_object(session, 'defaultQueryFactory')\n >>> query = qf.get_query(session, 'c3.idx-text-kwd any \"compute\"')\n >>> rs = db.search(session, query)\n >>> idx = db.get_object(session, 'idx-author')\n >>> facets = idx.facets(session, rs, nTerms=5)\n\n\nThe resulting ``facets`` will be a list representing the 5 terms that occur in\nthe highest number of Records within the ResultSet. Setting ``nTerms`` to ``0``\n(or omitting it) will return all terms within the Index for the Records within\nthe ResultSet. Each item in ``terms`` is a 2-item list:\n\n0. The unicode representation of the term\n1. A 3-item list:\n 0. internal numeric term id\n 1. number of records the term appears in\n 2. total number of occurrences of the term across the database\n\ne.g.::\n\n [u\"Crichton, Michael\", [54321, 3, 24]]\n\n\nLooking Under the Hood\n^^^^^^^^^^^^^^^^^^^^^^\n\nConfiguring Indexes, and the processing required to populate them\nrequires some further object types, such as Selectors, Extractors,\nTokenizers and TokenMergers. Of course, one would normally configure\nthese for each index in the database and the code in the examples below\nwould normally be executed automatically. However it can sometimes be\nuseful to get at the objects and play around with them manually,\nparticularly when starting out to find out what they do, or figure out\nwhy things didn't work as expected, and Cheshire3 makes this possible.\n\nSelector objects are configured with one or more locations from which\ndata should be selected from the Record. Most commonly (for XML data at\nleast) these will use XPaths. A selector returns a list of lists, one\nfor each configured location.::\n\n >>> xp1 = db.get_object(session, 'identifierXPathSelector')\n >>> rec = recStore.fetch_record(session, 1)\n >>> elems = xp1.process_record(session, rec)\n >>> elems\n [[>> extr = db.get_object(session, 'SimpleExtractor')\n >>> hash = extr.process_xpathResult(session, elems)\n >>> hash\n {'oai:CiteSeerPSU:2 ': {'text': 'oai:CiteSeerPSU:2 ', ...\n\n\nAnd then we'll want to normalize the results a bit. For example we can\nmake everything lowercase:::\n\n >>> n = db.get_object(session, 'CaseNormalizer')\n >>> h2 = n.process_hash(session, h)\n >>> h2\n {'oai:citeseerpsu:2 ': {'text': 'oai:citeseerpsu:2 ', ...\n\n\nAnd note the extra space on the end of the identifier...::\n\n >>> s = db.get_object(session, 'SpaceNormalizer')\n >>> h3 = s.process_hash(session, h2)\n >>> h3\n {'oai:citeseerpsu:2': {'text': 'oai:citeseerpsu:2',...\n\nNow the extracted and normalized data is ready to be stored in the\nindex!\n\nThis is fine if you want to just store strings, but most searches will\nprobably be at word or token level. Let's get the abstract text from the\nrecord:::\n\n >>> xp2 = db.get_object(session, 'textXPathSelector')\n >>> elems = xp2.process_record(session, rec)\n >>> elems\n [[>> extractor = db.get_object(session, 'ProxExtractor')\n >>> hash = extractor.process_xpathResult(session, elems)\n >>> hash\n {'The Graham scan is a fundamental backtracking...\n\n\nProxExtractor records where in the record the text came from, but\notherwise just extracts the text from the elements. We now need to split\nit up into words, a process called tokenization.::\n\n >>> tokenizer = db.get_object(session, 'RegexpFindTokenizer')\n >>> hash2 = tokenizer.process_hash(session, hash)\n >>> h\n {'The Graham scan is a fundamental backtracking...\n\n\nAlthough the key at the beginning looks the same, the value is now a\nlist of tokens from the key, in order. We then have to merge those\ntokens together, such that we have 'the' as the key, and the value has\nthe locations of that type.::\n\n >>> tokenMerger = db.get_object(session, 'ProxTokenMerger')\n >>> hash3 = tokenMerger.process_hash(session, hash2)\n >>> hash3\n {'show': {'text': 'show', 'occurences': 1, 'positions': [12, 41]},...\n\n\nAfter token merging, the multiple terms are ready to be stored in the\nindex!\n\n\nIt is also possible to iterate through stores. This is useful for adding\nnew indexes or otherwise processing all of the data without reloading\nit.\n\nFirst find our index, and the indexStore:::\n\n >>> idx = db.get_object(session, 'idx-modificationDate')\n >>> idxStore = idx.get_path(session, 'indexStore')\n\n\nThen start indexing for just that index, step through each record, and\nthen commit the terms extracted.::\n\n >>> idxStore.begin_indexing(session, idx)\n >>> for rec in recStore:\n ... idx.index_record(session, rec)\n recordStore/... \n >>> idxStore.commit_indexing(session, idx)\n\n\nThis example will have the effect of 'touching' each Record, as if it had\nbeen updated. This might be useful if for example, you knew that your Database\nwas being harvested periodically using OAI-PMH, and you wanted to indicate that\nall Records should be reharvested next time.\n\n\n.. Links\n.. _Python: http://www.python.org/\n.. _`Python Package Index`: http://pypi.python.org/pypi/cheshire3\n.. _Apache: http://httpd.apache.org \n.. _`University of Liverpool`: http://www.liv.ac.uk\n.. _`Cheshire3 Information Framework`: http://cheshire3.org\n.. _`Cheshire3 Object Model`: http://cheshire3.org/docs/objects/\n.. _`Cheshire3 download site`: http://download.cheshire3.org/\n.. _API: http://cheshire3.org/docs/objects/api/\n.. _`Cheshire3 GitHub repository`: http://github.com/cheshire3/cheshire3\n.. _`GitHub issue tracker`: http://github.com/cheshire3/cheshire3/issues\n.. _wiki: http://github.com/cheshire3/cheshire3/wiki\n.. _GitHub: http://github.com\n.. _pip: http://www.pip-installer.org/en/latest/index.html\n.. _distribute: http://packages.python.org/distribute/\n.. _`easy_install`: http://packages.python.org/distribute/easy_install.html\n.. _setuptools: http://pypi.python.org/pypi/setuptools/\n.. _`Style Guide for Python Code`: http://www.python.org/dev/peps/pep-0008/\n.. _WSGI: http://wsgi.org\n.. _`mod_wsgi`: http://code.google.com/p/modwsgi/\n.. _SRU: http://www.loc.gov/standards/sru/\n.. _CQL: http://www.loc.gov/standards/sru/specs/cql.html\n.. _OAI: http://www.openarchives.org/pmh/\n.. _virtualenv: http://www.virtualenv.org/en/latest/\n.. _`Read the Docs`: https://readthedocs.org/", "description_content_type": null, "docs_url": null, "download_url": "http://cheshire3.liv.ac.uk/download/1.1/src/cheshire3-1.1.8.tar.gz", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://cheshire3.liv.ac.uk /", "keywords": "xml document search information retrieval engine data text", "license": "BSD", "maintainer": null, "maintainer_email": null, "name": "cheshire3", "package_url": "https://pypi.org/project/cheshire3/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/cheshire3/", "project_urls": { "Download": "http://cheshire3.liv.ac.uk/download/1.1/src/cheshire3-1.1.8.tar.gz", "Homepage": "http://cheshire3.liv.ac.uk /" }, "release_url": "https://pypi.org/project/cheshire3/1.1.8/", "requires_dist": null, "requires_python": null, "summary": "Cheshire3 Search and Retrieval Engine and Information Framework", "version": "1.1.8" }, "last_serial": 1167995, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "6ab3c0e60c40f381105f832bf112ffcc", "sha256": "104202234fe7a7e758c05f642fc945386aca5f5698c945b00ae5520569456fcc" }, "downloads": -1, "filename": "cheshire3-1.0.0-py2.6.egg", "has_sig": false, "md5_digest": "6ab3c0e60c40f381105f832bf112ffcc", "packagetype": "bdist_egg", "python_version": "2.6", "requires_python": null, "size": 1302986, "upload_time": "2012-08-09T17:11:31", "url": "https://files.pythonhosted.org/packages/37/cf/9e67d017e97975787df900c55a3f5595fd90b34418cf4a3390f8dcb2ee3f/cheshire3-1.0.0-py2.6.egg" }, { "comment_text": "", "digests": { "md5": "1a34e004fe6ac236bc96b91e988daa17", "sha256": "ceb707d81dacda38510086aeafc0691409deb57cac93ad0e13adb83f5fe61efb" }, "downloads": -1, "filename": "cheshire3-1.0.0-py2.7.egg", "has_sig": false, "md5_digest": "1a34e004fe6ac236bc96b91e988daa17", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 1304799, "upload_time": "2012-08-09T15:59:58", "url": "https://files.pythonhosted.org/packages/7e/ba/625a59969e98ee08938228339421977255c6b9a738f1ff5e29928e4d1bc3/cheshire3-1.0.0-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "be439d9e2899e682bcb9cf604ba11d05", "sha256": "81a57c0a5d8fcc2002c2beb13ee4f873f8749c5733d5442576f59cdf2079e0ea" }, "downloads": -1, "filename": "cheshire3-1.0.0.tar.gz", "has_sig": false, "md5_digest": "be439d9e2899e682bcb9cf604ba11d05", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1846978, "upload_time": "2012-08-09T15:59:56", "url": "https://files.pythonhosted.org/packages/af/b2/6ae8283f114dcc08218e4c8b41ddccfde7a08b85fa31187e532d07f496d0/cheshire3-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "cb0c5544bc9d70f5448e2d8169df6aad", "sha256": "15276ac59f4756377e2f19c118228fec34d2b7a1f2af2252cdc4ab07fc53333b" }, "downloads": -1, "filename": "cheshire3-1.0.1-py2.7.egg", "has_sig": false, "md5_digest": "cb0c5544bc9d70f5448e2d8169df6aad", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 1306826, "upload_time": "2012-09-10T11:05:57", "url": "https://files.pythonhosted.org/packages/f1/02/b2ae6da96f0842611907ba14902bdba45e240be3ebaa7a6dfc8a79fef42d/cheshire3-1.0.1-py2.7.egg" }, { "comment_text": "", "digests": { "md5": "99ef2defb454a12a2ac219bfc488cbe1", "sha256": "69804f3098f4fc14250aa105f710f0ed903600bab65b150ca734d314196ff2c1" }, "downloads": -1, "filename": "cheshire3-1.0.1.tar.gz", "has_sig": false, "md5_digest": "99ef2defb454a12a2ac219bfc488cbe1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1844644, "upload_time": "2012-09-07T10:08:55", "url": "https://files.pythonhosted.org/packages/f5/86/3b35aa8f753517e443305ae36046cba576e833050cfc4ac3f2d37c6b81ed/cheshire3-1.0.1.tar.gz" } ], "1.0.10": [ { "comment_text": "", "digests": { "md5": "7a14437c053b8783bc208b84cfb6ec76", "sha256": "81d2b0bebb6a0e3d71de7d5645403b4234b0e4e226ae434452745b9942eff54b" }, "downloads": -1, "filename": "cheshire3-1.0.10.tar.gz", "has_sig": false, "md5_digest": "7a14437c053b8783bc208b84cfb6ec76", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1835671, "upload_time": "2013-01-21T16:11:36", "url": "https://files.pythonhosted.org/packages/b5/5f/3a606698412e7e6fee21cd51f6725ec5e2fb9236377af809ba2bcc76c8bf/cheshire3-1.0.10.tar.gz" } ], "1.0.11": [ { "comment_text": "", "digests": { "md5": "44a307c89bcace0d7cb2ce836cc694cc", "sha256": "6fabe63834043ed292a47d03fce698dc91d7c3e34539fa98e711aa34370aba21" }, "downloads": -1, "filename": "cheshire3-1.0.11.tar.gz", "has_sig": false, "md5_digest": "44a307c89bcace0d7cb2ce836cc694cc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1835695, "upload_time": "2013-01-22T17:19:25", "url": "https://files.pythonhosted.org/packages/60/2d/33ecfcdfea2d65a38b6ea7c03a7a897c3123a5ea4c1ce0a0d9ea1a5f9651/cheshire3-1.0.11.tar.gz" } ], "1.0.12": [ { "comment_text": "", "digests": { "md5": "88b198bb11d216ec51517e94bc4e9cae", "sha256": "a04894493a1f4e8ad270caa25132dd85d14f668e2bc6696cc12c7cc60d23ade3" }, "downloads": -1, "filename": "cheshire3-1.0.12.tar.gz", "has_sig": false, "md5_digest": "88b198bb11d216ec51517e94bc4e9cae", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1835798, "upload_time": "2013-03-04T16:39:41", "url": "https://files.pythonhosted.org/packages/21/ec/0afb36de178e7afa80dd0d1d213c655ae1501fb8e0456a5dcff08889662c/cheshire3-1.0.12.tar.gz" } ], "1.0.13": [ { "comment_text": "", "digests": { "md5": "131f873e577d6ee1e3a018e820ec2db0", "sha256": "3188c7d608ba4e0fa2749b7933b67c44a8b1b4aa6375b6bdf92b31c014e082d6" }, "downloads": -1, "filename": "cheshire3-1.0.13.tar.gz", "has_sig": false, "md5_digest": "131f873e577d6ee1e3a018e820ec2db0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1835853, "upload_time": "2013-06-07T11:50:14", "url": "https://files.pythonhosted.org/packages/cd/83/a421aa44c136702e388c9545d3a85f18e6e87f9eddebf19de194b4e2a0b8/cheshire3-1.0.13.tar.gz" } ], "1.0.14": [ { "comment_text": "", "digests": { "md5": "b4af470288f96acc02cbb7abf6bd2d68", "sha256": "6752f59f71f0697b30d69321f8d272a85d52127962a48f3e3fcd1f1256e4d113" }, "downloads": -1, "filename": "cheshire3-1.0.14.tar.gz", "has_sig": false, "md5_digest": "b4af470288f96acc02cbb7abf6bd2d68", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2025988, "upload_time": "2013-08-05T15:32:58", "url": "https://files.pythonhosted.org/packages/18/0f/6178ee95c530c3e480742ad645da5db8586dfa853a098a98d60b1ef9930c/cheshire3-1.0.14.tar.gz" } ], "1.0.15": [ { "comment_text": "", "digests": { "md5": "58f505847143dde0f2a3052392de138f", "sha256": "e01cea6014eb6a3f124412bfd518db11e13523b5cd3c60c3e44e9360aa95de07" }, "downloads": -1, "filename": "cheshire3-1.0.15.tar.gz", "has_sig": false, "md5_digest": "58f505847143dde0f2a3052392de138f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2026186, "upload_time": "2013-09-26T13:41:28", "url": "https://files.pythonhosted.org/packages/3c/4d/e0deab60690038877fb1b814948947751607f631db73fa5a76938bba9d65/cheshire3-1.0.15.tar.gz" } ], "1.0.16": [ { "comment_text": "", "digests": { "md5": "1b3e0d66397fc9efcb40ebe5f6a21c66", "sha256": "b6db176c8aeede976296293af3bb2a6a698f1a1970fc0464058672eaca635bab" }, "downloads": -1, "filename": "cheshire3-1.0.16.tar.gz", "has_sig": false, "md5_digest": "1b3e0d66397fc9efcb40ebe5f6a21c66", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2026620, "upload_time": "2013-10-10T13:56:15", "url": "https://files.pythonhosted.org/packages/24/6e/66917aa588330a8993b08b6d23fe6d3b9ccf4480c6c09fca8ce6288425c1/cheshire3-1.0.16.tar.gz" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "82dd9d38f058f0927543f267f25fabad", "sha256": "7797a0564b7faa3d024cc1d5a89eefb76e8f3002472c4e0fbb4f7bfed98f683d" }, "downloads": -1, "filename": "cheshire3-1.0.3.tar.gz", "has_sig": false, "md5_digest": "82dd9d38f058f0927543f267f25fabad", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1834199, "upload_time": "2012-11-06T13:19:58", "url": "https://files.pythonhosted.org/packages/68/da/7a1c66dc385e430f82731d1feb4f6bc2ba32dd0774f8ff5dca33c8645716/cheshire3-1.0.3.tar.gz" } ], "1.0.4": [ { "comment_text": "", "digests": { "md5": "ce90150ab3e800af80582a1556d283e0", "sha256": "84a130bae9e6119948c2141e07e27629e8e9de979e46571d9619c4c6813882cd" }, "downloads": -1, "filename": "cheshire3-1.0.4.tar.gz", "has_sig": false, "md5_digest": "ce90150ab3e800af80582a1556d283e0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1834236, "upload_time": "2012-11-09T17:04:51", "url": "https://files.pythonhosted.org/packages/e3/05/22e2bec7b299530a272d505fe19d0ffb78f05806dc070563a31f12a9902a/cheshire3-1.0.4.tar.gz" } ], "1.0.5": [ { "comment_text": "", "digests": { "md5": "03528495898adfdaadae623ca39e80bd", "sha256": "0841bbe406b5394c915e0b7d61351125fd2f7bf21f71af6a5373abb301db4193" }, "downloads": -1, "filename": "cheshire3-1.0.5.tar.gz", "has_sig": false, "md5_digest": "03528495898adfdaadae623ca39e80bd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1834309, "upload_time": "2012-11-15T12:48:42", "url": "https://files.pythonhosted.org/packages/4e/e4/2507e20851f79580d13d3de65fc195d6377f8a6d08b6d411787ca214602e/cheshire3-1.0.5.tar.gz" } ], "1.0.6": [ { "comment_text": "", "digests": { "md5": "0fccb9cc66126ad37c7c5cc0697a3b95", "sha256": "de0cbea1442744c19299465b973feb3290b8f4f43cc18973d2daa72ce5d3d763" }, "downloads": -1, "filename": "cheshire3-1.0.6.tar.gz", "has_sig": false, "md5_digest": "0fccb9cc66126ad37c7c5cc0697a3b95", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1834294, "upload_time": "2012-11-15T13:11:11", "url": "https://files.pythonhosted.org/packages/54/fc/c0cf83168f046004dfa591a8bba2b7c69fe3a5381457f9981b50c9e91dfd/cheshire3-1.0.6.tar.gz" } ], "1.0.7": [ { "comment_text": "", "digests": { "md5": "85d6b3a0e7b9e070560ac3f0a6c68fd8", "sha256": "54f9fa33849230f1dd22185acc1142786e85e283168f02e0d0b1cef04d2fae49" }, "downloads": -1, "filename": "cheshire3-1.0.7.tar.gz", "has_sig": false, "md5_digest": "85d6b3a0e7b9e070560ac3f0a6c68fd8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1834344, "upload_time": "2012-11-16T17:37:39", "url": "https://files.pythonhosted.org/packages/f4/1d/38ffa0be5f6a20f09deda697e736f9a4bfefc227bd354dbd3889244a9ba7/cheshire3-1.0.7.tar.gz" } ], "1.0.8": [ { "comment_text": "", "digests": { "md5": "78aa23f73ea5f4a695fcdb3c51d3fa24", "sha256": "c43250d523fb22a930f1bf34bfa056eed3473215f7d0a71814e3ae1912255b1e" }, "downloads": -1, "filename": "cheshire3-1.0.8.tar.gz", "has_sig": false, "md5_digest": "78aa23f73ea5f4a695fcdb3c51d3fa24", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1834977, "upload_time": "2012-11-22T16:53:28", "url": "https://files.pythonhosted.org/packages/43/cc/b0ff972fa110f0492c22d9ec238ed0fdb5c81614af5f6fc514a5c921227e/cheshire3-1.0.8.tar.gz" } ], "1.0.9": [ { "comment_text": "", "digests": { "md5": "bb393561134f1f70d064ddf19bb6a9d9", "sha256": "32e99c84a26a72edc7b1cc8c5676b560ae57ac80bae01c1b695f2ee604e06957" }, "downloads": -1, "filename": "cheshire3-1.0.9.tar.gz", "has_sig": false, "md5_digest": "bb393561134f1f70d064ddf19bb6a9d9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 1835082, "upload_time": "2012-12-18T11:05:56", "url": "https://files.pythonhosted.org/packages/f6/5d/aa2396bbfdc9a8cf5bf44595fc1e43859755c3706a032c02a6774e5b53d4/cheshire3-1.0.9.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "bf9798ed05e49ec4226ad427413d9400", "sha256": "5150364de54efd1598f46523fd1771f8326433b33a0dc70f42b4dd4caf274db5" }, "downloads": -1, "filename": "cheshire3-1.1.0.tar.gz", "has_sig": false, "md5_digest": "bf9798ed05e49ec4226ad427413d9400", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2069882, "upload_time": "2014-03-17T14:17:10", "url": "https://files.pythonhosted.org/packages/f5/cd/4b00a9b901eac7c6e0dd362931478e32f469c48da761bb91b0446dd21dda/cheshire3-1.1.0.tar.gz" } ], "1.1.0c1": [ { "comment_text": "", "digests": { "md5": "c36b43c9736e044b608140fd13e8d743", "sha256": "b8b23380047628864b9ec1712787ba9d98d476976d4a447ae661dac59f91b4fb" }, "downloads": -1, "filename": "cheshire3-1.1.0c1.tar.gz", "has_sig": false, "md5_digest": "c36b43c9736e044b608140fd13e8d743", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2062085, "upload_time": "2013-11-22T12:22:46", "url": "https://files.pythonhosted.org/packages/07/86/5575220f9adbc414cad44f57617ce85a56667fd429a965f19edbc750e8f3/cheshire3-1.1.0c1.tar.gz" } ], "1.1.0c2": [ { "comment_text": "", "digests": { "md5": "60d197145f832b085b5fce0350a54d0b", "sha256": "6dd9517cf702cc1bebf7a7697f73c11eafaf21890ed3de5202f7e81413de8419" }, "downloads": -1, "filename": "cheshire3-1.1.0c2.tar.gz", "has_sig": false, "md5_digest": "60d197145f832b085b5fce0350a54d0b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2062173, "upload_time": "2014-01-29T11:20:04", "url": "https://files.pythonhosted.org/packages/6c/78/c8344760e651ca857fe365f835df2d949b0fd3f6e5f1c07cd509f41fc90a/cheshire3-1.1.0c2.tar.gz" } ], "1.1.0c3": [ { "comment_text": "", "digests": { "md5": "1ab462c0899f495d399104e1cb19fe54", "sha256": "1f0b63020093f9950b98dc6514257f6a88b4c5587d7dd69b149da5b46b18e851" }, "downloads": -1, "filename": "cheshire3-1.1.0c3.tar.gz", "has_sig": false, "md5_digest": "1ab462c0899f495d399104e1cb19fe54", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2062239, "upload_time": "2014-01-31T15:22:35", "url": "https://files.pythonhosted.org/packages/dc/b2/0ba0772e22e15926e8fbcacc72aacb616e496ba99017485a98e68ad5cc3a/cheshire3-1.1.0c3.tar.gz" } ], "1.1.0c4": [ { "comment_text": "", "digests": { "md5": "288aaedcc582e0ffc678442fc42e8e08", "sha256": "204462c46e148a3953017ea361afc6a77b77364603864a7a0a5b2cbe8a61f3e8" }, "downloads": -1, "filename": "cheshire3-1.1.0c4.tar.gz", "has_sig": false, "md5_digest": "288aaedcc582e0ffc678442fc42e8e08", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2062258, "upload_time": "2014-02-05T15:35:23", "url": "https://files.pythonhosted.org/packages/87/e4/6cd9f2bd5d55cc080903615784775448dd2348332eaadf3a0c800f062bfe/cheshire3-1.1.0c4.tar.gz" } ], "1.1.0c5": [ { "comment_text": "", "digests": { "md5": "cbc74af7244fb1bfa70c68753bf564d9", "sha256": "916099cef0e49eca6e09037a5a1dfd99ff9b8c18f3788cd95acdeeda8f8e9286" }, "downloads": -1, "filename": "cheshire3-1.1.0c5.tar.gz", "has_sig": false, "md5_digest": "cbc74af7244fb1bfa70c68753bf564d9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2070263, "upload_time": "2014-03-12T12:12:57", "url": "https://files.pythonhosted.org/packages/2c/ff/878c4234c17f6776cf5f520332e66b5c00dab52d9efc2b65d0a2f4826785/cheshire3-1.1.0c5.tar.gz" } ], "1.1.0c6": [ { "comment_text": "", "digests": { "md5": "8458fbcd5077896ed167e3063645bb24", "sha256": "1e5a4ceccd0165deb41535f111fa596b049bb34159c38501565a7807b15f4a5f" }, "downloads": -1, "filename": "cheshire3-1.1.0c6.tar.gz", "has_sig": false, "md5_digest": "8458fbcd5077896ed167e3063645bb24", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2070190, "upload_time": "2014-03-17T14:07:40", "url": "https://files.pythonhosted.org/packages/26/71/55c96dc404ee2ffffd6df5a5b2145751a4d4ce6dba1c57a4503c9e411c22/cheshire3-1.1.0c6.tar.gz" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "f3efcd744ea332a8d0a4f2f19128cc51", "sha256": "4809ced59004904282fb2d41d4bcc71c864a4db8955c167e40d07712170e388a" }, "downloads": -1, "filename": "cheshire3-1.1.1.tar.gz", "has_sig": false, "md5_digest": "f3efcd744ea332a8d0a4f2f19128cc51", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2070465, "upload_time": "2014-03-28T10:56:29", "url": "https://files.pythonhosted.org/packages/7a/cc/601f2e818626a42c26d4cd6e0cccfa097493f524075c466f265be229d318/cheshire3-1.1.1.tar.gz" } ], "1.1.2": [ { "comment_text": "", "digests": { "md5": "d800844d7124b6e74481625e991c8cc6", "sha256": "96ae9be1e88e70b28d8fe37c7a73edcf0b9c41d61674f789c1399a785b95f425" }, "downloads": -1, "filename": "cheshire3-1.1.2.tar.gz", "has_sig": false, "md5_digest": "d800844d7124b6e74481625e991c8cc6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2070822, "upload_time": "2014-04-28T15:42:49", "url": "https://files.pythonhosted.org/packages/b9/c1/6e57b770d1674ff75997c0c6e364f00494f51539a0fcaa8277da9b99f167/cheshire3-1.1.2.tar.gz" } ], "1.1.3": [ { "comment_text": "", "digests": { "md5": "20e30edef2d58dbc16f9ff8e7ea5a639", "sha256": "a628ccb3438b3ca342395fad214a2d3f5b353cbd730267bdf570fe6528b39887" }, "downloads": -1, "filename": "cheshire3-1.1.3.tar.gz", "has_sig": false, "md5_digest": "20e30edef2d58dbc16f9ff8e7ea5a639", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2071217, "upload_time": "2014-05-01T14:53:48", "url": "https://files.pythonhosted.org/packages/c3/c0/7e415eb6718b634e2b9e95b7f160ed06d720f5f0f7c086b99983043ac3ac/cheshire3-1.1.3.tar.gz" } ], "1.1.4": [ { "comment_text": "", "digests": { "md5": "9aa0db6029c73afbc49942d0b5bacf6a", "sha256": "34600a23e5865ff1c8f2a2c732942f2691a67b0d6b7aa17538320b8781f00422" }, "downloads": -1, "filename": "cheshire3-1.1.4.tar.gz", "has_sig": false, "md5_digest": "9aa0db6029c73afbc49942d0b5bacf6a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2071435, "upload_time": "2014-06-06T15:27:44", "url": "https://files.pythonhosted.org/packages/52/e6/3eb43c41eaff196f780e1aab10ea4a4d3760b4efeb503c9e36e114a213f6/cheshire3-1.1.4.tar.gz" } ], "1.1.6": [ { "comment_text": "", "digests": { "md5": "ec73d954622a93707a12e08004582d40", "sha256": "1a9d20178003e391562f2ed45b8ac2ac7c27fd5d2025984340016140d27fba29" }, "downloads": -1, "filename": "cheshire3-1.1.6.tar.gz", "has_sig": false, "md5_digest": "ec73d954622a93707a12e08004582d40", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2072497, "upload_time": "2014-06-25T15:40:24", "url": "https://files.pythonhosted.org/packages/f6/56/49bac82e37e4aa9e4ccf742ca6e1407f0d143b5a393d25a619586b23778d/cheshire3-1.1.6.tar.gz" } ], "1.1.7": [ { "comment_text": "", "digests": { "md5": "3d50ffdcc0be400f45b33756aa48f950", "sha256": "e5ff11cee72ff83ded67a5a465c31221fc7fa9e310c7d176a25867e7818f090f" }, "downloads": -1, "filename": "cheshire3-1.1.7.tar.gz", "has_sig": false, "md5_digest": "3d50ffdcc0be400f45b33756aa48f950", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2079759, "upload_time": "2014-07-20T20:03:40", "url": "https://files.pythonhosted.org/packages/67/a6/ed4e6d9fa929d3e76c0e7f7a5bf42a2ca39c66c1b5d45483eef7b1dfbd0f/cheshire3-1.1.7.tar.gz" } ], "1.1.8": [ { "comment_text": "", "digests": { "md5": "87518643ca30672e88ab99dde1dc7629", "sha256": "79811260a4be856eac280d1dcbad9b6a40ab8209bf0a28c71e3c94257fe889e5" }, "downloads": -1, "filename": "cheshire3-1.1.8.tar.gz", "has_sig": false, "md5_digest": "87518643ca30672e88ab99dde1dc7629", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2072919, "upload_time": "2014-07-24T15:06:26", "url": "https://files.pythonhosted.org/packages/23/d5/bcf4dc25eaa29c9a48ee4ba0d35c64993322a52154e2ee8cb09f93e9cbbe/cheshire3-1.1.8.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "87518643ca30672e88ab99dde1dc7629", "sha256": "79811260a4be856eac280d1dcbad9b6a40ab8209bf0a28c71e3c94257fe889e5" }, "downloads": -1, "filename": "cheshire3-1.1.8.tar.gz", "has_sig": false, "md5_digest": "87518643ca30672e88ab99dde1dc7629", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2072919, "upload_time": "2014-07-24T15:06:26", "url": "https://files.pythonhosted.org/packages/23/d5/bcf4dc25eaa29c9a48ee4ba0d35c64993322a52154e2ee8cb09f93e9cbbe/cheshire3-1.1.8.tar.gz" } ] }