Beispiel #1
0
 def _getQuerySetChildResult(self, querySet):
     '''
     Determine child results...
     TODO: uniqueness detection/removal
     '''
     children = self._getAllChildQuerySets(querySet, results=[])
     model = modellib.type_map[querySet.resource_type]
     resources = EmptyQuerySet(model)
     lookupFn = self._searchMethod(querySet)
     for qs in children:
          # this won't use the tags for the child but will re-run
          # the kids and update transitive tags
          filtered = self._getQuerySetFilteredResult(
              qs
          ).distinct()
          chosen = self._getQuerySetChosenResult(
              qs, lookupFn
          ).distinct()
          resources = resources | filtered | chosen
     resources = resources.distinct()
     # this could be slow if we update on every access, and is complicated by the fact
     # that chosen ONLY works through tags.   So only update transitive tags when
     # the tags are already stale
     #if self._areResourceTagsStale(querySet):
     self._updateTransitiveTags(querySet, resources)
     return resources
Beispiel #2
0
    def filterQuerySet(self, querySet):
        '''Return resources matching specific filter criteria'''
        model = modellib.type_map[querySet.resource_type]

        # make sure we've implemented tags for these objects
        # should be able to remove this code once Edge-p1 is
        # complete

        resources = None
        retval = None
        if not querySet.filter_entries.all():
            resources = EmptyQuerySet(model)
        else:
            resources = model.objects.select_related().all()
        for filt in querySet.filter_entries.select_related().all():
            resources = modellib.filterDjangoQuerySet(
                resources,
                filt.field,
                filt.operator,
                filt.value,
                queryset=querySet)
        retval = resources.distinct()

        self._updateTransitiveTags(querySet, resources)

        return retval
Beispiel #3
0
def tidbits_by_book(request, book):
    book = book.replace('-',' ')
    startverse = Verse.objects.filter(book__iexact=book).order_by('id')[:1]
    if startverse.count() == 0:
        return HttpResponse(book + " is not valid!")
    endverse = Verse.objects.filter(book__iexact=book).order_by('-id')[:1]
    cfs = CrossRef.objects.filter(startverse__gte=startverse, endverse__lte=endverse)

    from django.db.models.query import EmptyQuerySet
    tidbits = EmptyQuerySet()
    for cf in cfs:
        tidbits |= cf.tidbit_set.all()
    tidbits = tidbits.distinct()
    c = {
        'filter_criteria': book,
        'filter_count': tidbits.count(),
        'tidbits': paginate_tidbits(request, tidbits),
        'total_count': Tidbit.objects.all().count()
    }
    return render_to_response("tidbits_home.html", c, context_instance=RequestContext(request))
Beispiel #4
0
def tidbits_by_book(request, book):
    book = book.replace('-', ' ')
    startverse = Verse.objects.filter(book__iexact=book).order_by('id')[:1]
    if startverse.count() == 0:
        return HttpResponse(book + " is not valid!")
    endverse = Verse.objects.filter(book__iexact=book).order_by('-id')[:1]
    cfs = CrossRef.objects.filter(startverse__gte=startverse,
                                  endverse__lte=endverse)

    from django.db.models.query import EmptyQuerySet
    tidbits = EmptyQuerySet()
    for cf in cfs:
        tidbits |= cf.tidbit_set.all()
    tidbits = tidbits.distinct()
    c = {
        'filter_criteria': book,
        'filter_count': tidbits.count(),
        'tidbits': paginate_tidbits(request, tidbits),
        'total_count': Tidbit.objects.all().count()
    }
    return render_to_response("tidbits_home.html",
                              c,
                              context_instance=RequestContext(request))
