~ben-hutchings/ensoft-sextant/autocomplete-fix

« back to all changes in this revision

Viewing changes to src/sextant/web/server.py

  • Committer: Ben Hutchings
  • Date: 2014-11-11 12:11:19 UTC
  • Revision ID: benh@ensoft.co.uk-20141111121119-yaswak5va04nrgz2
autocomplete now wildcard matches function names in the database - only displaying lists if there are 75 or fewer results.

Show diffs side-by-side

added added

removed removed

Lines of Context:
219
219
        return CONNECTION.get_program_names()
220
220
 
221
221
    @staticmethod
222
 
    def _get_function_names(program_name):
 
222
    def _get_function_names(program_name, search=""):
 
223
        max_funcs = 76;
223
224
        programs = CONNECTION.programs_with_metadata()
224
 
        function_count = (program.number_of_funcs for program in programs 
225
 
                                if program.program_name == program_name).next()
226
 
        if function_count > CONNECTION_MAX_FUNCTION_NAMES:
227
 
            return set([])
228
 
        else:
229
 
            return CONNECTION.get_function_names(program_name)
 
225
        result = CONNECTION.get_function_names(program_name, search, max_funcs)
 
226
        return result if len(result) < max_funcs else set()
 
227
        
230
228
 
231
229
    @defer.inlineCallbacks
232
230
    def _render_GET(self, request):
254
252
                request.finish()
255
253
                defer.returnValue(None)
256
254
            program_name = request.args['program_name'][0]
 
255
            search = request.args.get('search', [''])[0]
257
256
 
258
 
            funcnames = yield deferToThread(self._get_function_names, program_name)
 
257
            funcnames = yield deferToThread(self._get_function_names, program_name, search)
259
258
            if funcnames is None:
260
259
                request.setResponseCode(404)
261
260
                request.setHeader("content-type", "text/plain")