예제 #1
0
파일: service.py 프로젝트: xvzf/byceps
def _get_hour_starts(dt_ranges: Sequence[DateTimeRange]) -> Iterator[datetime]:
    min_starts_at = _find_earliest_start(dt_ranges)
    max_ends_at = _find_latest_end(dt_ranges)

    hour_starts_arrow = Arrow.range('hour', min_starts_at, max_ends_at)

    return _to_datetimes_without_tzinfo(hour_starts_arrow)
예제 #2
0
파일: views.py 프로젝트: m-ober/byceps
def view(party_id):
    """List orga presence and task time slots for that party."""
    party = Party.query.get_or_404(party_id)

    presences = Presence.query \
        .for_party(party) \
        .options(db.joinedload('orga')) \
        .all()
    tasks = Task.query.for_party(party).all()

    time_slots = [party] + tasks
    min_starts_at = find_earliest_time_slot_start(time_slots)
    max_ends_at = find_latest_time_slot_end(time_slots)

    hour_starts_arrow = Arrow.range('hour', min_starts_at, max_ends_at)
    hour_starts = [hour_start.datetime.replace(tzinfo=None)
                   for hour_start in hour_starts_arrow]

    hour_ranges = list(map(DateTimeRange._make, pairwise(hour_starts)))

    days = [(day, len(list(hour_starts))) for day, hour_starts
                  in groupby(hour_starts, key=lambda hour: hour.date())]

    return {
        'party': party,
        'days': days,
        'hour_ranges': hour_ranges,
        'presences': presences,
        'tasks': tasks,
    }
예제 #3
0
def _get_hour_starts(dt_ranges):
    min_starts_at = _find_earliest_start(dt_ranges)
    max_ends_at = _find_latest_end(dt_ranges)

    hour_starts_arrow = Arrow.range('hour', min_starts_at, max_ends_at)

    return _to_datetimes_without_tzinfo(hour_starts_arrow)
예제 #4
0
def create_array_with_zeroes(data_frame: DataFrame, beg: Arrow, end: Arrow) -> List[float]:
    arr = []
    for day in Arrow.range('day', beg, end):
        try:
            value = data_frame.loc[day.date()].values[0]
        except KeyError:
            value = 0.0
        arr.append(value)
    return arr
예제 #5
0
 def run(self, task_define):
     Arrow.now().date()
     start_dt = arrow.get(task_define['last_crawl_day'])  # .strftime('%Y%m%d')
     end_dt = arrow.get(task_define['cur_dt'])
     for r_dt in Arrow.range('day', start_dt, end_dt):
         logger.info('Start to crawl data of task: %s, dt: %s' % (self.__class__.__name__, r_dt))
         t_dt = r_dt.strftime('%Y%m%d')
         daily_records = self.ts_client.query(API_NAME, trade_date=t_dt)
         self.write_db_with_df('stock_daily_basic', daily_records)
예제 #6
0
def get_mean_forecast(data_frame: DataFrame, now: Arrow,
                      for_date: Arrow) -> Series:
    tomorrow = now.shift(days=1)
    beg = now.shift(days=-6)
    arr = []
    for day in Arrow.range('day', beg, now):
        try:
            value = data_frame.loc[day.date()].values[0]
        except KeyError:
            value = 0.0
        arr.append([day.date(), value])
    init_df = create_df_indexed_by_date(create_df(arr))
    df = create_df_with_zeroes(init_df, beg, for_date)
    for day in Arrow.range('day', tomorrow, for_date):
        yesterday = day.shift(days=-1)
        past_week = df[yesterday.shift(days=-6).date():yesterday.date()]
        df.loc[day.date()] = past_week.mean()
    return df['quantity'][tomorrow.date():for_date.date()]
예제 #7
0
def timeloop(start=datetime.now() + timedelta(days=-1),
             end=datetime.now() + timedelta(days=0)):
    "生成一个字符串格式为YYYY-MM-DD形式的数组."
    if (type(start) is str) or (type(end) is str):
        start = start if type(
            start) is datetime else datetime.strptime(start, '%Y-%m-%d')
        end = datetime.now()
    # TODO:检查时间是否为字符串,如果是则转换为时间。

    rond = []
    for r_time in Arrow.range('day', start, end):
        rond.append(r_time.format('YYYY-MM-DD'))
    return rond
예제 #8
0
def create_df_with_zeroes(data_frame: DataFrame,
                          beg: Arrow,
                          end: Arrow,
                          date_selector: Union[Callable, None] = None
                          ) -> DataFrame:
    arr = []
    for day in Arrow.range('day', beg, end):
        dt = date_selector(day) if date_selector else day
        try:
            value = data_frame.loc[dt.date()].values[0]
        except KeyError:
            value = 0.0
        arr.append([day.date(), value])
    return create_df_indexed_by_date(create_df(arr))
예제 #9
0
 def export_hourly2day(self, target_day: arrow.Arrow):
     """
     将一天拆成小时查询并合并
     :param vins: 需要查询的vin
     :param target_day: 需要查询的精确到天的时间
     :return: 查询的vin的目标日的数据
     """
     day_hours = list(
         target_day.range('hour', target_day, target_day.shift(days=1)))
     target_time_bucket = []
     for i in range(len(day_hours) - 1):
         target_time_bucket.append((day_hours[i], day_hours[i + 1]))
     # 查询数据
     df = pandas.DataFrame()
     for t_t, d_t in target_time_bucket:
         dd, err_list = self.export(t_t, d_t)
         df = df.append(dd)
         if len(err_list) > 0:
             self.record_err(t_t.format('YYY-MM-DD_HH'))
     return df
예제 #10
0
 def export_daily2month(self, vins: list, target_month: arrow.Arrow):
     """
     将目标vin号的一个月拆分为单天查询后组合返回
     :param vins: 需要查询的vin
     :param target_month: 需要查询的精确到月的时间
     :return: 查询的vin的目标月的数据
     """
     # 拼装一个月的单日时间范围
     month_days = list(
         target_month.range('day', target_month,
                            target_month.shift(months=1)))
     target_time_bucket = []
     for i in range(len(month_days) - 1):
         target_time_bucket.append((month_days[i], month_days[i + 1]))
     # 查询数据
     df = pandas.DataFrame()
     for t_t, d_t in target_time_bucket:
         dd, err_list = self.export(vins, [(t_t, d_t)])
         df = df.append(dd)
         if len(err_list) > 0:
             df = df.append(self.export_hourly2day(err_list, t_t))
     return df
예제 #11
0
def modify_df(beg: Arrow, end: Arrow, modifier: Callable):
    arr = []
    for day in Arrow.range('day', beg, end):
        arr.append([day.date(), modifier(day)])
    return create_df_indexed_by_date(create_df(arr))
예제 #12
0
def _calendar_tasks(tdb: TaskDB, date: Arrow, period) -> List[Tuple[Arrow, TaskDB]]:
    start, end = _calendar_range(date, period)
    tasks = []  # type: List[Tuple[Arrow, TaskDB]]
    for date in Arrow.range("day", start, end):
        tasks.append((date, tdb.filter(lambda t: filters.due_on(t, date))))
    return tasks