Exemple #1
0
 def make_specialized_facet_value_obj(self, solr_facet_key,
                                      solr_facet_value_key,
                                      solr_facet_count):
     """ makes a facet_value obj for specialzied solr faccets """
     fl = FilterLinks()
     fl.base_search_link = self.base_search_link
     fl.base_request_json = self.request_dict_json
     fl.base_r_full_path = self.request_full_path
     fl.spatial_context = self.spatial_context
     new_rparams = fl.add_to_request_by_solr_field(solr_facet_key,
                                                   solr_facet_value_key)
     output = LastUpdatedOrderedDict()
     output['id'] = fl.make_request_url(new_rparams)
     output['json'] = fl.make_request_url(new_rparams, '.json')
     output['label'] = False
     if solr_facet_key == 'item_type':
         if solr_facet_value_key in QueryMaker.TYPE_URIS:
             output['rdfs:isDefinedBy'] = QueryMaker.TYPE_URIS[
                 solr_facet_value_key]
             entity = self.get_entity(output['rdfs:isDefinedBy'])
             if entity is not False:
                 output['label'] = entity.label
     output['count'] = solr_facet_count
     output['slug'] = solr_facet_value_key
     output['data-type'] = 'id'
     return output
 def make_specialized_facet_value_obj(self,
                                      solr_facet_key,
                                      solr_facet_value_key,
                                      solr_facet_count):
     """ makes a facet_value obj for specialzied solr faccets """
     fl = FilterLinks()
     fl.base_search_link = self.base_search_link
     fl.base_request_json = self.request_dict_json
     fl.base_r_full_path = self.request_full_path
     fl.spatial_context = self.spatial_context
     new_rparams = fl.add_to_request_by_solr_field(solr_facet_key,
                                                   solr_facet_value_key)
     output = LastUpdatedOrderedDict()
     output['id'] = fl.make_request_url(new_rparams)
     output['json'] = fl.make_request_url(new_rparams, '.json')
     output['label'] = False
     if solr_facet_key == 'item_type':
         if solr_facet_value_key in QueryMaker.TYPE_URIS:
             output['rdfs:isDefinedBy'] = QueryMaker.TYPE_URIS[solr_facet_value_key]
             entity = self.get_entity(output['rdfs:isDefinedBy'])
             if entity is not False:
                 output['label'] = entity.label
     output['count'] = solr_facet_count
     output['slug'] = solr_facet_value_key
     output['data-type'] = 'id'
     return output
 def make_rel_media_option(self,
                           rel_media_count,
                           rel_media_type,
                           rel_media_options):
     """ makes a facet option for related media """
     if rel_media_count > 0:
         fl = FilterLinks()
         fl.base_search_link = self.base_search_link
         fl.base_request_json = self.request_dict_json
         fl.base_r_full_path = self.request_full_path
         fl.spatial_context = self.spatial_context
         option = LastUpdatedOrderedDict()
         new_rparams = fl.add_to_request_by_solr_field(rel_media_type,
                                                       '1')
         option['id'] = fl.make_request_url(new_rparams)
         option['json'] = fl.make_request_url(new_rparams, '.json')
         if rel_media_type == 'images':
             option['label'] = 'Linked with images'
         elif rel_media_type == 'other-media':
             option['label'] = 'Linked with media (non-image)'
         elif rel_media_type == 'documents':
             option['label'] = 'Linked with documents'
         option['count'] = rel_media_count
         rel_media_options.append(option)
     return rel_media_options
