def vocab_defs(self): return { splitext(basename(content_file))[0]: list( chain(*(map(str.strip, i.lower().split('|')) for i in read_lines(content_file)))) for content_file in glob(join(self.folder, 'vocab', self.lang, '*.voc')) + glob(join(self.folder, 'regex', self.lang, '*.rx')) }
class PadatiousTestCreator(TestCreator): intent_files = Lazy( lambda s: glob(join(s.folder, 'vocab', s.lang, '*.intent')) + glob( join(s.folder, 'locale', s.lang, '*.intent'))) intent_names = Lazy( lambda s: {basename(intent_file): intent_file for intent_file in s.intent_files}) intent_file = Lazy(lambda s: s.intent_names.get(s.intent_name, '')) entities = Lazy( lambda s: { splitext(basename(entity_file))[0]: read_lines(entity_file) for entity_file in glob(join( s.folder, 'vocab', s.lang, '*.entity')) + glob( join(s.folder, 'locale', s.lang, '*.entity')) }) intent_lines = Lazy(lambda s: read_lines(s.intent_file)) entity_names = Lazy(lambda s: set( re.findall(r'(?<={)[a-z_]+(?=})', '\n'.join(s.intent_lines)))) @Lazy @serialized def entities_str(self) -> str: if not self.entities: return yield '=== Entity Examples ===' for entity_name, lines in sorted(self.entities.items()): sample = ', '.join(lines) yield '{}: {}'.format(entity_name, sample[:50] + '...' * (len(sample) > 50)) @Lazy @serialized def intent_str(self) -> str: shuffle(self.intent_lines) yield '=== Intent Examples ===' yield '\n'.join(self.intent_lines[:6] + ['...'] * (len(self.intent_lines) > 6)) @Lazy def utterance_data(self) -> dict: utterance_data = {} utterance_left = self.utterance print() print('=== Entity Tags ===') for entity_name in sorted(self.entity_names): entity_value = ask_input( entity_name + ':', lambda x: not x or x in utterance_left, 'Response must be in the remaining utterance: ' + utterance_left) if entity_value: utterance_data[entity_name] = entity_value utterance_left = utterance_left.replace(entity_value, '') return utterance_data @Lazy def test_case(self) -> {}: if self.intent_name not in self.intent_names: return {} print() print(self.intent_str) print() if self.entities_str: print(self.entities_str) print() test_case = {'utterance': self.utterance} if self.entity_names and self.utterance_data: test_case['intent'] = self.utterance_data test_case['intent_type'] = self.intent_name if self.expected_dialog: test_case['expected_dialog'] = self.expected_dialog return test_case