Example #1
0
def check_plan(cursor, logfile=logpath):
    query = "SELECT pin, ontime, offtime, calendar FROM `plan`"
    cursor.execute(query)
    planarray = cursor.fetchall()
    ThisMoment = datetime.strftime(datetime.now(), "%H:%M:%S")
    for moment in planarray:
        
#Проверяем календарь: 1 = только по будням, 2 = только по выходным, 3 = ежедневно
        operable = False
        if moment[3] == 1 and (datetime.isoweekday(datetime.now()) <= 5):
            operable = True
        elif moment[3] == 2 and (datetime.isoweekday(datetime.now()) >= 6):
            operable = True
        elif moment[3] == 3:
            operable = True
        else:
            operable = False
        
        if operable == True:
            pin = moment[0]
            ontime = moment[1]
            offtime = moment[2]

#Если настал момент включения/выключения, то пишем в базу соответствующую пару пин-статус, а также делаем запись в логе
            f = open(logfile, "a")
            if ThisMoment == ontime:
                query = "UPDATE `pins` SET `status`=1 WHERE `pin`='" + str(pin) + "'"
                f.write("%PLANON% " + str(pin) + " > " + str(datetime.strftime(datetime.now(), "%d.%m.%Y %H:%M:%S")) + "\n")
            if ThisMoment == offtime:
                query = "UPDATE `pins` SET `status`=0 WHERE `pin`='" + str(pin) + "'"
                f.write("%PLANOFF% " + str(pin) + " > " + str(datetime.strftime(datetime.now(), "%d.%m.%Y %H:%M:%S")) + "\n")
            f.close()
            cursor.execute(query)
            connection.commit()
Example #2
0
def dateFeature(dataset):
    dataset['weekday'] = dataset['date_id']\
        .apply(lambda x: datetime.isoweekday(x))
    dataset['month'] = dataset['date_id']\
        .apply(lambda x: x.month) / 12 # Month
    dataset['day'] = dataset['date_id']\
        .apply(lambda x: x.day) / 31 # Day
    dataset['day_rel'] = dataset['date_id']\
        .apply(lambda x: x.day / calendar.monthrange(x.year, x.month)[-1]) # Day (Relative : Divided by days of month)

    ## Weekend : Weekday(0) & Saturday(1) & Sunday(2)
    def weekEnd(dataset):
        if dataset == 6:
            v_return = 1
        elif dataset == 7:
            v_return = 2
        else:
            v_return = 0
        return v_return
    dataset['weekend'] = dataset['weekday'].apply(lambda x: weekEnd(x))
    dataset['weekend'] = dataset['weekend'] / 2

    ## WeekDays
    dataset['weekday'] = dataset['date_id']\
        .apply(lambda x: datetime.isoweekday(x)) / 7

    ## Store Code
    dataset['store'] = dataset['store_code'].astype(int) / 5000

    return dataset
Example #3
0
    def check_salary(self, current_date=datetime.now()):
        """
        Method will calculate value of salary for fixed days,
        if number of days is defined as argument when method was called

        :param current_date: if number of days is not defined,
        method takes current date and will calculate salary
        from beginning current month till today.

        :return: Result will be a value of salary as numeric

        """
        monthly_salary = 0
        int_current_date = isinstance(current_date, int)
        if int_current_date:
            monthly_salary = self.salary * current_date
        else:
            func = lambda x: date(current_date.year, current_date.month, x)
            list_days = [func(item) for item in range(1, current_date.day + 1)]
            for one_day in list_days:
                if datetime.isoweekday(one_day) == 6 or datetime.isoweekday(
                        one_day) == 7:
                    pass
                else:
                    monthly_salary += self.salary
        return monthly_salary
Example #4
0
 def parse_for_map(datetime):
     zip_predictions = []
     for zip in SAN_FRANCISCO_ZIP_CODES:
         day_of_month = datetime.day
         time_of_day_bucket = determine_time_of_day_bucket(datetime)
         month_of_year = datetime.month
         year = datetime.year
         DayOfWeek_Friday = datetime.isoweekday() == 5
         DayOfWeek_Wednesday = datetime.isoweekday() == 3
         DayOfWeek_Tuesday = datetime.isoweekday() == 2
         DayOfWeek_Thursday = datetime.isoweekday() == 4
         DayOfWeek_Monday = datetime.isoweekday() == 1
         DayOfWeek_Saturday = datetime.isoweekday() == 6
         DayOfWeek_Sunday = datetime.isoweekday() == 7
         is_weekend = datetime.isoweekday() in [6, 7]
         zip_predictions.append({
             zip:
             zip,
             result:
             model.predict([
                 day_of_month, time_of_day_bucket, month_of_year, year,
                 DayOfWeek_Friday, DayOfWeek_Wednesday, DayOfWeek_Tuesday,
                 DayOfWeek_Thursday, DayOfWeek_Monday, DayOfWeek_Saturday,
                 DayOfWeek_Sunday, is_weekend, zip
             ])[0]
         })
     return zip_predictions
