Explorar el Código

HUE-5116 [search] Add base API

Romain Rigaux hace 8 años
padre
commit
c663b7b
Se han modificado 2 ficheros con 70 adiciones y 2 borrados
  1. 2 2
      apps/search/src/search/api.py
  2. 68 0
      apps/search/src/search/api_engines.py

+ 2 - 2
apps/search/src/search/api.py

@@ -27,6 +27,7 @@ from desktop.lib.rest.http_client import RestException
 
 from libsolr.api import SolrApi
 
+from search.api_engines import get_engine
 from search.conf import SOLR_URL
 from search.decorators import allow_viewer_only
 from search.facet_builder import _guess_gap, _zoom_range_facet, _new_range_facet
@@ -47,8 +48,7 @@ def search(request):
 
   if collection:
     try:
-      response = SolrApi(SOLR_URL.get(), request.user).query(collection, query)
-      response = augment_solr_response(response, collection, query)
+      response = get_engine(request.user).query(collection, query)
     except RestException, e:
       try:
         message = json.loads(e.message)

+ 68 - 0
apps/search/src/search/api_engines.py

@@ -0,0 +1,68 @@
+#!/usr/bin/env python
+# Licensed to Cloudera, Inc. under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  Cloudera, Inc. licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import logging
+
+from libsolr.api import SolrApi
+
+from search.conf import SOLR_URL
+from search.models import augment_solr_response
+
+
+LOG = logging.getLogger(__name__)
+
+
+def get_engine(user, name='solr'):
+  if name == 'db':
+    return DBApi(user)
+  else:
+    return SearchApi(user)
+
+
+class DashboardApi(object):
+
+  def __init__(self, user):
+    self.user = user
+
+  def query(self, collection, query): pass
+
+  def suggest(self, collection, query): pass
+
+  def schema_fields(self, collection): pass
+
+  def fields(self, collection): pass
+
+  def luke(self, collection, query): pass
+
+  def get(self, collection, doc_id): pass
+
+  def update(self, collection, json_edits, content_type, version): pass
+
+  def stats(self, collection, field, query, facet): pass
+
+  def terms(self, collection, field, properties): pass
+
+
+class SearchApi(DashboardApi):
+
+  def query(self, collection, query):
+    response = SolrApi(SOLR_URL.get(), self.user).query(collection, query)
+    return augment_solr_response(response, collection, query)
+
+
+class DBApi(DashboardApi):
+  pass