def interactive_authors(self): self.mods['authors'].opt_list(short=True) self.authors = ltools.input_default( 'Please list authors (comma separated)', self._authors, required=True, is_valid=self.mods['authors'].is_valid_list, )
def interactive_categories(self): self.mods['categories'].opt_list(short=True) self.categories = ltools.input_default( 'Please list categories (comma separated)', self._categories, required=True, is_valid=self.mods['categories'].is_valid_list, )
def interactive_section(self): def is_valid(value): f = self.mod.cm.config.has_section return value == self.nickname or not f(value) old_nick = self.nickname self.nickname = ltools.input_default('Nickname', self.nickname, required=True, is_valid=is_valid) if self.nickname != old_nick: self.mod.cm.config.remove_section(old_nick)
def interactive_slug(self): def is_valid(value): if value != ltools.slugify(value): print('This is not a valid slug.') return False return True default = self.slug or ltools.slugify(self.name) self.slug = ltools.input_default('Slug', default, required=True, is_valid=is_valid)
def _interactive_field(self, attr_name): def prompt_name(attr_name): return attr_name.replace('_', ' ').title() attr = getattr(self, attr_name) attr_class = getattr(type(self), attr_name, None) if isinstance(attr_class, BaseField): prompt = getattr(attr_class, 'verbose_name') or prompt_name(attr_name) tmp = 'interactive_' + attr_name + '_is_valid' kwargs = { 'required': attr_class.required, 'is_valid': getattr(self, tmp, None), } setattr(self, attr_name, ltools.input_default(prompt, attr, **kwargs)) else: raise lpbm.exceptions.AttributeNotAFieldError(attr_name)
def interactive_filename(self): def is_valid(value): if ltools.slugify(value) != value: print("This is not a valid slug ({}).".format(ltools.SLUG_CHARS_DISPLAY)) return False path = os.path.join("articles", value + ".markdown") if os.path.exists(os.path.normpath(path)): print("Article with this filename already exists.") return False return True default = ltools.slugify(self.title) self.filename = ltools.input_default("Filename", default, required=True, is_valid=is_valid) # Several paths have to be reset. self.filename = os.path.join("articles", self.filename) self.path = os.path.normpath(self.filename + ".markdown") self.cm.filename = self._config_filename()
def interactive_id(self): if self.id is None and self.__id is None: ids = [o.id for o in self.mod.all_objects] def is_valid(val): try: val = int(val) except ValueError: return False return val not in ids try: default = max(ids) + 1 except ValueError: default = 0 id = ltools.input_default('Id', default, required=True, is_valid=is_valid) if 'section' in self._interactive_fields: self.__id = id else: self.id = id elif self.__id is not None: self.id = self.__id
def interactive_filename(self): def is_valid(value): if ltools.slugify(value) != value: print('This is not a valid slug ({}).'.format( ltools.SLUG_CHARS_DISPLAY)) return False path = os.path.join('articles', value + '.markdown') if os.path.exists(os.path.normpath(path)): print('Article with this filename already exists.') return False return True default = ltools.slugify(self.title) self.filename = ltools.input_default('Filename', default, required=True, is_valid=is_valid) # Several paths have to be reset. self.filename = os.path.join('articles', self.filename) self.path = os.path.normpath(self.filename + '.markdown') self.cm.filename = self._config_filename()