~dylanmccall/harvest/gsoc-client-stuff

« back to all changes in this revision

Viewing changes to harvest/opportunities/views.py

  • Committer: Dylan McCall
  • Date: 2010-07-03 05:45:47 UTC
  • Revision ID: dylanmccall@gmail.com-20100703054547-xqda76wqduvtvicw
First (annoyingly massive) drop of new front-end design.

Now using jquery instead of yui.

Scrapped ALL existing templates except those related to either filtering or directly viewing packages.
New view at url /opportunities/query/results, which provides just the content of the results pane for a query; no other parts of the page are generated.

Added a basic function in utils.py and context_processors.py to get the short name of the current version of Harvest, if there is one.
Added versionname “alpha” to the version information file. While debugging, revision number is shown instead.

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
from filters import HarvestFilters
17
17
from wrappers import PackageWrapper, PackageListWrapper
18
18
 
19
 
def opportunity_index(request):
20
 
    sources_list = models.SourcePackage.objects.all()
21
 
    paginator = Paginator(sources_list, 50)
22
 
    # Make sure page request is an int. If not, deliver first page.
23
 
    try:
24
 
        page = int(request.GET.get('page', '1'))
25
 
    except ValueError:
26
 
        page = 1
27
 
    # If page request (9999) is out of range, deliver last page of results.
28
 
    try:
29
 
        sources = paginator.page(page)
30
 
    except (EmptyPage, InvalidPage):
31
 
        sources = paginator.page(paginator.num_pages)
32
 
    context = {
33
 
        'pageSection': 'opportunities',
34
 
        'sources': sources,
35
 
    }
36
 
    return render('opportunities/opportunity_index.html', context,
37
 
              context_instance=RequestContext(request))
38
 
 
39
 
def opportunity_list(request):
40
 
    return list_detail.object_list(
41
 
        request,
42
 
        queryset = models.Opportunity.objects.all(),
43
 
        paginate_by = 500,
44
 
        template_object_name = 'opportunity',
45
 
    )
46
 
 
47
19
def opportunity_detail(request, opportunity_id):
48
20
    return list_detail.object_detail(
49
21
        request,
89
61
                    }, RequestContext(request))
90
62
 
91
63
 
92
 
def opportunitylist_list(request):
93
 
    return list_detail.object_list(
94
 
        request,
95
 
        queryset = models.OpportunityList.objects.annotate(Count('opportunity')),
96
 
        paginate_by = 50,
97
 
    )
98
 
 
99
 
def opportunitylist_detail(request, opportunitylist_slug):
100
 
    opportunitylist = get_object_or_404(models.OpportunityList, name=opportunitylist_slug)
101
 
    return list_detail.object_list(
102
 
        request,
103
 
        queryset = models.Opportunity.objects.filter(opportunitylist__name=opportunitylist_slug),
104
 
        paginate_by = 500,
105
 
        template_name = 'opportunities/opportunitylist_detail.html',
106
 
        extra_context = {'opportunitylist': opportunitylist},
107
 
    )
108
 
 
109
 
def sourcepackage_list(request):
110
 
    return list_detail.object_list(
111
 
        request,
112
 
        queryset = models.SourcePackage.objects.annotate(Count('opportunity')),
113
 
        paginate_by = 500,
114
 
    )
115
 
 
116
 
def sourcepackage_detail(request, sourcepackage_slug):
117
 
    opportunities = models.Opportunity.objects.filter(sourcepackage__name=sourcepackage_slug)
118
 
    return list_detail.object_detail(
119
 
        request,
120
 
        queryset = models.SourcePackage.objects.all(),
121
 
        slug = sourcepackage_slug,
122
 
        slug_field = 'name',
123
 
        extra_context = {'opportunities': opportunities},
124
 
    )
125
 
 
126
 
def opportunities_filter(request):
127
 
    filters = HarvestFilters()
128
 
    filters.update_from_http(request)
129
 
    filters_pkg = filters.find('pkg')
130
 
    filters_opp = filters.find('opp')
131
 
    
132
 
    packages_list = models.SourcePackage.objects.distinct()
133
 
    packages_list = filters_pkg.process_queryset(packages_list)
 
64
def _create_packages_list(request, filters_pkg, filters_opp):
 
65
    sourcepackages_list = models.SourcePackage.objects.distinct()
 
66
    sourcepackages_list = filters_pkg.process_queryset(sourcepackages_list)
134
67
    
135
68
    #opportunities_list is filtered right away to only check opportunities belonging to selected packages
