def _get_fillin_items()

in expanded_checklist/checklist/editor.py [0:0]


    def _get_fillin_items(self, all_keys, max_count=None, **kwargs):
        items = {}
        mask_match = re.compile(r'mask\d*')

        def caps_fun(x):
            if isinstance(x, str) and len(x) >= 1:
                return x[0].upper() + x[1:]
            elif isinstance(x, munch.Munch):
                new_munch = deepcopy(x)
                for key, val in new_munch.items():
                    new_munch[key] = val[0].upper() + val[1:]
                return new_munch
            else:
                return x

        for k in kwargs:
            if re.search(r'\d+$', k):
                raise(Exception('Error: keys cannot end in integers, we use that to index multiple copies of the same key (offending key: "%s")' % k))
        for k in all_keys:
            k = re.sub(r'\..*', '', k)
            k = re.sub(r'\[.*\]', '', k)
            k = re.sub(r'.*?:', '', k)

            caps = False
            newk = k
            if len(k) >= 1 and k[0].isupper():
                caps = True
                newk = newk[0].lower() + newk[1:]
            newk = re.sub(r'\d+$', '', newk)

            if mask_match.match(k):
                continue
            if newk in kwargs:
                items[k] = kwargs[newk]
            elif newk in self.lexicons:
                items[k] = self.lexicons[newk]
            else:
                raise(Exception('Error: key "%s" not in items or lexicons' % newk))
            if max_count:
                items[k] = items[k][:max_count]
            if caps:
                items[k] = [caps_fun(item) for item in items[k]]

        return items