Add Tag.normalize_name to be called by PDB.normalize_tagname.

master
voussoir 2018-04-20 15:28:27 -07:00
parent bdec6cf4a3
commit fec5eaf21e
2 changed files with 27 additions and 21 deletions

View File

@ -1207,6 +1207,26 @@ class Tag(ObjectBase, GroupableMixin):
return description return description
@staticmethod
def normalize_name(name, valid_chars=None, min_length=None, max_length=None):
original_name = name
if valid_chars is None:
valid_chars = constants.DEFAULT_CONFIG['tag']['valid_chars']
name = name.lower()
name = name.replace('-', '_')
name = name.replace(' ', '_')
name = (c for c in name if c in valid_chars)
name = ''.join(name)
if min_length is not None and len(name) < min_length:
raise exceptions.TagTooShort(original_name)
if max_length is not None and len(name) > max_length:
raise exceptions.TagTooLong(name)
return name
def _uncache(self): def _uncache(self):
self.photodb.caches['tag'].remove(self.id) self.photodb.caches['tag'].remove(self.id)
self._cached_qualified_name = None self._cached_qualified_name = None

View File

@ -892,27 +892,13 @@ class PDBTagMixin:
return tag return tag
def normalize_tagname(self, tagname): def normalize_tagname(self, tagname):
''' tagname = objects.Tag.normalize_name(
Tag names can only consist of characters defined in the config. tagname,
The given tagname is lowercased, gets its spaces and hyphens valid_chars=self.config['tag']['valid_chars'],
replaced by underscores, and is stripped of any not-whitelisted min_length=self.config['tag']['min_length'],
characters. max_length=self.config['tag']['max_length'],
''' )
original_tagname = tagname return tagname
tagname = tagname.lower()
tagname = tagname.replace('-', '_')
tagname = tagname.replace(' ', '_')
tagname = (c for c in tagname if c in self.config['tag']['valid_chars'])
tagname = ''.join(tagname)
if len(tagname) < self.config['tag']['min_length']:
raise exceptions.TagTooShort(original_tagname)
elif len(tagname) > self.config['tag']['max_length']:
raise exceptions.TagTooLong(tagname)
else:
return tagname
class PDBUserMixin: class PDBUserMixin: