def _parse_date_facets(self, facet_items): ''' Parse date faceted fields like: {'departure_dates': {'2010-04-24T18:17:03Z': 105, '2010-05-01T00:00:00Z': 323, '2010-06-01T00:00:00Z': 334, '2010-07-01T00:00:00Z': 468, '2010-08-01T00:00:00Z': 504, '2010-09-01T00:00:00Z': 515, '2010-10-01T00:00:00Z': 519, '2010-11-01T00:00:00Z': 478, '2010-12-01T00:00:00Z': 457, '2011-01-01T00:00:00Z': 370, '2011-02-01T00:00:00Z': 357, '2011-03-01T00:00:00Z': 370, '2011-04-01T00:00:00Z': 359, 'end': '2011-05-01T00:00:00Z', 'gap': '+1MONTH/MONTH'}} ''' facets = [] for field, date_counts in facet_items.iteritems(): facet = Facet(field=field, label=field.replace('_', ' ').title()) gap = date_counts['gap'] for date_string, count in date_counts.iteritems(): match = DATETIME_REGEX.search(date_string) if not match: continue data = match.groupdict() date = datetime_safe.date(int(data['year']), int(data['month']), int(data['day'])) item = FacetItem(date, count) if gap == '+1MONTH/MONTH': item.label = date.strftime("%B") item.value = date.strftime("%Y-%m") elif gap == '+1YEAR/YEAR': item.label = date.strftime("%Y") item.value = date.strftime("%Y-01") item.is_selected = self._is_selected_facet( field, check_parse_date(item.value)) item.facet = facet facet.items.append(item) facet.items.sort(key=lambda x: x.value) facets.append(facet) return facets
def convert(self, value): if value is None: return None dates = [] for list_value in value: if isinstance(list_value, basestring): match = DATETIME_REGEX.search(list_value) if match: data = match.groupdict() dates.append(datetime_safe.date(int(data['year']), int(data['month']), int(data['day']))) else: raise SearchFieldError("Date provided to '%s' field doesn't appear to be a valid date string: '%s'" % (self.instance_name, list_value)) elif isinstance(list_value, datetime.date): dates.append(list_value) else: raise SearchFieldError("Date provided to '%s' field doesn't appear to be a valid date: '%s'" % (self.instance_name, list_value)) return list(dates)
def _parse_date_facets(self, facet_items): ''' Parse date faceted fields like: {'departure_dates': {'2010-04-24T18:17:03Z': 105, '2010-05-01T00:00:00Z': 323, '2010-06-01T00:00:00Z': 334, '2010-07-01T00:00:00Z': 468, '2010-08-01T00:00:00Z': 504, '2010-09-01T00:00:00Z': 515, '2010-10-01T00:00:00Z': 519, '2010-11-01T00:00:00Z': 478, '2010-12-01T00:00:00Z': 457, '2011-01-01T00:00:00Z': 370, '2011-02-01T00:00:00Z': 357, '2011-03-01T00:00:00Z': 370, '2011-04-01T00:00:00Z': 359, 'end': '2011-05-01T00:00:00Z', 'gap': '+1MONTH/MONTH'}} ''' facets = [] for field, date_counts in facet_items.iteritems(): facet = Facet(field=field, label=field.replace('_', ' ').title()) gap = date_counts['gap'] for date_string, count in date_counts.iteritems(): match = DATETIME_REGEX.search(date_string) if not match: continue data = match.groupdict() date = datetime_safe.date(int(data['year']), int(data['month']), int(data['day'])) item = FacetItem(date, count) if gap == '+1MONTH/MONTH': item.label=date.strftime("%B") item.value=date.strftime("%Y-%m") elif gap == '+1YEAR/YEAR': item.label=date.strftime("%Y") item.value=date.strftime("%Y-01") item.is_selected = self._is_selected_facet(field, check_parse_date(item.value)) item.facet = facet facet.items.append(item) facet.items.sort(key=lambda x: x.value) facets.append(facet) return facets