Example #5
0
def get_tommorow(message):
    """ Получить расписание на следующий день """
    # PUT YOUR CODE HERE

    _, group, week = message.text.split()

    day = datetime.today()
    week = datetime.isocalendar(day)
    day = datetime.isoweekday(day) + 1
    week = (week[1] + 1) % 2 + 1
    web_page = get_page(group, week)
    if day == 8:
        day = 1

    test = parse_schedule(web_page, day)

    if not test:
        resp = 'Занятий нет'
    else:
        times_list, locations_list, classrooms_list, lessons_list = test
        resp = ''
        for time, location, classroom, lesson in zip(times_list,
                                                     locations_list,
                                                     classrooms_list,
                                                     lessons_list):
            resp += '<b>{}</b>, {}, {}, {}\n'.format(time, location, classroom,
                                                     lesson)
    bot.send_message(message.chat.id, resp, parse_mode='HTML')
Example #6
0
def get_start_end_date(date):
    if date == None:
        date = dt.now()
    delta = dt.isoweekday(date) % 7
    sdate = date - datetime.timedelta(days = delta)
    edate = date + datetime.timedelta(days = 6 - delta)
    return sdate.strftime('%d-%m-%Y'), edate.strftime('%d-%m-%Y')
Example #7
0
def send_weekly_news():
    print('Start')
    if datetime.isoweekday(datetime.now()) == 1:
        week = localtime() - timedelta(days=7)
        categories = Category.objects.all()
        for category in categories:
            subscribers = User.objects.filter(
                categorysubscribers__category=category)
            subscribers_emails = []
            for user in subscribers:
                subscribers_emails.append(user.email)
                post_list = Post.objects.filter(
                    postcategory__to_categorys=category, create_post__gt=week)
                html_content = render_to_string(
                    'news_app/weekly_newsletter.html', {
                        'posts': post_list,
                        'category': category,
                    })
                msg = EmailMultiAlternatives(
                    subject=f'Все новости за прошедшую неделю',
                    from_email='*****@*****.**',
                    to=subscribers_emails,
                )
                msg.attach_alternative(html_content, "text/html")
                try:
                    msg.send()
                    print('Рассылка успешна отправлена')
                except Exception:
                    print('spam')
Example #8
0
def get_start_end_date(date):
    if date == None:
        date = dt.now()
    delta = dt.isoweekday(date) % 7
    sdate = date - datetime.timedelta(days=delta)
    edate = date + datetime.timedelta(days=6 - delta)
    return sdate.strftime('%d-%m-%Y'), edate.strftime('%d-%m-%Y')
Example #9
0
def get_start_placeId_by_time(book_time):
    time_placeid_weekend = {
        '09:01-10:00': 0,
        '10:01-11:00': 15,
        '11:01-12:00': 30,
        '14:01-15:00': 45,
        '15:01-16:00': 60,
        '16:01-17:00': 75,
        '17:01-18:00': 90,
        '18:01-19:00': 105,
        '19:01-20:00': 120,
        '20:01-21:00': 135,
        '21:01-22:00': 150
    }

    time_placeid_weekday = {
        '18:01-19:00': 0,
        '19:01-20:00': 15,
        '20:01-21:00': 30,
        '21:01-22:00': 45
    }

    if datetime.isoweekday(datetime.now() + timedelta(days=1)) <= 5:  #周一到周五
        return time_placeid_weekday[book_time]
    else:
        return time_placeid_weekend[book_time]
Example #10
0
def newsletter():
    """Еженедельная рассылка"""
    print(f'Start at {localtime()}')
    # Если день недели понедельник
    if datetime.isoweekday(datetime.now()) == 1:
        # Высчитываем время 7 дней назад
        week = localtime() - timedelta(days=7)
        # достаем всех пользователей и формируем список email
        users = CustomUser.objects.all()
        users_email = []
        for user in users:
            users_email.append(user.email)
        # Достаем все новости за последние 7 дней
        if Post.objects.filter(date_create__gt=week).exists():
            posts = Post.objects.filter(date_create__gt=week)
            # HTML страница для мыло
            html_content = render_to_string('board/mailing/week_letter.html', {
                'posts': posts,
            })
            # Собираем тело сообщения
            msg = EmailMultiAlternatives(
                subject=f'Все публикации за прошедшую неделю',
                from_email=settings.DEFAULT_FROM_EMAIL,
                to=users_email,
            )
            msg.attach_alternative(html_content, "text/html")  # добавляем html
            msg.send()  # отсылаем
            print('Еженедельная рассылка успешна отправлена')
        else:
            print('Новых постов нет')
Example #11
0
def get_weekdays(start_dt, end_dt):
	days = []
	weekdays = [6,7]
	for dt in daterange(start_dt, end_dt):
	    if dt.isoweekday() not in weekdays:
	        days.append(dt)
	return days
Example #12
0
def wk_newsletter():
    print(f'Start{localtime()}')
    # Если день недели воскресенье
    if datetime.isoweekday(datetime.now()) == 1:
        # Высчитываем время 7 дней назад
        week = localtime() - timedelta(days=7)
        # По очереди берем каждую категорию, и делаем рассылку его подписчикам
        categories = Category.objects.all()
        for category in categories:
            # Берем всех подписчиков этой темы, и создаем список почтовых адресов
            subscribers = User.objects.filter(categorysubscribers__category=category)
            subscribers_emails = []
            for user in subscribers:
                subscribers_emails.append(user.email)
                # Достаем все новости этой категории за последние 7 дней
                post_list = Post.objects.filter(postcategory__category=category, date_create__gt=week)
                print(post_list)

                # HTML страница для мыло
                html_content = render_to_string('templates/weekly_newsletter.html',
                                                {'posts': post_list, 'category': category, })
                # Достаем
                # Собираем тело сообщения
                msg = EmailMultiAlternatives(
                    subject=f'Все новости за прошедшую неделю',
                    from_email=settings.DEFAULT_FROM_EMAIL,
                    to=subscribers_emails,
                )
                msg.attach_alternative(html_content, "text/html")  # добавляем html
                msg.send()  # отсылаем
                print('Рассылка успешна отправлена')
