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()
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
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
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
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')
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')
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')
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')
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]
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('Новых постов нет')
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
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('Рассылка успешна отправлена')
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
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
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
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
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
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__
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__
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'
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)
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 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
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, )
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)
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}')
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)
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
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"]
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
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
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 ''
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)
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]
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
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