Exemple #4
0
 def add_date_fields(self, solr_json):
     """ adds numeric fields with query options """
     date_fields = []
     date_facet_ranges = self.get_solr_ranges(solr_json, 'date')
     if date_facet_ranges is not False:
         for solr_field_key, ranges in date_facet_ranges.items():
             facet_key_list = solr_field_key.split('___')
             slug = facet_key_list[0].replace('_', '-')
             # check to see if the field is a linkded data field
             # if so, it needs some help with making Filter Links
             linked_field = False
             field_entity = self.get_entity(slug)
             if field_entity is not False:
                 self.add_active_facet_field(slug)
                 if field_entity.item_type == 'uri':
                     linked_field = True
             field = self.get_facet_meta(solr_field_key)
             field['oc-api:min-date'] = ranges['start']
             field['oc-api:max-date'] = ranges['end']
             field['oc-api:gap-date'] = ranges['gap']
             field['oc-api:has-range-options'] = []
             i = -1
             qm = QueryMaker()
             for range_min_key in ranges['counts'][::2]:
                 i += 2
                 solr_count = ranges['counts'][i]
                 fl = FilterLinks()
                 fl.base_search_link = self.base_search_link
                 fl.base_request_json = self.request_dict_json
                 fl.base_r_full_path = self.request_full_path
                 fl.spatial_context = self.spatial_context
                 fl.partial_param_val_match = True
                 dt_end = qm.add_solr_gap_to_date(range_min_key,
                                                  ranges['gap'])
                 range_end = qm.convert_date_to_solr_date(dt_end)
                 solr_range = '[' + range_min_key + ' TO ' + range_end + ' ]'
                 new_rparams = fl.add_to_request('prop', solr_range, slug)
                 range_dict = LastUpdatedOrderedDict()
                 range_dict['id'] = fl.make_request_url(new_rparams)
                 range_dict['json'] = fl.make_request_url(
                     new_rparams, '.json')
                 range_dict['label'] = qm.make_human_readable_date(
                     range_min_key) + ' to ' + qm.make_human_readable_date(
                         range_end)
                 range_dict['count'] = solr_count
                 range_dict['oc-api:min-date'] = range_min_key
                 range_dict['oc-api:max-date'] = range_end
                 field['oc-api:has-range-options'].append(range_dict)
             date_fields.append(field)
     if len(date_fields) > 0 and 'facet' in self.act_responses:
         self.json_ld['oc-api:has-date-facets'] = date_fields