Example #13
0
def get_other_devices_consumption(datetime: datetime,
                                  holiday: bool = False) -> float:
    hour = datetime.hour
    if holiday:
        return 0.5
    elif datetime.isoweekday() <= 5:
        if hour < 5:
            return 0.5
        elif hour < 8:
            return 3
        elif hour < 10:
            return 2
        elif hour < 16:
            return 1
        elif hour < 20:
            return 2
        else:
            return 1
    else:
        if hour < 8:
            return 0.5
        elif hour < 12:
            return 3
        elif hour < 17:
            return 1
        else:
            return 2
Example #14
0
def get_latest_trading_day():
    today = datetime.today()
    if today.hour < 15:
        today -= timedelta(days=1)
    weekday = datetime.isoweekday(today)
    if weekday == 6 or weekday == 7:
        today -= timedelta(days=(weekday - 5))
    return today
Example #15
0
 def get_immediate_delivery_work(self,min_date):
     """retorna la fecha con la suma de los dias laborables a partir de la fecha actual y el valor de immediate_delivery"""
     date_object = datetime.strptime(min_date, '%Y-%m-%d %H:%M:%S')
     days_aux=int((datetime.isoweekday(datetime.now().date())+self.immediate_delivery)/5)*2+self.immediate_delivery
     date_object=date_object+timedelta(days=days_aux)
     if self.immediate_delivery < 0:
         raise UserError('La cantidad de días no puede ser menor a cero (0)!')
     return date_object
Example #16
0
def pronosticoDias(dia):
    diasIngreso = []
    for i in range(i_min, i_max + 1, 1):
        codigoDia = datetime.isoweekday(fechas[i])
        if codigoDia == dia:
            diasIngreso.append(ingresos[i])
    promedio = np.mean(diasIngreso)
    return diasIngreso, promedio
Example #17
0
def simple_count_weekdays(date, end, weekday):
    num_weekdays = 0
    while date <= end:
        if datetime.isoweekday(date) == weekday:
            if date.day == 1: num_weekdays += 1
        date += timedelta(days=1)

    return num_weekdays
Example #18
0
def mond():
    gunFarki_monday = (datetime.isoweekday(datetime.now()) - 1)
    monday = (int(datetime.now().strftime("%d")) - gunFarki_monday)
    current_month = datetime.now().month
    current_year = datetime.now().year
    mon_ = datetime(current_year, current_month, monday, 0, 0, 0,
                    0).timetuple()
    mon__ = int(time.mktime(mon_))
    return mon__
Example #19
0
def satu():
    gunFarki_saturday = (datetime.isoweekday(datetime.now()) - 6)
    saturday = (int(datetime.now().strftime("%d")) - gunFarki_saturday)
    current_month = datetime.now().month
    current_year = datetime.now().year
    sat_ = datetime(current_year, current_month, saturday, 0, 0, 0,
                    0).timetuple()
    sat__ = int(time.mktime(sat_))
    return sat__
Example #20
0
def isweedend(day=None):
    if not day:
        day = today

    #weekday = date.isoweekday(date.today()) #weekday is not ok...
    weekday = date.isoweekday(
        day)  #date.isoweekday(datetime.date(2015, 4, 16))
    if weekday % 7 == 0 or weekday == 6:  #Sunday is 7...
        return True
    return False
 def getDayInWeek(self, date):
     '''Monday is 1 and Sunday is 7'''
     dayInt = datetime.isoweekday(date)
     if (dayInt == 1): return 'Monday'
     if (dayInt == 2): return 'Tuesday'
     if (dayInt == 3): return 'Wednesday'
     if (dayInt == 4): return 'Thursday'
     if (dayInt == 5): return 'Friday'
     if (dayInt == 6): return 'Saturday'
     else: return 'Sunday'
Example #22
0
def week_start(dt=None):
    """
    Calculates the ISO week start datetime for the given time
    @param dt: Datetime to calculate from (defaults to now)
    @returns: datetime of week start
    """
    if dt is None:
        dt = datetime.today()
    week_days = datetime.isoweekday(dt) % 7
    week_start = dt - timedelta(days=week_days)
    return week_start.replace(hour=0, minute=0, second=0, microsecond=0)
Example #23
0
def week_start(dt=None):
    """
    Calculates the ISO week start datetime for the given time
    @param dt: Datetime to calculate from (defaults to now)
    @returns: datetime of week start
    """
    if dt is None:
        dt = datetime.today()
    week_days = datetime.isoweekday(dt) % 7
    week_start = dt - timedelta(days=week_days)
    return week_start.replace(hour=0, minute=0, second=0, microsecond=0)
