Source code for s3vaultlib.editor.completers

#!/usr/bin/env python
from __future__ import unicode_literals

from prompt_toolkit.completion import Completer, Completion

from .utils import json_fixer, yaml_fixer, extract_tokens
import six

__author__ = "Giuseppe Chiesa"
__copyright__ = "Copyright 2017-2021, Giuseppe Chiesa"
__credits__ = ["Giuseppe Chiesa"]
__license__ = "BSD"
__maintainer__ = "Giuseppe Chiesa"
__email__ = "mail@giuseppechiesa.it"
__status__ = "PerpetualBeta"


[docs]class CompleteFromDocumentKeys(Completer): def __init__(self, bottom_toolbar_attributes=None, mode='json', **kwargs): super(CompleteFromDocumentKeys, self).__init__(**kwargs) self._bottom_toolbar_attributes = bottom_toolbar_attributes self._mode = mode self._token_list = [] def _tokenize(self, dict_data): self._token_list = [] extract_tokens(dict_data, self._token_list) return sorted(list(set(self._token_list)))
[docs] def get_completions(self, document, complete_event): try: if self._mode == 'json': dict_data = json_fixer(document.text) else: dict_data = yaml_fixer(document.text) except Exception: dict_data = {} self._token_list = self._tokenize(dict_data) last_word = document.get_word_before_cursor().replace('"', '') # debugging if self._bottom_toolbar_attributes.get('debug'): self._bottom_toolbar_attributes['debug'] = 'lw: {lw}, tokens: {t}'.format(lw=last_word, t=self._token_list) # matching if len(last_word) < 1: return for t in self._token_list: if t.startswith(last_word): yield Completion(six.text_type(t), -len(last_word))