Example #1
0
 def slice(self, manager, s):
     value_field = manager.model._meta.get_field(self.value)
     rel_name = value_field.rel.related_name
     filters = {}
     for lookup, value in manager.core_filters.items():
         filters['%s__%s' % (rel_name, lookup)] = value
     target = get_query_set(value_field.rel.to)        
     return manager._do_slice(s, target, rel_name, filters)
Example #2
0
def _count(q, queryset=None):
    if queryset:
        queryset = get_query_set(queryset)
        if q:
            queryset = queryset.complex_filter(q)
        return float(queryset.count())
    else:
        return Tag.objects.object_set().filter(TagQ(q, field='object_set__tags'))
Example #3
0
 def __init__(self, template, queryset, **kwargs):        
     self.queryset = get_query_set(queryset)
     self.page_size = kwargs.pop('page_size', DEFAULT_PAGE_SIZE)
     self.page_var = kwargs.pop('page_var', DEFAULT_PAGE_VAR)
     self.searchable = kwargs.pop('searchable', True)
     self.search_var = kwargs.pop('search_var', 'q')
     self.search_fields = kwargs.pop('search_fields', ())
     self.search_lookup = kwargs.pop('search_lookup', 'icontains')
     super(ListView, self).__init__(template, **kwargs)
Example #4
0
 def __and__(self, other):
     if isinstance(other, (QuerySet, Model)):
         other = get_query_set(other)
         qs = self.querysets_by_model.get(other.model, None)
         if not qs:
             return self._clone([])
         return self._clone([qs & other])
     elif isinstance(other, UnionQuerySet):
         models = self.models & other.models
         querysets = [self.querysets_by_model[model] & other.querysets_by_model[model] for model in models]
         return self._clone(querysets)
Example #5
0
 def _add_qs(self, qs):
     if isinstance(qs, ModelBase) and qs._meta.abstract:
         for sub in get_sub_models(qs, direct=True):
             self._add_qs(sub)
     else:
         qs = get_query_set(qs)
         if qs.model in self.querysets_by_model:
             model_qs = self.querysets_by_model[qs.model]
             index = self.querysets.index(model_qs)
             qs = qs | model_qs
             self.querysets[index] = qs
         else:
             self.querysets.append(qs)
         self.querysets_by_model[qs.model] = qs
Example #6
0
def cossim(a, b, queryset=None):
    "cossim(a, b) = arccos(v_a, v_b) = (v_a * v_b)/(|v_a|*|v_b|) for v_x[t] = w(x, t)"
    queryset = get_query_set(queryset)
    p, n_a, n_b = 0, 0, 0
    for t in queryset.complex_filter(a & b).tags():
        if a == t or b == t:
            continue
        v_at = _count(a & t, queryset)
        v_bt = _count(b & t, queryset)
        p += v_at * v_bt
        n_a += v_at ** 2
        n_b += v_bt ** 2
    if p == 0:
        return 0
    return p / (math.sqrt(n_a) * math.sqrt(n_b))
Example #7
0
 def __init__(self, queryset=None, tags=None, **kwargs):
     self.union = isinstance(queryset, UnionQuerySet)
     self.threshold = kwargs.pop('threshold', 0)
     self.annotations = kwargs.pop('annotations', DEFAULT_ANNOTATIONS)
     self.range_adjusted = kwargs.pop('range_adjusted', True)
     if queryset:
         if not self.union:
             queryset = get_query_set(queryset)            
         if tags:
             tags = tags & queryset.tags()
         else:
             tags = queryset.tags()
         self.queryset = queryset
     else:
         self.queryset = UnionQuerySet(Tagged)
         self.union = True
     self.tags = tags.annotate(_count=models.Count('object_set')).order_by('-_count')
     if self.threshold:
         self.tags = self.tags.filter(_count__gte=self.threshold)
Example #8
0
    def coerce(self, model, subquery=False):
        if self.model != ObjectIdentity:
            raise AttributeError("coerce() is only available for abstract models")
        qs = get_query_set(model)
        if subquery:
            return qs.filter(id__in=self.filter(type=Type.objects.get_for_model(model)).values('pk').query)
        clone = self._clone(klass=type(qs)) 
        query = clone.query
        query.clear_select_fields()
        #query.remove_inherited_models()

        obj_alias = query.get_initial_alias()
        obj_table = query.alias_map[obj_alias][0]            
        table = model._meta.db_table
        alias, _ = query.table_alias(table, True)
        identity_col = Object._meta.get_field('id').db_column
        
        remove_join(query, obj_alias)            
        forge_join(query, table, alias, None, None, None, None)            
        forge_join(query, obj_table, obj_alias, table, alias, identity_col, 'id')            
        query.tables.insert(0, query.tables.pop())            
        query.model = model
        
        # replace ObjectIdentity.pk-joins with model.pk-joins
        for rhs_alias, join in query.alias_map.items():
            rhs_table, rhs_alias, join_type, lhs_alias, lhs_col, rhs_col, nullable = join
            if lhs_alias == obj_alias and lhs_col == 'id':
                remove_join(query, rhs_alias)
                forge_join(query, rhs_table, rhs_alias, table, alias, identity_col, rhs_col, join_type=join_type, nullable=nullable)
                query.unref_alias(obj_alias)
         
        # if `obj_alias` is referenced only once, then it's our forged inner join with `table`. it can be removed.
        if query.alias_refcount[obj_alias] == 1:
            remove_join(query, obj_alias, True)
        
        clone.model = model        
        return clone            
Example #9
0
 def from_prefix_notation(cls, f, key='pk', and_op='A', or_op='O', not_op='N', separator='-'):
     kwargs = dict(key=key, and_op=and_op, or_op=or_op, not_op=not_op, separator=separator)
     if isinstance(f, (str, unicode)):
         f = StringIO(f)
     c = f.read(1)
     if c == and_op or c == or_op:
         q0 = cls.from_prefix_notation(f, **kwargs)
         comma = f.read(1)
         if comma != separator:
             raise ValueError("'%s' expected" % separator)
         q1 = cls.from_prefix_notation(f, **kwargs)
         if c == and_op:
             return q0 & q1
         elif c == or_op:
             return q0 | q1
     elif c == not_op:
         return ~cls.from_prefix_notation(f, **kwargs)
     else:
         buf = []
         while c and c in "0123456789":
             buf.append(c)            
             c = f.read(1)
         f.seek(f.tell() - 1)
         return get_query_set(cls.model).get(**{key: "".join(buf)}) 
Example #10
0
 def coerce(self, model):
     qs = self.querysets_by_model.get(model, None)
     if not qs:
         return get_query_set(model).none()
     return qs
Example #11
0
 def __init__(self, queryset, **kwargs):
     self.queryset = get_query_set(queryset)
     super(CloudView, self).__init__(**kwargs)
Example #12
0
 def __init__(self, queryset, pk_var='pk', **kwargs):
     super(TaggedObjectDetailView, self).__init__(**kwargs)
     self.queryset = get_query_set(queryset)
     self.pk_var = pk_var
     self.slug_lookup = 'slug'