def git_important_days(birthday_dt, period): ''' получаем список особых дней за указанный период birthday_dt - дата рождения period - период, в который нужно получить особые даты [0] - дата начала прериода, [1] - дата окончания периода ''' days = {} _day = period[0] while date_compare( *(_day+period[1]) ) != -1: time_diff = date_diff(_day, birthday_dt) critical = get_critical_preiods(_day, time_diff) peak = get_peak_preiods(_day, time_diff) day = yyyy_mm_dd(_day) if (peak or critical): days.setdefault( day, { 'biorythms': day_bio(time_diff), 'day': yyyy_mm_dd(_day) } ) if peak: days[day].update(peak) if critical: days[day].update(critical) _day = date_shift(*(_day + (1,))) return collections.OrderedDict(sorted(days.items()))
def get_bio_data(birthday_dt, period): ''' получить данные для графиков birthday_dt - дата рождения period - период, в которым интересны данные [0] - дата начала прериода, [1] - дата окончания периода ''' return [ { 'day': yyyy_mm_dd( date_shift( *(birthday_dt + [t,]) ) ), 'fiz': int(bio(t, PHYSICAL_PERIOD)), 'emo': int(bio(t, EMOTIONAL_PERIOD)), 'smart': int(bio(t, BRAIN_PERIOD)), } for t in xrange( date_diff(period[0], birthday_dt), date_diff(period[1], birthday_dt)+1 ) ]
def snct_minc(date, diff): diff = int(diff) _date = date_to_dict(date) sign = diff/abs(diff) sift = 0 for i in xrange(min(0, diff), max(0, diff)): sift += num_days_in_month(_date[1], _date[2]) _date = date_shift( *(_date + [sign*sift]) ) return yyyy_mm_dd(_date)
def formatmonthname(self, theyear, themonth, withyear=True): with calendar.TimeEncoding(self.locale) as encoding: s = calendar.month_name[themonth] if encoding is not None: s = s.decode(encoding) if withyear and theyear != self.today.year: s = '%s, %s' % (s, theyear) prev_month_day = yyyy_mm_dd( date_shift(1, themonth, theyear, -1) ) next_month_day = yyyy_mm_dd( date_shift( num_days_in_month(themonth,theyear), themonth, theyear, 1 ) ) return ( '<tr><th colspan="7" class="month">' '<a href="#" day="%s" class="get_bio_data">←</a> ' '%s' ' <a href="#" day="%s" class="get_bio_data">→</a>' '</th></tr>' )% (prev_month_day, s, next_month_day)
def get_bio_context(date_bt_tuple, cur_date): ''' возвращает данные по биоритмам для: day_bd - дата рождения (d,m,y) cur_date - дата для который требуется получить данные по биоритмам ''' period = month_range(cur_date) critical_days = git_important_days(date_bt_tuple, period) curday_info = { 'biorythms': day_bio(date_diff(cur_date, date_bt_tuple)) } return { 'data': get_bio_data(date_bt_tuple, period), 'today_info': curday_info, 'critical_info': critical_days.get(yyyy_mm_dd(cur_date), False), 'critical_days': critical_days }
def get_context(self, **kwargs): date = self.get_date() if not date: return {} date_tuple = date.split('.') bio_context = bio_service.get_bio_context(date_tuple, self.current_date) bio_context['data'] = json.dumps(bio_context['data']) bio_context.update({'date_map': {k: yyyy_mm_dd(v) for k,v in day_maps(self.current_date).items()} }) myCal = MyHtmlCalendar(calendar.MONDAY, 'ru_RU.UTF-8') myCal.current_date = self.current_date bio_context.update({ 'today': self.today, 'calendar': myCal.formatmonth(self.current_date[2], self.current_date[1]) }) return bio_context
def formatday(self, day, weekday): css = [self.cssclasses[weekday]] if ( day == self.today.day and self.today.month == self.month and self.today.year == self.year ): css.append('today') if self.current_date == [day, self.month, self.year]: css.append('selected') if day == 0: return '<td class="noday"> </td>' else: return ( '<td class="%s">' '<a class="get_bio_data" day="%s" href="#">%d</a>' '</td>' ) % ( ' '.join(css), yyyy_mm_dd((day, self.month, self.year)), day )
def old_style(date): ''' переводит дату в старый стиль ''' return yyyy_mm_dd(get_old_style_date(*(date.split('-')[::-1])))
def snct_dinc(date, diff): return yyyy_mm_dd( date_shift( *(date_to_dict(date) + [int(diff)]) ) )