Beispiel #5
0
def tidbits_by_passage(request, user=None):
    if request.method == 'GET':
        passage_ref = request.GET['passage_ref']
        try:
            startverse, endverse = CrossRef.objects.parse_reference(
                passage_ref)
        except Exception as e:
            # TODO: make this neater
            return HttpResponse(str(e.args[0]))

        # regex = re.compile("(?P<book>([12]?[A-Za-z ]+[A-Za-z]))( ?(?P<start_chapter>[0-9]+)((:(?P<start_verse>[0-9]+))? ?(- ?(?P<end_chp_or_verse>[0-9]+)(:(?P<end_verse>[0-9]+))?)?)?)?$")
        # matches = regex.search(passage_ref)
        # if matches == None:
        #     # TODO: make this neater
        #     return HttpResponse("Invalid passage reference: " + passage_ref)
        # groups = matches.groupdict()
        # book = groups['book']
        # startchp = groups['start_chapter']
        # startvs = groups['start_verse']
        # endchporvs = groups['end_chp_or_verse']
        # endvs = groups['end_verse']
        # cfs = None

        # if not startchp:
        #     startverse = Verse.objects.filter(book__iexact=book).order_by('id')[:1]
        #     if startverse.count() == 0:
        #         return HttpResponse(book + " is not valid!")
        #     endverse = Verse.objects.filter(book__iexact=book).order_by('-id')[:1]
        #     cfs = CrossRef.objects.filter(startverse__gte=startverse, endverse__lte=endverse)
        # elif not startvs:
        #     startverse = Verse.objects.filter(
        #                     book__iexact=book,
        #                     chapter_ref=int(startchp),
        #                     verse_ref=1
        #                 ).order_by('id')[:1]
        #     if startverse.count() == 0:
        #         return HttpResponse(book + " " + int(startchp) + " is not valid!")
        #     endverse = Verse.objects.filter(
        #                     book__iexact=book,
        #                     chapter_ref=int(startchp)
        #                 ).order_by('-id')[:1]
        #     cfs = CrossRef.objects.filter(startverse__gte=startverse, endverse__lte=endverse)
        # elif not endchporvs:
        #     endchp = startchp
        #     endvs = startvs
        # elif not endvs:
        #     endvs = endchporvs
        #     endchp = startchp
        # else:
        #     endchp = endchporvs

        # startverse = Verse.objects.get(book__istartswith=book,
        #                                 chapter_ref=int(startchp),
        #                                 verse_ref=int(startvs))
        # endverse = Verse.objects.get(book__istartswith=book,
        #                                 chapter_ref=int(endchp),
        #                                 verse_ref=int(endvs))
        # if startverse.id > endverse.id:
        #     # TODO: handle this
        #     return HttpResponse("Start verse " + startverse + " must come before end verse " + endverse)

        # get tidbits where a cross ref intersects with a given range (more general)
        cfs = CrossRef.objects.filter(startverse__gte=startverse,
                                      endverse__lte=endverse)
        cfs |= CrossRef.objects.filter(startverse__gte=startverse,
                                       endverse__gte=endverse,
                                       startverse__lte=endverse)
        cfs |= CrossRef.objects.filter(startverse__lte=startverse,
                                       endverse__lte=endverse,
                                       endverse__gte=startverse)

        # get tidbits where a cross ref is completely contained in the given range (more precise)
        cfs = CrossRef.objects.filter(startverse__gte=startverse,
                                      endverse__lte=endverse)

        # get tidbit entries for each cf

        from django.db.models.query import EmptyQuerySet
        tidbits = EmptyQuerySet()
        for cf in cfs:
            tidbits |= cf.tidbit_set.all()
        tidbits = tidbits.distinct()
    else:
        return HttpResponseRedirect(reverse('tidbits:home'))
    c = {
        'filter_criteria': passage_ref,
        'filter_count': tidbits.count(),
        'tidbits': paginate_tidbits(request, tidbits),
        'total_count': Tidbit.objects.all().count()
    }
    return render_to_response("tidbits_home.html",
                              c,
                              context_instance=RequestContext(request))