Example #24
0
def scheduled_mode(old_mode):

    try:
        now = datetime.now()
        today = datetime.isoweekday(datetime.now())
        if today == 7:
            today = 0
        if mem.cache_day is None or mem.cache_day != today:  # refresh cache, reset flags, turn off heat
            logger.debug(
                "scheduled_mode:  cache flush or new day.  resetting flags, turning off heat."
            )
            mem.cache_day = today
            mem.sched_flag_off = False
            mem.sched_flag_on = False
            with open("schedule.json") as f:
                my_schedule = json.load(
                    f)  # t= time.strptime("00:05:42.244", "%H:%M:%S")
                mem.cache_start_time = my_schedule['days'][today]['time'][
                    'startTime']
                mem.cache_start_time = now.replace(
                    hour=int(mem.cache_start_time.split(":")[0]),
                    minute=int(mem.cache_start_time.split(":")[1]))
                mem.cache_end_time = my_schedule['days'][today]['time'][
                    'endTime']
                mem.cache_end_time = now.replace(
                    hour=int(mem.cache_end_time.split(":")[0]),
                    minute=int(mem.cache_end_time.split(":")[1]))
            return "off"

        if now < mem.cache_start_time:
            return old_mode

        if now > mem.cache_start_time and now < mem.cache_end_time:
            if mem.sched_flag_on:
                return old_mode
            else:  # start flag NOT set
                mem.sched_flag_on = True  # set flag
                logger.debug("scheduled_mode:  going AUTO")
                return "auto"

        if now > mem.cache_end_time:
            if mem.sched_flag_off:
                return old_mode
            else:  # end flag NOT set
                mem.sched_flag_off = True  # set end flag
                logger.debug("scheduled_mode:  going OFF")
                return "off"

    except:
        exc_type, exc_value, exc_traceback = sys.exc_info()
        logger.error(''.join('!! ' + line
                             for line in traceback.format_exception(
                                 exc_type, exc_value, exc_traceback)))
Example #25
0
def NumberWorkDays(d1=date(2005, 7, 15), d2=date(2005, 7, 3)):
    delta = d2 - d1
    if delta.days < 0:
        dn1, dn2 = d2, d1
    else:
        dn1, dn2 = d1, d2
    delta = dn2 - dn1
    full_weeks = (delta.days) // 7
    remainder = (delta.days) % 7
    w1 = datetime.isoweekday(dn1)
    w2 = datetime.isoweekday(dn2)
    if w2 < w1:
        w2 = w2 + 7
    i = 0
    j = 0
    while i < 14:
        i += 1
        if (i > w1) and (i != 6) and (i != 7) and (i < w2):
            j += 1
    work_days = full_weeks * 5 + j
    return work_days
Example #26
0
def send_text(message):
    free_day = False
    if message.text.lower() == "сегодня":
        today, free_day = get_timetable(
            get_day_name(datetime.isoweekday(datetime.now())))
        bot.send_message(message.chat.id, today)
    elif message.text.lower() == "завтра":
        tommorow, free_day = get_timetable(
            get_day_name(
                datetime.isoweekday(datetime.now() + timedelta(days=1))))
        bot.send_message(message.chat.id, tommorow)
    elif message.text.lower() == "неделя":
        bot.send_message(
            message.chat.id,
            "📅 Выбери день недели: ",
            reply_markup=inline_keyboard,
        )
    if free_day:
        bot.send_sticker(
            message.chat.id,
            LAZY_STICKER_ID,
        )
Example #27
0
    def daily_appointment(self, context: CallbackContext, chat_id: str):
        appointment = _send_first_appointment_of_day()

        if appointment:
            context.bot.send_message(chat_id=chat_id, text=appointment)
            _setup_day_ended(context.job, chat_id)
        else:
            # send day is ended, if its a week day without appointment
            d = datetime.datetime.now()
            if d.isoweekday() in range(1, 6):
                context.bot.send_message(chat_id=chat_id,
                                 text=get_random_string_of_messages_file(
                                     "constants/messages/lecture_free_day_messages.json"))
                _send_day_ended_sticker(context.bot, context.job)
