Skip to content
Snippets Groups Projects

Superevents

Merged Tanner Prestegard requested to merge superevent into master
2 files
+ 22
10
Compare changes
  • Side-by-side
  • Inline
Files
2
  • 8a5c7e4a
    Optimization for searches · 8a5c7e4a
    Tanner Prestegard authored
    Adding some optimization in search forms by using select_related
    and prefetch_related.  Some of this is on the Superevent model
    within the get_internal_events and get_external_events methods.
+ 13
3
@@ -17,6 +17,7 @@ logger = logging.getLogger(__name__)
htmlEntityStar = "★"
errorMarker = '<span style="color:red;">'+htmlEntityStar+'</span>'
class MainSearchForm(forms.Form):
QUERY_TYPE_CHOICES = (
('E', 'Event'),
@@ -31,7 +32,7 @@ class MainSearchForm(forms.Form):
query = forms.CharField(required=False, widget=forms.TextInput(
attrs={'size': 60}))
query_type = forms.ChoiceField(required=True,
choices=QUERY_TYPE_CHOICES, label="Search for", initial='S')
choices=QUERY_TYPE_CHOICES, label="Search for", initial='E')
get_neighbors = forms.BooleanField(required=False,
help_text="(Events only)")
results_format = forms.ChoiceField(required=False, initial='S',
@@ -47,19 +48,28 @@ class MainSearchForm(forms.Form):
query_string = self.cleaned_data.get('query')
query_type = self.cleaned_data.get('query_type')
# Set attributes based on object type
# Add fields to use with select_related and prefetch_related
# for optimization
if query_type == 'S':
model = Superevent
parse_func = parseSupereventQuery
s_rel = ['preferred_event__group', 'submitter']
p_rel = ['labelling_set__label', 'labelling_set__creator']
elif query_type == 'E':
model = Event
parse_func = parseQuery
s_rel = ['group', 'pipeline', 'search', 'submitter']
p_rel = ['labelling_set__label', 'labelling_set__creator']
# Don't need to check anything else here, can expect data to be good
# thanks to base class clean
# Parse query and get resulting objects
try:
qs = model.objects.filter(parse_func(query_string))
qs = filter_for_labels(qs,query_string).distinct()
qs = model.objects.filter(parse_func(query_string)) \
.select_related(*s_rel).prefetch_related(*p_rel)
qs = filter_for_labels(qs, query_string).distinct()
cleaned_data['query'] = qs
return cleaned_data
except ParseException as e:
Loading