Beispiel #6
0
def tidbits_by_passage(request, user=None):
    if request.method == 'GET':
        passage_ref = request.GET['passage_ref']
        try:
            startverse, endverse = CrossRef.objects.parse_reference(passage_ref)
        except Exception as e:
            # TODO: make this neater
            return HttpResponse(str(e.args[0]))

        # regex = re.compile("(?P<book>([12]?[A-Za-z ]+[A-Za-z]))( ?(?P<start_chapter>[0-9]+)((:(?P<start_verse>[0-9]+))? ?(- ?(?P<end_chp_or_verse>[0-9]+)(:(?P<end_verse>[0-9]+))?)?)?)?$")
        # matches = regex.search(passage_ref)
        # if matches == None:
        #     # TODO: make this neater
        #     return HttpResponse("Invalid passage reference: " + passage_ref)
        # groups = matches.groupdict()
        # book = groups['book']
        # startchp = groups['start_chapter']
        # startvs = groups['start_verse']
        # endchporvs = groups['end_chp_or_verse']
        # endvs = groups['end_verse']
        # cfs = None
        
        # if not startchp:
        #     startverse = Verse.objects.filter(book__iexact=book).order_by('id')[:1]
        #     if startverse.count() == 0:
        #         return HttpResponse(book + " is not valid!")
        #     endverse = Verse.objects.filter(book__iexact=book).order_by('-id')[:1]
        #     cfs = CrossRef.objects.filter(startverse__gte=startverse, endverse__lte=endverse)
        # elif not startvs:
        #     startverse = Verse.objects.filter(
        #                     book__iexact=book, 
        #                     chapter_ref=int(startchp), 
        #                     verse_ref=1
        #                 ).order_by('id')[:1]
        #     if startverse.count() == 0:
        #         return HttpResponse(book + " " + int(startchp) + " is not valid!")
        #     endverse = Verse.objects.filter(
        #                     book__iexact=book,
        #                     chapter_ref=int(startchp)
        #                 ).order_by('-id')[:1]
        #     cfs = CrossRef.objects.filter(startverse__gte=startverse, endverse__lte=endverse)
        # elif not endchporvs:
        #     endchp = startchp
        #     endvs = startvs
        # elif not endvs:
        #     endvs = endchporvs
        #     endchp = startchp
        # else:
        #     endchp = endchporvs

        # startverse = Verse.objects.get(book__istartswith=book,
        #                                 chapter_ref=int(startchp),
        #                                 verse_ref=int(startvs))
        # endverse = Verse.objects.get(book__istartswith=book,
        #                                 chapter_ref=int(endchp),
        #                                 verse_ref=int(endvs))
        # if startverse.id > endverse.id:
        #     # TODO: handle this
        #     return HttpResponse("Start verse " + startverse + " must come before end verse " + endverse)

        # get tidbits where a cross ref intersects with a given range (more general)
        cfs = CrossRef.objects.filter(
                                startverse__gte=startverse, 
                                endverse__lte=endverse
                            )
        cfs |= CrossRef.objects.filter(
                                startverse__gte=startverse, 
                                endverse__gte=endverse, 
                                startverse__lte=endverse
                            )
        cfs |= CrossRef.objects.filter(
                                startverse__lte=startverse, 
                                endverse__lte=endverse, 
                                endverse__gte=startverse
                            )

        # get tidbits where a cross ref is completely contained in the given range (more precise)
        cfs = CrossRef.objects.filter(
                                startverse__gte=startverse, 
                                endverse__lte=endverse
                            )

        # get tidbit entries for each cf

        from django.db.models.query import EmptyQuerySet
        tidbits = EmptyQuerySet()
        for cf in cfs:
            tidbits |= cf.tidbit_set.all()
        tidbits = tidbits.distinct()
    else:
        return HttpResponseRedirect(reverse('tidbits:home'))
    c = {
        'filter_criteria': passage_ref,
        'filter_count': tidbits.count(),
        'tidbits': paginate_tidbits(request, tidbits),
        'total_count': Tidbit.objects.all().count()
    }
    return render_to_response("tidbits_home.html", c, context_instance=RequestContext(request))