Example #1
0
 def get_prefetch_query_set(self, instances):
     db = self._db or router.db_for_read(self.model, instance=instances[0])
     query = {
         '%s__pk' % self.content_type_field_name: self.content_type.id,
         '%s__in' % self.object_id_field_name:
             set(obj._get_pk_val() for obj in instances)
         }
     qs = super(GenericRelatedObjectManager, self).get_query_set().using(db).filter(**query)
     return (qs,
             attrgetter(self.object_id_field_name),
             lambda obj: obj._get_pk_val(),
             False,
             self.prefetch_cache_name)
Example #2
0
    def has_key(self, key, version=None):
        key = self.make_key(key, version=version)
        self.validate_key(key)

        db = router.db_for_read(self.cache_model_class)
        table = connections[db].ops.quote_name(self._table)
        cursor = connections[db].cursor()

        if settings.USE_TZ:
            now = datetime.utcnow()
        else:
            now = datetime.now()
        now = now.replace(microsecond=0)
        cursor.execute("SELECT cache_key FROM %s "
                       "WHERE cache_key = %%s and expires > %%s" % table,
                       [key, connections[db].ops.value_to_db_datetime(now)])
        return cursor.fetchone() is not None
Example #3
0
    def get(self, key, default=None, version=None):
        key = self.make_key(key, version=version)
        self.validate_key(key)
        db = router.db_for_read(self.cache_model_class)
        table = connections[db].ops.quote_name(self._table)
        cursor = connections[db].cursor()

        cursor.execute("SELECT cache_key, value, expires FROM %s "
                       "WHERE cache_key = %%s" % table, [key])
        row = cursor.fetchone()
        if row is None:
            return default
        now = timezone.now()
        if row[2] < now:
            db = router.db_for_write(self.cache_model_class)
            cursor = connections[db].cursor()
            cursor.execute("DELETE FROM %s "
                           "WHERE cache_key = %%s" % table, [key])
            transaction.commit_unless_managed(using=db)
            return default
        value = connections[db].ops.process_clob(row[1])
        return pickle.loads(base64.b64decode(force_bytes(value)))
Example #4
0
 def get_query_set(self):
     try:
         return self.instance._prefetched_objects_cache[self.prefetch_cache_name]
     except (AttributeError, KeyError):
         db = self._db or router.db_for_read(self.model, instance=self.instance)
         return super(GenericRelatedObjectManager, self).get_query_set().using(db).filter(**self.core_filters)
Example #5
0
 def db(self):
     return self._db or router.db_for_read(self.model)