Add some docstrings and comments near get_cached_instance.
This commit is contained in:
parent
18c2f0dc78
commit
545ea62818
1 changed files with 25 additions and 0 deletions
|
@ -1485,6 +1485,15 @@ class PhotoDB(
|
||||||
return self._cached_frozen_children
|
return self._cached_frozen_children
|
||||||
|
|
||||||
def get_cached_instance(self, thing_type, db_row):
|
def get_cached_instance(self, thing_type, db_row):
|
||||||
|
'''
|
||||||
|
Check if there is already an instance in the cache and return that.
|
||||||
|
Otherwise, a new instance is created, cached, and returned.
|
||||||
|
|
||||||
|
Note that in order to call this method you have to already have a
|
||||||
|
db_row which means performing some select. If you only have the ID,
|
||||||
|
use get_thing_by_id, as there may already be a cached instance to save
|
||||||
|
you the select.
|
||||||
|
'''
|
||||||
thing_map = _THING_CLASSES[thing_type]
|
thing_map = _THING_CLASSES[thing_type]
|
||||||
|
|
||||||
thing_table = thing_map['table']
|
thing_table = thing_map['table']
|
||||||
|
@ -1528,10 +1537,20 @@ class PhotoDB(
|
||||||
yield thing
|
yield thing
|
||||||
|
|
||||||
def get_thing_by_id(self, thing_type, thing_id):
|
def get_thing_by_id(self, thing_type, thing_id):
|
||||||
|
'''
|
||||||
|
This method will first check the cache to see if there is already an
|
||||||
|
instance with that ID, in which case we don't need to perform any SQL
|
||||||
|
select. If it is not in the cache, then a new instance is created,
|
||||||
|
cached, and returned.
|
||||||
|
'''
|
||||||
thing_map = _THING_CLASSES[thing_type]
|
thing_map = _THING_CLASSES[thing_type]
|
||||||
|
|
||||||
thing_class = thing_map['class']
|
thing_class = thing_map['class']
|
||||||
if isinstance(thing_id, thing_class):
|
if isinstance(thing_id, thing_class):
|
||||||
|
# This could be used to check if your old reference to an object is
|
||||||
|
# still in the cache, or re-select it from the db to make sure it
|
||||||
|
# still exists and re-cache.
|
||||||
|
# Probably an uncommon need but... no harm I think.
|
||||||
thing_id = thing_id.id
|
thing_id = thing_id.id
|
||||||
|
|
||||||
thing_cache = self.caches[thing_type]
|
thing_cache = self.caches[thing_type]
|
||||||
|
@ -1563,6 +1582,12 @@ class PhotoDB(
|
||||||
yield thing
|
yield thing
|
||||||
|
|
||||||
def get_things_by_id(self, thing_type, thing_ids):
|
def get_things_by_id(self, thing_type, thing_ids):
|
||||||
|
'''
|
||||||
|
Given multiple IDs, this method will find which ones are in the cache
|
||||||
|
and which ones need to be selected from the db.
|
||||||
|
This is better than calling get_thing_by_id in a loop because we can
|
||||||
|
use a single SQL select to get batches of up to 999 items.
|
||||||
|
'''
|
||||||
thing_map = _THING_CLASSES[thing_type]
|
thing_map = _THING_CLASSES[thing_type]
|
||||||
thing_class = thing_map['class']
|
thing_class = thing_map['class']
|
||||||
thing_cache = self.caches[thing_type]
|
thing_cache = self.caches[thing_type]
|
||||||
|
|
Loading…
Reference in a new issue