[GMG-Devel] [PATCH 00/83] Search plugin

Alon Levy alon at pobox.com
Tue Feb 25 14:57:43 EST 2014

This is as you can see from the author breakdown below a plugin written by Google summer of code student Praveen, I picked it up and did a few small fixes and added front page integration, and have been using it for the last two months on mediagoblin.tami.org.il pretty happily. I don't claim to know it's performance (based on whoosh) or if it works with all possible plugin combinations. It defaults for off (and tested that way too). Please review, comment, and if there is none, push.

Note: patch 45 is at
because send-email complains:

fatal: patches.search.v1/0045-Add-jquery-ui-js-and-css-files-and-create-symlinks.patch: 26: patch contains a line longer than 998 characters

Alon Levy (7):
  search: add gmg command populate_all_indices
  search: fix missing template context variable for queryless query view
  search: add frontpage search bar if search plugin is enabled
  docs/media-types.rst: fix double 'the'
  models: add accessor media_entry_state for search plugin listener
  search/indices: only show processed media entry related items in
  search/listeners: only add processed media entry related objects to
    search index

Praveen Kumar (76):
  Register search plugin with mediagoblin.ini
  Correct indices storage dictionary in config_spec.ini
  Refactor exceptions raised by the search plugin
  Fix typos in search.models
  Rename models.py to indices.py as these will not be stored in db.
  Remove global constants from the top of indices.py
  Fix imports and other bugs in indices.py
  Add schemas.py which will store all index schemas.
  Store also the field names in the SearchIndex object which is also
    necessary while searching.
  Correct the class index schema class.
  Add indexer for MediaEntry objects.
  Add IndexRegistry class to maintain the search indices.
  Clean up plugins.search.indices
  Rename base.py to registry.py and indices.py to base.py.
  Add index identifier to SearchIndex.
  Correct the index identifier.
  Collect all indices in indices.py
  Add method to create a document from a model instance
  Add event listeners for tracking ORM events for indices.
  Register indices and orm events for search.
  Fix bugs and add search method in SearchIndex
  Add ListenerRegistry class to collect all the listeners.
  Add ORMEventsListener class to implement the ORM Events
  Correct indentations in search.__init__
  Add search forms.
  Add view to handle search queries.
  Add html template for search page.
  Fix bugs
  Add methods to interpret results by the SearchIndex object
  fix parameters in search views
  Refactor SearchIndex and add method to update an index.
  Add event listener for model update
  Add listener for model delete event.
  Fix bugs in SearchIndex
  Add indices for MediaEntry and MediaTag.
  Add schema for MediaTag.
  Register schemas for MediaEntry and MediaTag.
  Add gmg command to delete all indices.
  Clean up and add docstring to search methods.
  Add try-except block to event listeners.
  Correct method names in event listeners
  Store attributes from a model only it its available.
  Add field for storing search results.
  Remove the field for storing search results with the index.
  Add jquery-ui js and css files; and create symlinks.
  Add verbose_name and css_id to search results.
  Adapt results collection to change in result generation.
  Modify search template to show tabbed results.
  Show only unique results.
  Change element ids and some template fixes.
  Change view function for the search page.
  Change the identifiers used by the indices.
  Update the identifiers for MediaEntry and MediaTag indices.
  Make index registry return indices for given identifiers.
  Add a new view that handles GET search requests.
  Clean search template and make it send GET form requests.
  Add a constants.py file to store index identifiers.
  Let index registry return an interable of search indices.
  Iterate through an iterable object for search indices.
  Don't pass the CSRF token as a GET parameter.
  Fix bugs.
  Add WhooshResultsPagination and WhooshResultsCursor classes.
  Add constant that holds all the enabled indices.
  Include total count of the results in the results.
  Fix bug in IndexRegistry.
  Add pagination to the search results.
  Extend pagination class in tools.pagination.
  Change search template to accomodate pagination.
  Let the WhooshResultsCursor be defined in the paginator itself.
  Refactor search_in_indices to make it search only in a single index.
  Return no results if the category given by the client is invalid.
  Add search index for MediaComment.
  Add Collection to the search indices.
  Allow extra parameters to be passed to a paginated page.
  Display the tab a user was previously at when a page reloads.
  Remove function copied from stackoverflow and fix bug.

 docs/source/siteadmin/media-types.rst              |     2 +-
 extlib/jqueryui/jquery-ui.css                      |  1177 ++
 extlib/jqueryui/jquery-ui.js                       | 15003 +++++++++++++++++++
 mediagoblin.ini                                    |     4 +-
 mediagoblin/db/models.py                           |     6 +
 mediagoblin/gmg_commands/__init__.py               |     8 +
 mediagoblin/gmg_commands/search.py                 |    19 +
 mediagoblin/plugins/search/__init__.py             |    86 +-
 mediagoblin/plugins/search/base.py                 |   299 +
 mediagoblin/plugins/search/config_spec.ini         |     2 +-
 mediagoblin/plugins/search/constants.py            |    22 +
 mediagoblin/plugins/search/exceptions.py           |    12 +-
 mediagoblin/plugins/search/forms.py                |     8 +
 mediagoblin/plugins/search/indexer.py              |    27 +-
 mediagoblin/plugins/search/indices.py              |   155 +
 mediagoblin/plugins/search/listeners.py            |    77 +
 mediagoblin/plugins/search/models.py               |   101 -
 mediagoblin/plugins/search/registry.py             |    77 +
 mediagoblin/plugins/search/schemas.py              |    69 +
 .../mediagoblin/plugins/search/search_form.html    |     8 +
 mediagoblin/plugins/search/utils.py                |    39 +
 mediagoblin/plugins/search/views.py                |   131 +
 mediagoblin/static/css/extlib/jquery-ui.css        |     1 +
 mediagoblin/static/js/extlib/jquery-ui.js          |     1 +
 mediagoblin/templates/mediagoblin/root.html        |     2 +
 .../templates/mediagoblin/search/results_list.html |    68 +
 .../templates/mediagoblin/search/search.html       |    63 +
 mediagoblin/tools/pagination.py                    |    12 +-
 28 files changed, 17359 insertions(+), 120 deletions(-)
 create mode 100644 extlib/jqueryui/jquery-ui.css
 create mode 100644 extlib/jqueryui/jquery-ui.js
 create mode 100644 mediagoblin/gmg_commands/search.py
 create mode 100644 mediagoblin/plugins/search/base.py
 create mode 100644 mediagoblin/plugins/search/constants.py
 create mode 100644 mediagoblin/plugins/search/forms.py
 create mode 100644 mediagoblin/plugins/search/indices.py
 create mode 100644 mediagoblin/plugins/search/listeners.py
 delete mode 100644 mediagoblin/plugins/search/models.py
 create mode 100644 mediagoblin/plugins/search/registry.py
 create mode 100644 mediagoblin/plugins/search/schemas.py
 create mode 100644 mediagoblin/plugins/search/templates/mediagoblin/plugins/search/search_form.html
 create mode 100644 mediagoblin/plugins/search/utils.py
 create mode 100644 mediagoblin/plugins/search/views.py
 create mode 120000 mediagoblin/static/css/extlib/jquery-ui.css
 create mode 120000 mediagoblin/static/js/extlib/jquery-ui.js
 create mode 100644 mediagoblin/templates/mediagoblin/search/results_list.html
 create mode 100644 mediagoblin/templates/mediagoblin/search/search.html


More information about the devel mailing list