Example #28
0
def get_answered_unanswered():
    s = requests.Session()
    answered_url = 'http://voip.bisys.ru/queue-stats/answered.php'
    headers = {
        "Content-Type":
        "application/x-www-form-urlencoded",
        "Authorization":
        "Basic c3VwcG9ydGhlbHA6cXdlcnR5",
        "User-Agent":
        "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:80.0) Gecko/20100101 Firefox/80.0"
    }
    yesterday = datetime.strftime((datetime.now() - timedelta(days=1)),
                                  "%Y-%m-%d")
    weekday = datetime.isoweekday((datetime.now() - timedelta(days=1)))
    #logger.info(f'weekday: {weekday}')
    if weekday == 5:  # По пятнцицам смотреть звонки до 17 часов
        endtime = "16:59:59"
    else:  # В остальные дни смотреть до 18
        endtime = "17:59:59"

    payload = {
        "start":
        f"{yesterday} 09:00:00",
        "end":
        f"{yesterday} {endtime}",
        "List_Queue[]": ["'100'", "'200'"],
        "List_Agent[]": [
            "'125-Cvecih'", "'154-Yakovlev'", "'140-Voronina'", "'137-Zmeev'",
            "'148-Nazarov'", "'155-Kulakov'", "'147-Besonogov'",
            "'147-Besogonov'", "'156-Solcina'"
        ]
    }
    #logger.info(f'endtime: {payload["end"]}')
    ans_request = s.post(answered_url, data=payload, headers=headers)
    ans_soup = BeautifulSoup(ans_request.text,
                             'lxml')  # Передаем в суп полученную страницу
    # находим нужный тег, отсекая лишние символы
    answered = ans_soup.find('table').find_all('td')[11].text.replace(
        ' выз.', '')

    unanswered_url = 'http://voip.bisys.ru/queue-stats/unanswered.php'
    unans_request = s.post(unanswered_url, data=payload,
                           headers=headers)  # Идем во вкладку пропущенные
    unans_soup = BeautifulSoup(unans_request.text,
                               'lxml')  # Передаем в суп полученную страницу
    unanswered = unans_soup.find('table').find_all('td')[11].text.replace(
        ' выз.', '')
    stat['calls']['answered'] = answered
    stat['calls']['unanswered'] = unanswered
    logger.debug(f'Данные по звонкам добавлены: {stat}')
Example #29
0
def get_energy_cost(datetime: datetime, income: bool = False) -> float:
    month = datetime.month
    hour = datetime.hour
    if month in [1, 2, 3, 10, 11, 12]:
        if datetime.isoweekday() <= 5:
            if hour < 6:
                return 1 if income else 0.5
            elif hour < 13:
                return 2.5 if income else 2
            elif hour < 15:
                return 1
            elif hour < 22:
                return 2.5 if income else 2
            else:
                return 0.5 if income else 1
        else:
            return 0.5 if income else 1
    else:
        if datetime.isoweekday() <= 5:
            if hour < 6:
                return 0.5 if income else 1
            elif hour < 15:
                return 2.5 if income else 2
            elif hour < 17:
                return 1
            elif hour < 22:
                return 2.5 if income else 2
            else:
                return 0.5 if income else 1
        else:
            if hour < 12:
                return 0.5 if income else 1
            elif hour < 15:
                return 0.25 if income else 0.5
            else:
                return 0.5 if income else 1
 def parse_for_map(datetime):
   zip_predictions = []
   for zip in SAN_FRANCISCO_ZIP_CODES:
     day_of_month        = datetime.day
     time_of_day_bucket  = determine_time_of_day_bucket(datetime)
     month_of_year       = datetime.month
     year                = datetime.year
     DayOfWeek_Friday    = datetime.isoweekday() == 5
     DayOfWeek_Wednesday = datetime.isoweekday() == 3
     DayOfWeek_Tuesday   = datetime.isoweekday() == 2
     DayOfWeek_Thursday  = datetime.isoweekday() == 4
     DayOfWeek_Monday    = datetime.isoweekday() == 1
     DayOfWeek_Saturday  = datetime.isoweekday() == 6
     DayOfWeek_Sunday    = datetime.isoweekday() == 7
     is_weekend          = datetime.isoweekday() in [6,7]
     zip_predictions.append({'zip': zip, 'result': my_model.predict([day_of_month, time_of_day_bucket, month_of_year, year, DayOfWeek_Friday, DayOfWeek_Wednesday, DayOfWeek_Tuesday, DayOfWeek_Thursday, DayOfWeek_Monday, DayOfWeek_Saturday, DayOfWeek_Sunday, is_weekend, zip])[0], 'result_proba': my_model.predict_proba([day_of_month, time_of_day_bucket, month_of_year, year, DayOfWeek_Friday, DayOfWeek_Wednesday, DayOfWeek_Tuesday, DayOfWeek_Thursday, DayOfWeek_Monday, DayOfWeek_Saturday, DayOfWeek_Sunday, is_weekend, zip])[0][0]})
   return zip_predictions
def parse_for_map(datetime):
  zip_predictions = []
  for zip in SAN_FRANCISCO_ZIP_CODES:
    day_of_month        = datetime.day
    time_of_day_bucket  = determine_time_of_day_bucket(datetime)
    month_of_year       = datetime.month
    year                = datetime.year
    DayOfWeek_Friday    = datetime.isoweekday() == 5
    DayOfWeek_Wednesday = datetime.isoweekday() == 3
    DayOfWeek_Tuesday   = datetime.isoweekday() == 2
    DayOfWeek_Thursday  = datetime.isoweekday() == 4
    DayOfWeek_Monday    = datetime.isoweekday() == 1
    DayOfWeek_Saturday  = datetime.isoweekday() == 6
    DayOfWeek_Sunday    = datetime.isoweekday() == 7
    is_weekend          = datetime.isoweekday() in [6,7]
    zip_predictions.append({zip: smoothie_tree.predict([day_of_month, time_of_day_bucket, month_of_year, year, DayOfWeek_Friday, DayOfWeek_Wednesday, DayOfWeek_Tuesday, DayOfWeek_Thursday, DayOfWeek_Monday, DayOfWeek_Saturday, DayOfWeek_Sunday, is_weekend, zip])[0]})
  print(zip_predictions)
