code: def by_period(self, field=None, period=None, timezone=None, start=None, end=None):
          
  
          hist_period = period if period else self.interval_
          time_zone = timezone if timezone else "UTC"
  
          start_ = start if start else self.start_date
          end_ = end if end else self.end_date
          bounds = self.get_bounds(start_, end_)
  
          date_field = field if field else "grimoire_creation_date"
          agg_key = "date_histogram_" + date_field
          if agg_key in self.aggregations.keys():
              agg = self.aggregations[agg_key]
          else:
              agg = A("date_histogram", field=date_field, interval=hist_period,
                      time_zone=time_zone, min_doc_count=0, **bounds)
  
          child_agg_counter = self.child_agg_counter_dict[agg_key]
          child_name, child_agg = self.aggregations.popitem()
  
          agg.metric(child_agg_counter, child_agg)
          self.aggregations[agg_key] = agg
          self.child_agg_counter_dict[agg_key] += 1
          return self
docs: Create a date histogram aggregation using the last added aggregation for the
          current object. Add this date_histogram aggregation into self.aggregations
  
          :param field: the index field to create the histogram from
          :param period: the interval which elasticsearch supports, ex: "month", "week" and such
          :param timezone: custom timezone
          :param start: custom start date for the date histogram, default: start date under range
          :param end: custom end date for the date histogram, default: end date under range
          :returns: self, which allows the method to be chainable with the other methods