Exemple #5
0
 def add_numeric_fields(self, solr_json):
     """ adds numeric fields with query options """
     num_fields = []
     num_facet_ranges = self.get_solr_ranges(solr_json, 'numeric')
     if num_facet_ranges is not False:
         for solr_field_key, ranges in num_facet_ranges.items():
             facet_key_list = solr_field_key.split('___')
             slug = facet_key_list[0].replace('_', '-')
             # check to see if the field is a linkded data field
             # if so, it needs some help with making Filter Links
             linked_field = False
             field_entity = self.get_entity(slug)
             if field_entity is not False:
                 self.add_active_facet_field(slug)
                 if field_entity.item_type == 'uri':
                     linked_field = True
             field = self.get_facet_meta(solr_field_key)
             field['oc-api:min'] = float(ranges['start'])
             field['oc-api:max'] = float(ranges['end'])
             gap = float(ranges['gap'])
             field['oc-api:gap'] = gap
             field['oc-api:has-range-options'] = []
             i = -1
             for range_min_key in ranges['counts'][::2]:
                 i += 2
                 solr_count = ranges['counts'][i]
                 fl = FilterLinks()
                 fl.base_search_link = self.base_search_link
                 fl.base_request_json = self.request_dict_json
                 fl.base_r_full_path = self.request_full_path
                 fl.spatial_context = self.spatial_context
                 fl.partial_param_val_match = True
                 range_start = float(range_min_key)
                 range_end = range_start + gap
                 solr_range = '[' + str(range_start) + ' TO ' + str(
                     range_end) + ' ]'
                 new_rparams = fl.add_to_request('prop', solr_range, slug)
                 range_dict = LastUpdatedOrderedDict()
                 range_dict['id'] = fl.make_request_url(new_rparams)
                 range_dict['json'] = fl.make_request_url(
                     new_rparams, '.json')
                 range_dict['label'] = str(round(range_start, 3))
                 range_dict['count'] = solr_count
                 range_dict['oc-api:min'] = range_start
                 range_dict['oc-api:max'] = range_end
                 field['oc-api:has-range-options'].append(range_dict)
             num_fields.append(field)
     if len(num_fields) > 0 and 'facet' in self.act_responses:
         self.json_ld['oc-api:has-numeric-facets'] = num_fields
 def add_date_fields(self, solr_json):
     """ adds numeric fields with query options """
     date_fields = []
     date_facet_ranges = self.get_solr_ranges(solr_json, 'date')
     if date_facet_ranges is not False:
         for solr_field_key, ranges in date_facet_ranges.items():
             facet_key_list = solr_field_key.split('___')
             slug = facet_key_list[0].replace('_', '-')
             # check to see if the field is a linkded data field
             # if so, it needs some help with making Filter Links
             linked_field = False
             field_entity = self.get_entity(slug)
             if field_entity is not False:
                 self.add_active_facet_field(slug)
                 if field_entity.item_type == 'uri':
                     linked_field = True
             field = self.get_facet_meta(solr_field_key)
             field['oc-api:min-date'] = ranges['start']
             field['oc-api:max-date'] = ranges['end']
             field['oc-api:gap-date'] = ranges['gap']
             field['oc-api:has-range-options'] = []
             i = -1
             qm = QueryMaker()
             for range_min_key in ranges['counts'][::2]:
                 i += 2
                 solr_count = ranges['counts'][i]
                 fl = FilterLinks()
                 fl.base_search_link = self.base_search_link
                 fl.base_request_json = self.request_dict_json
                 fl.base_r_full_path = self.request_full_path
                 fl.spatial_context = self.spatial_context
                 fl.partial_param_val_match = True
                 dt_end = qm.add_solr_gap_to_date(range_min_key, ranges['gap'])
                 range_end = qm.convert_date_to_solr_date(dt_end)
                 solr_range = '[' + range_min_key + ' TO ' + range_end + ' ]'
                 new_rparams = fl.add_to_request('prop',
                                                 solr_range,
                                                 slug)
                 range_dict = LastUpdatedOrderedDict()
                 range_dict['id'] = fl.make_request_url(new_rparams)
                 range_dict['json'] = fl.make_request_url(new_rparams, '.json')
                 range_dict['label'] = qm.make_human_readable_date(range_min_key) + ' to ' + qm.make_human_readable_date(range_end)
                 range_dict['count'] = solr_count
                 range_dict['oc-api:min-date'] = range_min_key
                 range_dict['oc-api:max-date'] = range_end
                 field['oc-api:has-range-options'].append(range_dict)
             date_fields.append(field)
     if len(date_fields) > 0 and 'facet' in self.act_responses:
         self.json_ld['oc-api:has-date-facets'] = date_fields
 def add_numeric_fields(self, solr_json):
     """ adds numeric fields with query options """
     num_fields = []
     num_facet_ranges = self.get_solr_ranges(solr_json, 'numeric')
     if num_facet_ranges is not False:
         for solr_field_key, ranges in num_facet_ranges.items():
             facet_key_list = solr_field_key.split('___')
             slug = facet_key_list[0].replace('_', '-')
             # check to see if the field is a linkded data field
             # if so, it needs some help with making Filter Links
             linked_field = False
             field_entity = self.get_entity(slug)
             if field_entity is not False:
                 self.add_active_facet_field(slug)
                 if field_entity.item_type == 'uri':
                     linked_field = True
             field = self.get_facet_meta(solr_field_key)
             field['oc-api:min'] = float(ranges['start'])
             field['oc-api:max'] = float(ranges['end'])
             gap = float(ranges['gap'])
             field['oc-api:gap'] = gap
             field['oc-api:has-range-options'] = []
             i = -1
             for range_min_key in ranges['counts'][::2]:
                 i += 2
                 solr_count = ranges['counts'][i]
                 fl = FilterLinks()
                 fl.base_search_link = self.base_search_link
                 fl.base_request_json = self.request_dict_json
                 fl.base_r_full_path = self.request_full_path
                 fl.spatial_context = self.spatial_context
                 fl.partial_param_val_match = True
                 range_start = float(range_min_key)
                 range_end = range_start + gap
                 solr_range = '[' + str(range_start) + ' TO ' + str(range_end) + ' ]'
                 new_rparams = fl.add_to_request('prop',
                                                 solr_range,
                                                 slug)
                 range_dict = LastUpdatedOrderedDict()
                 range_dict['id'] = fl.make_request_url(new_rparams)
                 range_dict['json'] = fl.make_request_url(new_rparams, '.json')
                 range_dict['label'] = str(round(range_start,3))
                 range_dict['count'] = solr_count
                 range_dict['oc-api:min'] = range_start
                 range_dict['oc-api:max'] = range_end
                 field['oc-api:has-range-options'].append(range_dict)
             num_fields.append(field)
     if len(num_fields) > 0 and 'facet' in self.act_responses:
         self.json_ld['oc-api:has-numeric-facets'] = num_fields
 def make_facet_value_obj(self,
                          solr_facet_key,
                          solr_facet_value_key,
                          solr_facet_count):
     """ Makes an last-ordered-dict for a facet """
     facet_key_list = solr_facet_value_key.split('___')
     if len(facet_key_list) == 4:
         # ----------------------------
         # Case where facet values are encoded as:
         # slug___data-type___/uri-item-type/uuid___label
         # ----------------------------
         data_type = facet_key_list[1]
         if 'http://' in facet_key_list[2] or 'https://' in facet_key_list[2]:
             is_linked_data = True
         else:
             is_linked_data = False
         fl = FilterLinks()
         fl.base_search_link = self.base_search_link
         fl.base_request_json = self.request_dict_json
         fl.base_r_full_path = self.request_full_path
         fl.spatial_context = self.spatial_context
         fl.partial_param_val_match = is_linked_data  # allow partial matches of parameters.
         output = LastUpdatedOrderedDict()
         slug = facet_key_list[0]
         new_rparams = fl.add_to_request_by_solr_field(solr_facet_key,
                                                       slug)
         output['id'] = fl.make_request_url(new_rparams)
         output['json'] = fl.make_request_url(new_rparams, '.json')
         if is_linked_data:
             output['rdfs:isDefinedBy'] = facet_key_list[2]
         else:
             output['rdfs:isDefinedBy'] = settings.CANONICAL_HOST + facet_key_list[2]
         output['label'] = facet_key_list[3]
         output['count'] = solr_facet_count
         output['slug'] = slug
         output['data-type'] = data_type
     else:
         # ----------------------------
         # Sepcilized cases of non-encoded facet values
         # ----------------------------
         output = self.make_specialized_facet_value_obj(solr_facet_key,
                                                        solr_facet_value_key,
                                                        solr_facet_count)
     return output
