Remove get_cached_flat_dict, add get_cached_tag_export.
This commit is contained in:
parent
cf64c79809
commit
f3bceb4688
3 changed files with 30 additions and 20 deletions
|
@ -115,6 +115,9 @@ def comma_space_split(s):
|
||||||
return s
|
return s
|
||||||
return re.split(r'[ ,]+', s.strip())
|
return re.split(r'[ ,]+', s.strip())
|
||||||
|
|
||||||
|
def dict_to_tuple(d):
|
||||||
|
return tuple(sorted(d.items()))
|
||||||
|
|
||||||
def generate_image_thumbnail(filepath, width, height):
|
def generate_image_thumbnail(filepath, width, height):
|
||||||
if not os.path.isfile(filepath):
|
if not os.path.isfile(filepath):
|
||||||
raise FileNotFoundError(filepath)
|
raise FileNotFoundError(filepath)
|
||||||
|
|
|
@ -1245,7 +1245,7 @@ class Tag(ObjectBase, GroupableMixin):
|
||||||
ret = super().add_child(*args, **kwargs)
|
ret = super().add_child(*args, **kwargs)
|
||||||
if ret is BAIL:
|
if ret is BAIL:
|
||||||
return
|
return
|
||||||
self.photodb._cached_tag_flat_dict = None
|
self.photodb.caches['tag_exports'].clear()
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
@decorators.required_feature('tag.edit')
|
@decorators.required_feature('tag.edit')
|
||||||
|
@ -1254,7 +1254,7 @@ class Tag(ObjectBase, GroupableMixin):
|
||||||
ret = super().add_children(*args, **kwargs)
|
ret = super().add_children(*args, **kwargs)
|
||||||
if ret is BAIL:
|
if ret is BAIL:
|
||||||
return
|
return
|
||||||
self.photodb._cached_tag_flat_dict = None
|
self.photodb.caches['tag_exports'].clear()
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
@decorators.required_feature('tag.edit')
|
@decorators.required_feature('tag.edit')
|
||||||
|
@ -1269,7 +1269,7 @@ class Tag(ObjectBase, GroupableMixin):
|
||||||
|
|
||||||
self.photodb.log.debug('New synonym %s of %s', synname, self.name)
|
self.photodb.log.debug('New synonym %s of %s', synname, self.name)
|
||||||
|
|
||||||
self.photodb._cached_tag_flat_dict = None
|
self.photodb.caches['tag_exports'].clear()
|
||||||
|
|
||||||
data = {
|
data = {
|
||||||
'name': synname,
|
'name': synname,
|
||||||
|
@ -1292,7 +1292,7 @@ class Tag(ObjectBase, GroupableMixin):
|
||||||
'''
|
'''
|
||||||
mastertag = self.photodb.get_tag(name=mastertag)
|
mastertag = self.photodb.get_tag(name=mastertag)
|
||||||
|
|
||||||
self.photodb._cached_tag_flat_dict = None
|
self.photodb.caches['tag_exports'].clear()
|
||||||
|
|
||||||
# Migrate the old tag's synonyms to the new one
|
# Migrate the old tag's synonyms to the new one
|
||||||
# UPDATE is safe for this operation because there is no chance of duplicates.
|
# UPDATE is safe for this operation because there is no chance of duplicates.
|
||||||
|
@ -1345,12 +1345,11 @@ class Tag(ObjectBase, GroupableMixin):
|
||||||
@decorators.transaction
|
@decorators.transaction
|
||||||
def delete(self, *, delete_children=False):
|
def delete(self, *, delete_children=False):
|
||||||
self.photodb.log.debug('Deleting %s', self)
|
self.photodb.log.debug('Deleting %s', self)
|
||||||
self.photodb._cached_tag_flat_dict = None
|
|
||||||
super().delete(delete_children=delete_children)
|
super().delete(delete_children=delete_children)
|
||||||
self.photodb.sql_delete(table='photo_tag_rel', pairs={'tagid': self.id})
|
self.photodb.sql_delete(table='photo_tag_rel', pairs={'tagid': self.id})
|
||||||
self.photodb.sql_delete(table='tag_synonyms', pairs={'mastername': self.name})
|
self.photodb.sql_delete(table='tag_synonyms', pairs={'mastername': self.name})
|
||||||
self.photodb.sql_delete(table='tags', pairs={'id': self.id})
|
self.photodb.sql_delete(table='tags', pairs={'id': self.id})
|
||||||
self.photodb._cached_tag_flat_dict = None
|
self.photodb.caches['tag_exports'].clear()
|
||||||
self._uncache()
|
self._uncache()
|
||||||
|
|
||||||
@decorators.required_feature('tag.edit')
|
@decorators.required_feature('tag.edit')
|
||||||
|
@ -1386,7 +1385,7 @@ class Tag(ObjectBase, GroupableMixin):
|
||||||
ret = super().remove_child(*args, **kwargs)
|
ret = super().remove_child(*args, **kwargs)
|
||||||
if ret is BAIL:
|
if ret is BAIL:
|
||||||
return
|
return
|
||||||
self.photodb._cached_tag_flat_dict = None
|
self.photodb.caches['tag_exports'].clear()
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
@decorators.required_feature('tag.edit')
|
@decorators.required_feature('tag.edit')
|
||||||
|
@ -1409,7 +1408,7 @@ class Tag(ObjectBase, GroupableMixin):
|
||||||
if syn_exists is None:
|
if syn_exists is None:
|
||||||
raise exceptions.NoSuchSynonym(synname)
|
raise exceptions.NoSuchSynonym(synname)
|
||||||
|
|
||||||
self.photodb._cached_tag_flat_dict = None
|
self.photodb.caches['tag_exports'].clear()
|
||||||
self.photodb.sql_delete(table='tag_synonyms', pairs={'name': synname})
|
self.photodb.sql_delete(table='tag_synonyms', pairs={'name': synname})
|
||||||
|
|
||||||
@decorators.required_feature('tag.edit')
|
@decorators.required_feature('tag.edit')
|
||||||
|
@ -1430,7 +1429,7 @@ class Tag(ObjectBase, GroupableMixin):
|
||||||
else:
|
else:
|
||||||
raise exceptions.TagExists(new_name)
|
raise exceptions.TagExists(new_name)
|
||||||
|
|
||||||
self.photodb._cached_tag_flat_dict = None
|
self.photodb.caches['tag_exports'].clear()
|
||||||
|
|
||||||
data = {
|
data = {
|
||||||
'id': self.id,
|
'id': self.id,
|
||||||
|
|
|
@ -224,6 +224,22 @@ class PDBCacheManagerMixin:
|
||||||
thing_cache[thing_id] = thing
|
thing_cache[thing_id] = thing
|
||||||
return thing
|
return thing
|
||||||
|
|
||||||
|
def get_cached_tag_export(self, function, **kwargs):
|
||||||
|
if isinstance(function, str):
|
||||||
|
function = getattr(tag_export, function)
|
||||||
|
kwargs['tags'] = tuple(kwargs['tags'])
|
||||||
|
key = (function.__name__,) + helpers.dict_to_tuple(kwargs)
|
||||||
|
print(key, key in self.caches['tag_exports'])
|
||||||
|
try:
|
||||||
|
exp = self.caches['tag_exports'][key]
|
||||||
|
print('Export was cached')
|
||||||
|
return exp
|
||||||
|
except KeyError:
|
||||||
|
print('Export was not cached')
|
||||||
|
exp = function(**kwargs)
|
||||||
|
self.caches['tag_exports'][key] = exp
|
||||||
|
return exp
|
||||||
|
|
||||||
def get_root_things(self, thing_type):
|
def get_root_things(self, thing_type):
|
||||||
'''
|
'''
|
||||||
For Groupable types, yield things which have no parent.
|
For Groupable types, yield things which have no parent.
|
||||||
|
@ -673,7 +689,7 @@ class PDBPhotoMixin:
|
||||||
tag_expression = None
|
tag_expression = None
|
||||||
else:
|
else:
|
||||||
giveback_tag_expression = str(tag_expression_tree)
|
giveback_tag_expression = str(tag_expression_tree)
|
||||||
frozen_children = self.get_cached_tag_flat_dict()
|
frozen_children = self.get_cached_tag_export('flat_dict', tags=self.get_root_tags())
|
||||||
tag_match_function = searchhelpers.tag_expression_matcher_builder(frozen_children)
|
tag_match_function = searchhelpers.tag_expression_matcher_builder(frozen_children)
|
||||||
else:
|
else:
|
||||||
giveback_tag_expression = None
|
giveback_tag_expression = None
|
||||||
|
@ -1127,7 +1143,7 @@ class PDBTagMixin:
|
||||||
|
|
||||||
author_id = self.get_user_id_or_none(author)
|
author_id = self.get_user_id_or_none(author)
|
||||||
|
|
||||||
self._cached_tag_flat_dict = None
|
self.caches['tag_exports'].clear()
|
||||||
|
|
||||||
data = {
|
data = {
|
||||||
'id': tag_id,
|
'id': tag_id,
|
||||||
|
@ -1641,14 +1657,12 @@ class PhotoDB(
|
||||||
self.load_config()
|
self.load_config()
|
||||||
self.log.setLevel(self.config['log_level'])
|
self.log.setLevel(self.config['log_level'])
|
||||||
|
|
||||||
# OTHER
|
|
||||||
self._cached_tag_flat_dict = None
|
|
||||||
|
|
||||||
self.caches = {
|
self.caches = {
|
||||||
'album': cacheclass.Cache(maxlen=self.config['cache_size']['album']),
|
'album': cacheclass.Cache(maxlen=self.config['cache_size']['album']),
|
||||||
'bookmark': cacheclass.Cache(maxlen=self.config['cache_size']['bookmark']),
|
'bookmark': cacheclass.Cache(maxlen=self.config['cache_size']['bookmark']),
|
||||||
'photo': cacheclass.Cache(maxlen=self.config['cache_size']['photo']),
|
'photo': cacheclass.Cache(maxlen=self.config['cache_size']['photo']),
|
||||||
'tag': cacheclass.Cache(maxlen=self.config['cache_size']['tag']),
|
'tag': cacheclass.Cache(maxlen=self.config['cache_size']['tag']),
|
||||||
|
'tag_exports': cacheclass.Cache(maxlen=100),
|
||||||
'user': cacheclass.Cache(maxlen=self.config['cache_size']['user']),
|
'user': cacheclass.Cache(maxlen=self.config['cache_size']['user']),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1727,12 +1741,6 @@ class PhotoDB(
|
||||||
self.sql_update(table='id_numbers', pairs=pairs, where_key='tab')
|
self.sql_update(table='id_numbers', pairs=pairs, where_key='tab')
|
||||||
return new_id
|
return new_id
|
||||||
|
|
||||||
def get_cached_tag_flat_dict(self):
|
|
||||||
if self._cached_tag_flat_dict is None:
|
|
||||||
self._cached_tag_flat_dict = tag_export.flat_dict(self.get_root_tags())
|
|
||||||
print(len(self._cached_tag_flat_dict))
|
|
||||||
return self._cached_tag_flat_dict
|
|
||||||
|
|
||||||
def load_config(self):
|
def load_config(self):
|
||||||
(config, needs_rewrite) = configlayers.load_file(
|
(config, needs_rewrite) = configlayers.load_file(
|
||||||
filepath=self.config_filepath,
|
filepath=self.config_filepath,
|
||||||
|
|
Loading…
Reference in a new issue