use case-insensitive form of tag filter on queries
authorAndrew Engelbrecht <sudoman@ninthfloor.org>
Mon, 6 Mar 2017 23:03:05 +0000 (18:03 -0500)
committerAndrew Engelbrecht <sudoman@ninthfloor.org>
Mon, 6 Mar 2017 23:03:05 +0000 (18:03 -0500)
this will include videos that have the same tag with different
case/capitalization.

mediagoblin_libreplanet/__init__.py
mediagoblin_libreplanet/lp_helper.py [new file with mode: 0644]
mediagoblin_libreplanet/views.py

index 7199c4cbf2002d2c029850387cf24603d24b53f1..a8403b1e8b41f23a631401afc796d8a6c254b7a2 100644 (file)
@@ -20,7 +20,7 @@ import os
 from mediagoblin import mg_globals
 from mediagoblin.tools.pluginapi import get_config, register_template_path, register_routes
 from mediagoblin.db.models import MediaEntry
-from mediagoblin.db.util import media_entries_for_tag_slug
+from lp_helper import media_entries_for_tag_slug_case_insensitive
 from mediagoblin.tools.pagination import Pagination
 from mediagoblin.tools.response import render_to_response
 from mediagoblin.tools.licenses import SORTED_LICENSES, SUPPORTED_LICENSES, License
@@ -53,7 +53,7 @@ def lp_media_for_type(db, type, tag=None, max_items=MAX_HOME_ITEMS):
     if (tag == None):
         cursor = MediaEntry.query
     else:
-        cursor = media_entries_for_tag_slug(db, tag)
+        cursor = media_entries_for_tag_slug_case_insensitive(db, tag)
 
     return cursor.\
         filter((MediaEntry.media_type == type)
diff --git a/mediagoblin_libreplanet/lp_helper.py b/mediagoblin_libreplanet/lp_helper.py
new file mode 100644 (file)
index 0000000..9e50146
--- /dev/null
@@ -0,0 +1,27 @@
+# MediaGoblin for LibrePlanet
+#
+# Based on code from MediaGoblin
+# Copyright (C) 2011, 2012 MediaGoblin contributors.  See AUTHORS.
+# Copyright (C) 2017 Andrew Engelbrecht <andrew@fsf.org>
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+def media_entries_for_tag_slug_case_insensitive(dummy_db, tag_slug):
+    return MediaEntry.query \
+        .join(MediaEntry.tags_helper) \
+        .join(MediaTag.tag_helper) \
+        .filter(
+            (MediaEntry.state == u'processed')
+            & (Tag.slug.lower() == tag_slug.lower()))
+
index 4163f8ea56f4e8a8dc25f9e0b195bacfa0a8ed2a..ceb96b62142649943f9534e8fa56391689d15fcf 100644 (file)
@@ -16,7 +16,7 @@
 
 from mediagoblin import mg_globals
 from mediagoblin.db.models import MediaEntry
-from mediagoblin.db.util import media_entries_for_tag_slug
+from lp_helper import media_entries_for_tag_slug_case_insensitive
 from mediagoblin.tools.pagination import Pagination
 from mediagoblin.tools.response import render_to_response
 from mediagoblin.decorators import uses_pagination
@@ -25,7 +25,7 @@ def type_listing(media_type, title, request, page, tag=None):
     if (tag == None):
         cursor = MediaEntry.query
     else:
-        cursor = media_entries_for_tag_slug(request.db, tag)
+        cursor = media_entries_for_tag_slug_case_insensitive(request.db, tag)
 
     cursor = cursor.\
              filter((MediaEntry.media_type == media_type)