Exemple #9
0
 def make_facet_value_obj(self, solr_facet_key, solr_facet_value_key,
                          solr_facet_count):
     """ Makes an last-ordered-dict for a facet """
     facet_key_list = solr_facet_value_key.split('___')
     if len(facet_key_list) == 4:
         # ----------------------------
         # Case where facet values are encoded as:
         # slug___data-type___/uri-item-type/uuid___label
         # ----------------------------
         data_type = facet_key_list[1]
         if 'http://' in facet_key_list[2] or 'https://' in facet_key_list[
                 2]:
             is_linked_data = True
         else:
             is_linked_data = False
         fl = FilterLinks()
         fl.base_search_link = self.base_search_link
         fl.base_request_json = self.request_dict_json
         fl.base_r_full_path = self.request_full_path
         fl.spatial_context = self.spatial_context
         fl.partial_param_val_match = is_linked_data  # allow partial matches of parameters.
         output = LastUpdatedOrderedDict()
         slug = facet_key_list[0]
         new_rparams = fl.add_to_request_by_solr_field(solr_facet_key, slug)
         output['id'] = fl.make_request_url(new_rparams)
         output['json'] = fl.make_request_url(new_rparams, '.json')
         if is_linked_data:
             output['rdfs:isDefinedBy'] = facet_key_list[2]
         else:
             output[
                 'rdfs:isDefinedBy'] = settings.CANONICAL_HOST + facet_key_list[
                     2]
         output['label'] = facet_key_list[3]
         output['count'] = solr_facet_count
         output['slug'] = slug
         output['data-type'] = data_type
     else:
         # ----------------------------
         # Sepcilized cases of non-encoded facet values
         # ----------------------------
         output = self.make_specialized_facet_value_obj(
             solr_facet_key, solr_facet_value_key, solr_facet_count)
     return output