136
 
    opportunities_list = models.Opportunity.objects.distinct().filter(sourcepackage__in=packages_list)
 
69
    opportunities_list = models.Opportunity.objects.distinct().filter(sourcepackage__in=sourcepackages_list)
137
70
    opportunities_list = filters_opp.process_queryset(opportunities_list)
 
71
    
138
72
    #TODO: need to filter out opportunities with valid=False again
139
73
    #TODO: would it be more efficient to group opportunities by their sourcepackages first, then run filters_opp.process_queryset() for each of those groups?
140
74
    
141
 
    pkg_list_wrapper = PackageListWrapper(request, packages_list, opportunities_list) 
 
75
    pkg_list_wrapper = PackageListWrapper(request, sourcepackages_list, opportunities_list)
 
76
    
 
77
    return pkg_list_wrapper
 
78
 
 
79
 
 
80
def opportunities_filter(request):
 
81
    filters = HarvestFilters()
 
82
    filters.update_from_http(request)
 
83
    filters_pkg = filters.find('pkg')
 
84
    filters_opp = filters.find('opp')
 
85
    
 
86
    pkg_list_wrapper = _create_packages_list(request, filters_pkg, filters_opp) 
142
87
    
143
88
    context = {
144
89
        'grouping': 'package',
152
97
        context,
153
98
        context_instance=RequestContext(request))
154
99
 
 
100
 
155
101
#TODO: package_filter_detail(request, sourcepackage, opportunities_list)
156
102
 
157
 
def opportunities_by_type(request):
158
 
    types_list = models.OpportunityList.objects.all()
159
 
    paginator = Paginator(types_list, 50)
160
 
 
161
 
    # Make sure page request is an int. If not, deliver first page.
162
 
    try:
163
 
        page = int(request.GET.get('page', '1'))
164
 
    except ValueError:
165
 
        page = 1
166
 
 
167
 
    # If page request (9999) is out of range, deliver last page of results.
168
 
    try:
169
 
        types = paginator.page(page)
170
 
    except (EmptyPage, InvalidPage):
171
 
        types = paginator.page(paginator.num_pages)
172
 
 
173
 
    context = {
174
 
        'pageSection': 'opportunities',
175
 
        'types': types,
176
 
        'grouping': 'type',
177
 
    }
178
 
 
179
 
    return render(
180
 
        'opportunities/opportunities_by_type.html',
181
 
        context,
182
 
        context_instance=RequestContext(request))
183
 
 
184
 
def opportunities_by_package(request, packageset_slug=None):
185
 
    # XXX: rockstar: Eep! We shouldn't be storing the None as a string.  We
186
 
    # should re-think this model relationship.
187
 
    sources_list = models.SourcePackage.objects.exclude(name='None')
188
 
    if packageset_slug:
189
 
        packageset = get_object_or_404(models.PackageSet, name=packageset_slug)
190
 
        sources_list = sources_list.filter(packagesets=packageset)
191
 
    paginator = Paginator(sources_list, 50)
192
 
 
193
 
    # Make sure page request is an int. If not, deliver first page.
194
 
    try:
195
 
        page = int(request.GET.get('page', '1'))
196
 
    except ValueError:
197
 
        page = 1
198
 
 
199
 
    # If page request (9999) is out of range, deliver last page of results.
200
 
    try:
201
 
        sources = paginator.page(page)
202
 
    except (EmptyPage, InvalidPage):
203
 
        sources = paginator.page(paginator.num_pages)
204
 
 
205
 
    context = {
206
 
        'pageSection': 'opportunities',
207
 
        'sources': sources,
 
103
 
 
104
def opportunities_results(request):
 
105
    filters = HarvestFilters()
 
106
    filters.update_from_http(request)
 
107
    
 
108
    packages_list = _create_packages_list(request, filters.find('pkg'), filters.find('opp')) 
 
109
    
 
110
    context = {
208
111
        'grouping': 'package',
 
112
        'packages_list': packages_list
209
113
    }
210
114
 
211
115
    return render(
212
 
        'opportunities/opportunities_by_package.html',
 
116
        'opportunities/results.html',
213
117
        context,
214
118
        context_instance=RequestContext(request))
215
119
 
216
 
def packageset_list(request):
217
 
    packagesets = models.PackageSet.objects.all()
218
 
    context = {
219
 
        'packagesets': packagesets
220
 
    }
221
 
    return render('opportunities/packageset_list.html',
222
 
                  context,
223
 
                  context_instance=RequestContext(request))