Example #32
0
async def week_number(next_week):
    today = datetime.today()
    date_now = date(year=today.year, month=today.month, day=today.day)

    week = date_now.isocalendar()[1]
    weekday = datetime.isoweekday(today)

    time = int(datetime.time(today).strftime('%H'))

    if weekday >= 5 and time >= 8:
        week += 1

    if next_week is True:
        week += 1

    return week
Example #33
0
def get_expected_temperature(
        datetime: datetime = datetime.now(),
        holiday: bool = False,
        expected_temperature: dict = default_expected_temperature) -> int:
    if holiday:
        return expected_temperature["holiday"]
    else:
        if datetime.isoweekday() <= 5:
            if datetime.hour < 5:
                return expected_temperature["night"]
            else:
                return expected_temperature["day"]
        else:
            if datetime.hour < 8:
                return expected_temperature["night"]
            else:
                return expected_temperature["day"]
Example #34
0
 async def xur(self):
     now = dt.now()
     day = dt.isoweekday(now)
     hour = now.hour
     minute = now.minute
     if day not in [6, 7, 1]:
         if day == 5:
             if hour < 18:
                 tstr = '{} hour(s) and {} minutes'.format((18 - hour),
                                                           (60 - minute))
                 await self.bot.say('Xûr will arrive in {}'.format(tstr))
             else:
                 await self.bot.say('Xûr is already here!')
             pass
         elif day == 2:
             pass
     pass
Example #35
0
def scheduled_mode(old_mode):

    try:
        now = datetime.now()
        today = datetime.isoweekday(datetime.now())
        if today == 7:
            today = 0
        if mem.cache_day is None or mem.cache_day != today:  # refresh cache, reset flags, turn off heat
            logger.debug("scheduled_mode:  cache flush or new day.  resetting flags, turning off heat.")
            mem.cache_day = today
            mem.sched_flag_off = False
            mem.sched_flag_on = False
            with open("schedule.json") as f:
                my_schedule = json.load(f)  # t= time.strptime("00:05:42.244", "%H:%M:%S")
                mem.cache_start_time = my_schedule["days"][today]["time"]["startTime"]
                mem.cache_start_time = now.replace(
                    hour=int(mem.cache_start_time.split(":")[0]), minute=int(mem.cache_start_time.split(":")[1])
                )
                mem.cache_end_time = my_schedule["days"][today]["time"]["endTime"]
                mem.cache_end_time = now.replace(
                    hour=int(mem.cache_end_time.split(":")[0]), minute=int(mem.cache_end_time.split(":")[1])
                )
            return "off"

        if now < mem.cache_start_time:
            return old_mode

        if now > mem.cache_start_time and now < mem.cache_end_time:
            if mem.sched_flag_on:
                return old_mode
            else:  # start flag NOT set
                mem.sched_flag_on = True  # set flag
                logger.debug("scheduled_mode:  going AUTO")
                return "auto"

        if now > mem.cache_end_time:
            if mem.sched_flag_off:
                return old_mode
            else:  # end flag NOT set
                mem.sched_flag_off = True  # set end flag
                logger.debug("scheduled_mode:  going OFF")
                return "off"

    except:
        exc_type, exc_value, exc_traceback = sys.exc_info()
        logger.error("".join("!! " + line for line in traceback.format_exception(exc_type, exc_value, exc_traceback)))
 def not_weekend(self):
     if not datetime.isoweekday(self.date_of_event_string):
         print("Event should be on weekdays only.")
         return False
     else:
         return True