Exemple #10
0
 def make_rel_media_option(self, rel_media_count, rel_media_type,
                           rel_media_options):
     """ makes a facet option for related media """
     if rel_media_count > 0:
         fl = FilterLinks()
         fl.base_search_link = self.base_search_link
         fl.base_request_json = self.request_dict_json
         fl.base_r_full_path = self.request_full_path
         fl.spatial_context = self.spatial_context
         option = LastUpdatedOrderedDict()
         new_rparams = fl.add_to_request_by_solr_field(rel_media_type, '1')
         option['id'] = fl.make_request_url(new_rparams)
         option['json'] = fl.make_request_url(new_rparams, '.json')
         if rel_media_type == 'images':
             option['label'] = 'Linked with images'
         elif rel_media_type == 'other-media':
             option['label'] = 'Linked with media (non-image)'
         elif rel_media_type == 'documents':
             option['label'] = 'Linked with documents'
         option['count'] = rel_media_count
         rel_media_options.append(option)
     return rel_media_options
Exemple #11
0
 def add_text_fields(self):
     """ adds text fields with query options """
     text_fields = []
     # first add a general key-word search option
     fl = FilterLinks()
     fl.base_search_link = self.base_search_link
     fl.base_request_json = self.request_dict_json
     fl.base_r_full_path = self.request_full_path
     fl.spatial_context = self.spatial_context
     q_request_dict = self.request_dict
     if 'q' not in q_request_dict:
         q_request_dict['q'] = []
     param_vals = q_request_dict['q']
     if len(param_vals) < 1:
         search_term = None
     else:
         search_term = param_vals[0]
     field = LastUpdatedOrderedDict()
     field['id'] = '#textfield-keyword-search'
     field['label'] = 'General Keyword Search'
     field['oc-api:search-term'] = search_term
     if search_term is False or search_term is None:
         new_rparams = fl.add_to_request_by_solr_field('q', '{SearchTerm}')
         field['oc-api:template'] = fl.make_request_url(new_rparams)
         field['oc-api:template-json'] = fl.make_request_url(
             new_rparams, '.json')
     else:
         param_search = param_vals[0].replace(search_term, '{SearchTerm}')
         rem_request = fl.make_request_sub(q_request_dict, 'q', search_term,
                                           '{SearchTerm}')
         field['oc-api:template'] = fl.make_request_url(rem_request)
         field['oc-api:template-json'] = fl.make_request_url(
             rem_request, '.json')
     text_fields.append(field)
     # now add an option looking in properties
     if 'prop' in self.request_dict:
         param_vals = self.request_dict['prop']
         for param_val in param_vals:
             if self.hierarchy_delim in param_val:
                 all_vals = param_val.split(self.hierarchy_delim)
             else:
                 all_vals = [param_val]
             if len(all_vals) < 2:
                 check_field = all_vals[0]
                 search_term = None  # no search term
             else:
                 check_field = all_vals[
                     -2]  # penultimate value is the field
                 search_term = all_vals[-1]  # last value is search term
             check_dict = self.make_filter_label_dict(check_field)
             if check_dict['data-type'] == 'string':
                 fl = FilterLinks()
                 fl.base_search_link = self.base_search_link
                 fl.base_request_json = self.request_dict_json
                 fl.base_r_full_path = self.request_full_path
                 fl.spatial_context = self.spatial_context
                 field = LastUpdatedOrderedDict()
                 field['id'] = '#textfield-' + check_dict['slug']
                 field['label'] = check_dict['label']
                 field['oc-api:search-term'] = search_term
                 if len(check_dict['entities']) == 1:
                     field['rdfs:isDefinedBy'] = check_dict['entities'][
                         0].uri
                 if search_term is False or search_term is None:
                     param_search = param_val + self.hierarchy_delim + '{SearchTerm}'
                     new_rparams = fl.add_to_request_by_solr_field(
                         'prop', param_search)
                     field['oc-api:template'] = fl.make_request_url(
                         new_rparams)
                     field['oc-api:template-json'] = fl.make_request_url(
                         new_rparams, '.json')
                 else:
                     param_search = param_val.replace(
                         search_term, '{SearchTerm}')
                     rem_request = fl.make_request_sub(
                         self.request_dict, 'prop', param_val, param_search)
                     field['oc-api:template'] = fl.make_request_url(
                         rem_request)
                     field['oc-api:template-json'] = fl.make_request_url(
                         rem_request, '.json')
                 text_fields.append(field)
     if len(text_fields) > 0:
         self.json_ld['oc-api:has-text-search'] = text_fields
 def add_text_fields(self):
     """ adds text fields with query options """
     text_fields = []
     # first add a general key-word search option
     fl = FilterLinks()
     fl.base_search_link = self.base_search_link
     fl.base_request_json = self.request_dict_json
     fl.base_r_full_path = self.request_full_path
     fl.spatial_context = self.spatial_context
     q_request_dict = self.request_dict
     if 'q' not in q_request_dict:
         q_request_dict['q'] = []
     param_vals = q_request_dict['q']
     if len(param_vals) < 1:
         search_term = None
     else:
         search_term = param_vals[0]
     field = LastUpdatedOrderedDict()
     field['id'] = '#textfield-keyword-search'
     field['label'] = 'General Keyword Search'
     field['oc-api:search-term'] = search_term
     if search_term is False or search_term is None:
         new_rparams = fl.add_to_request_by_solr_field('q',
                                                       '{SearchTerm}')
         field['oc-api:template'] = fl.make_request_url(new_rparams)
         field['oc-api:template-json'] = fl.make_request_url(new_rparams, '.json')
     else:
         param_search = param_vals[0].replace(search_term, '{SearchTerm}')
         rem_request = fl.make_request_sub(q_request_dict,
                                           'q',
                                           search_term,
                                           '{SearchTerm}')
         field['oc-api:template'] = fl.make_request_url(rem_request)
         field['oc-api:template-json'] = fl.make_request_url(rem_request, '.json')
     text_fields.append(field)
     # now add an option looking in properties
     if 'prop' in self.request_dict:
         param_vals = self.request_dict['prop']
         for param_val in param_vals:
             if self.hierarchy_delim in param_val:
                 all_vals = param_val.split(self.hierarchy_delim)
             else:
                 all_vals = [param_val]
             if len(all_vals) < 2:
                 check_field = all_vals[0]
                 search_term = None  # no search term
             else:
                 check_field = all_vals[-2]  # penultimate value is the field
                 search_term = all_vals[-1]  # last value is search term
             check_dict = self.make_filter_label_dict(check_field)
             if check_dict['data-type'] == 'string':
                 fl = FilterLinks()
                 fl.base_search_link = self.base_search_link
                 fl.base_request_json = self.request_dict_json
                 fl.base_r_full_path = self.request_full_path
                 fl.spatial_context = self.spatial_context
                 field = LastUpdatedOrderedDict()
                 field['id'] = '#textfield-' + check_dict['slug']
                 field['label'] = check_dict['label']
                 field['oc-api:search-term'] = search_term
                 if len(check_dict['entities']) == 1:
                     field['rdfs:isDefinedBy'] = check_dict['entities'][0].uri
                 if search_term is False or search_term is None:
                     param_search = param_val + self.hierarchy_delim + '{SearchTerm}'
                     new_rparams = fl.add_to_request_by_solr_field('prop',
                                                                   param_search)
                     field['oc-api:template'] = fl.make_request_url(new_rparams)
                     field['oc-api:template-json'] = fl.make_request_url(new_rparams, '.json')
                 else:
                     param_search = param_val.replace(search_term, '{SearchTerm}')
                     rem_request = fl.make_request_sub(self.request_dict,
                                                       'prop',
                                                       param_val,
                                                       param_search)
                     field['oc-api:template'] = fl.make_request_url(rem_request)
                     field['oc-api:template-json'] = fl.make_request_url(rem_request, '.json')
                 text_fields.append(field)
     if len(text_fields) > 0:
         self.json_ld['oc-api:has-text-search'] = text_fields