Example #37
0
   def render(self, context):
      # determine desired object type
      try:
         model = model_from_name(self.params['app_model'])
      except TemplateSyntaxError:
         model = model_from_name(Variable(self.params['app_model']).resolve(context))
      model_name = model.__name__.lower()
      
      # Base queryset to filter on
      manager = model.live if hasattr(model, 'live') and isinstance(model.live, Manager) else model.objects
      opts = gettag.from_model(model)
      if opts.get('is_dynamic', False) and model_name not in opts.get('non_dynamic_names', ''):
         dType = DynamicType.objects.get(pk=gettag.from_model(model).get('dynamic_map').get(model_name, None))
         q = manager.filter(dynamic_type=dType)
      else:
         q = manager.all()
      
      # flag to mark if a value was set before reaching the end of the render
      # function because of a special case
      valueSet = False
      
      # handle with clause
      if 'with_field' in self.params:
         field = self.params['with_field']
         
         # allow custom function to handle with clause for this model type
         custom_with = gettag.from_model(model).get('with', None)
         if callable(custom_with):
            cfield = Variable(self.params['with_field']).resolve(context)

            if 'with_value' in self.params:
               cvalue = Variable(self.params['with_value']).resolve(context)
               result = custom_with(cfield, cvalue)
            else:
               result = custom_with(cfield)
            
            if isinstance(result, QuerySet):
               # if the function returned a queryset, then we can continue on
               q = result
            else:
               # otherwise just return the value
               context[self.varname] = result
               return ''
         else:
            if not field in model._meta.get_all_field_names():
               raise TemplateSyntaxError, "get tag: field '%s' does not exist on model %s" % (field, model.__name__)
            elif 'with_value' in self.params and isinstance(model._meta.get_field(field).rel, ManyToManyRel):
               raise TemplateSyntaxError, "get tag: cannot match a value to m2m field '%s' on model %s" % (field, model.__name__)
            
            filter_params = {}
            if 'with_value' in self.params:
               # can only resolve a variable value or a quoted string,
               # but users could put an unquoted string/non-variable,
               # so we catch that exception and move on
               try:
                  value = Variable(self.params['with_value']).resolve(context)
               except VariableDoesNotExist:
                  value = self.params['with_value']
                  if value == 'None':
                     value = None

               filter_params[str(field)] = value
            else:
               # only return results that have matching related objects
               # pk > 0 is a hack, as annotations/aggregations are not fast enough
               # (difficult to index properly + complicated joins)
               filter_params[str("%s__pk__gt" % field)] = 0
            q = q.filter(**filter_params)
      
      # handle 'in' clause(s)
      if 'in' in self.params:
         stack = [model]
         filter_params = {}
         exclude_params = {}
         for clause in self.params['in']:
            
            # if the provided type isn't in the map, try to resolve it as a variable
            if gettag.from_name(clause['type']):
               ctype = clause['type']
            else:
               try:
                  ctype = Variable(clause['type']).resolve(context)
                  if isinstance(ctype, int):
                     ctype = ContentType.objects.get(id=ctype_id)['name']
               except VariableDoesNotExist:
                  ctype = clause['type']

            type_model = model_from_name(ctype)
            stack.append(type_model)
            
            # can only resolve a variable value or a quoted string,
            # but users could put an unquoted string/non-variable,
            # so we catch that exception and move on
            try:
               value = Variable(clause['obj']).resolve(context)
               value_in_context = True
            except VariableDoesNotExist:
               value = clause['obj']
               value_in_context = False
               
            # allow for a custom function to handle this clause for this model type
            custom_in = gettag.from_model(gettag.from_name(ctype)).get('in', None)
            if callable(custom_in):
               result = custom_in(q, value)
               if isinstance(result, QuerySet):
                  q = result
                  continue
               else:
                  context[self.varname] = result
                  return ''
            
            # try to find the related field
            related_field = ''
            is_virtual = False
            for m in reversed(stack[:-1]):
               rf = model_relationship_field(m, type_model)
               if rf:
                  if related_field:
                     related_field = '%s__%s' % (rf, related_field)
                  else:
                     related_field = rf
                  type_model = m # track relationship backwards
               
            # if we didn't find a related field...
            if not related_field and len(model._meta.virtual_fields) == 0:
               raise TemplateSyntaxError, "get tag: invalid parameter in 'in %s %s' clause" % (ctype, clause['obj'])
            elif len(model._meta.virtual_fields) > 0:
               is_virtual = True
               filter_params[model._meta.virtual_fields[0].ct_field] = ContentType.objects.get_for_model(type_model).id
               related_field = model._meta.virtual_fields[0].fk_field
            
            # if this is a list of only one value (e.g., from a previous limit 1 call),
            # then we want the object itself
            # we split 'obj' clause in case the passed value is a member of the context variable
            if value_in_context and isinstance(value, list) and len(value) == 1:
               value = value[0]
            
            # if this type has a callable name field, apply it
            field_name = gettag.from_model(gettag.from_name(ctype)).get('name')
            if callable(field_name) and not isinstance(value, type_model):
               value = field_name(value)
            
            # if this type has a filter set, apply it
            filter_func = gettag.from_model(gettag.from_name(ctype)).get('filter', None)
            if filter_func:
               f = filter_func(value)
               related_field = '%s__%s' % (related_field, f[0])
               value = f[1]
            # otherwise, if there is not filter and it wasn't in the context,
            # then we need to suffix the appropriate field name
            elif clause['obj'] not in context:
               related_field = '%s__%s' % (related_field, field_name)
            
            if not is_virtual:
               if clause['exclude']:
                  exclude_params[related_field] = value
               else:
                  filter_params[related_field] = value
            else:
               if clause['exclude']:
                  exclude_params[related_field] = value
               else:
                  filter_params[related_field] = str(value.pk)

         q = q.exclude(**exclude_params)
         q = q.filter(**filter_params)
      
      # handle 'from last' clause
      if 'from_side' in self.params and 'from_timeperiod' in self.params:
         latest_field = model._meta.get_latest_by
         if not latest_field:
            raise TemplateSyntaxError, "get tag: %s does not support 'from last' clause" % model_name
         latest_field = latest_field.strip('-') # remove a minus sign if necessary
         
         if self.params['from_side'] == 'last':
            start = date.today() - timedelta(**{self.params['from_timeperiod']: int(self.params['from_x']) })
            end = date.today() + timedelta(days=1)
         elif self.params['from_side'] == 'next':
            start = date.today()
            end = date.today() + timedelta(**{self.params['from_timeperiod']: int(self.params['from_x']) })
         else: # == 'week'
            if self.params['from_timeperiod'] == 'today':
               day = date.today()
            else:
               day = resolve_param(self.params['from_timeperiod'], context)
               if not (isinstance(day, datetime) or isinstance(day, date)):
                  day = resolve_param(self.params['from_timeperiod'], context, func=datetime)
            offset = datetime.isoweekday(day) % 7 #sunday is first day of week
            start = day + timedelta(-offset)
            end = day + timedelta(7-offset-1)
         p = { '%s__range' % latest_field: (start, end)}
         q = q.filter(**p)
      
      # handle 'order by' clause
      if 'order_by' in self.params:
         order_by = resolve_param(self.params['order_by'],context, str)
         q = q.order_by(order_by)
      
      # handle 'limit' clause
      if 'limit' in self.params:
         limit = resolve_param(self.params['limit'], context, int)
         
         # handle optional 'offset' clause
         if 'offset' in self.params:
            offset = resolve_param(self.params['offset'], context, int)
            q = q[offset:offset+limit]
         else:
            q = q[:limit]    
      
         # if only one object was requested, then don't return a list
         if limit == 1:
            context[self.varname] = q[0]
            valueSet = True
      
      # if the value wasn't set previously in this function
      if not valueSet:
         context[self.varname] = q
      return ''
Example #38
0
def main(request, url_date=datetime.today().date(), page_number=1):
    tmp_args, tmp_args2 = dict(), dict()

    tmp_args['Понедельник'] = tmp_args2['Pon'] = 1
    tmp_args['Вторник'] = tmp_args2['Vt'] = 2
    tmp_args['Среда'] = tmp_args2['Sr'] = 3
    tmp_args['Четверг'] = tmp_args2['Cht'] = 4
    tmp_args['Пятница'] = tmp_args2['Pyat'] = 5
    tmp_args['Суббота'] = tmp_args2['Sub'] = 6
    tmp_args['Воскресенье'] = tmp_args2['Voskr'] = 7

    dates_for_weekday = dates = []
    dates.append((datetime.today().date().strftime('%Y-%m-%d'), 
                  datetime.isoweekday(datetime.today().date())))
    dates_for_weekday.append((datetime.today().date().strftime('%d.%m'), 
                              datetime.isoweekday(datetime.today().date())))

    for i in range(1, 7):
        dates_for_weekday.append(
            ((datetime.today().date() + timedelta(days=i)).strftime('%d.%m'),
             datetime.isoweekday((datetime.today().date() + timedelta(days=i)))))
        dates.append(
            ((datetime.today().date() + timedelta(days=i)).strftime('%Y-%m-%d'),
             datetime.isoweekday((datetime.today().date() + timedelta(days=i)))))

    def reverse_dictionary(dictionary):
        new_dictionary = dict()

        for key in dictionary:
            new_dictionary.setdefault(dictionary[key], key)
        return new_dictionary

    def fill_dates(_args, second_args, _dates):
        new_args = reverse_dictionary(_args)
        new_second_args = reverse_dictionary(second_args)
        for one_date in range(len(_dates)):
            _args[new_args[_dates[one_date][1]]] = _dates[one_date][0]
            second_args[new_second_args[_dates[one_date][1]]] = _dates[one_date][0]
        return _args, second_args

    args, args2 = fill_dates(tmp_args, tmp_args2, dates)

    args.update(args2)
    args['user'] = request.user
    args['date_url'] = str(url_date)
    args['for_date'] = datetime.strptime(str(url_date), '%Y-%m-%d').date()
    if isinstance(url_date, str):
        args['weekday'] = datetime.isoweekday(datetime.strptime(url_date, '%Y-%m-%d').date())
    else:
        args['weekday'] = datetime.isoweekday(url_date)
    seanss = Seans.objects.filter(date=str(url_date))
    a = b = []

    for seans_ in seanss:
        if seans_.film not in a:
            a.append(seans_.film)
            b.append(seans_)

    current_page = Paginator(b, 3)
    args['seanss'] = current_page.page(page_number)
    if len(b) == 0:
        args['net_seansov'] = True
    return render_to_response('test_film.html', args)
Example #39
0
from datetime import datetime
day = ['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday']
for i in range(input()):
	x = map(int,raw_input().split())
	d = ""
	for j in x:
		d += str(j)+'-'
	d = d[:-1]
	d += " 12:00:00"
	dt = datetime.strptime(d,'%d-%m-%Y %H:%M:%S')
	n = datetime.isoweekday(dt)
	print day[n%7]

Example #40
0
def is_weekday(date):
    assert(isinstance(date, datetime))
    if(datetime.isoweekday(date) >= 1 and datetime.isoweekday(date) <= 5):
        return True
    else:
        return False
def is_weekday(dt):
    weekday = datetime.isoweekday(dt)
    return 1 <= weekday <= 5
Example #42
0
  try:
    
    #Open  "scheduleTS.txt" file, which should contains 3 columns.
    #1st column is the day in week, 2nd is the time to reset the Set Point
    #3rd is the Set Point value to be reset to.
    fo = open( "scheduleTS.txt" );

    for line in fo.readlines():
        y = line.split()
        schedule.append(y)

    fo.close()

    #Store current date and time
    day = datetime.isoweekday(datetime.now())
    currTime = float(datetime.now().hour) + float(datetime.now().minute)/60

    currSP = findNow(schedule, day, currTime)
    if autoSP != currSP:
      #Reset the Auto Set Point when it needs to be changed
      autoSP = currSP    
      
      #Keep trying to push the updated autoSP to the Thermostat Arduino 
      #until a success confirmation received
      while Ar != "success EOF":
      
        try:
          Ar = arduino.telnetArduino("192.168.1.146","I"+autoSP)
        except Exception:
          pass