def test_admins_can_create_basic_incidents(mockdata, client, session): with current_app.test_request_context(): login_admin(client) date = datetime(2000, 5, 25, 1, 45) report_number = '42' address_form = LocationForm(street_name='AAAAA', cross_street1='BBBBB', city='FFFFF', state='IA', zip_code='03435') # These have to have a dropdown selected because if not, an empty Unicode string is sent, which does not mach the '' selector. link_form = LinkForm(link_type='video') license_plates_form = LicensePlateForm(state='AZ') form = IncidentForm(date_field=str(date.date()), time_field=str(date.time()), report_number=report_number, description='Something happened', department='1', address=address_form.data, links=[link_form.data], license_plates=[license_plates_form.data], officers=[]) data = process_form_data(form.data) rv = client.post(url_for('main.incident_api') + 'new', data=data, follow_redirects=True) assert rv.status_code == 200 assert 'created' in rv.data inc = Incident.query.filter_by(date=date).first() assert inc is not None
def obj_converter(self, data: dict) -> datetime: if not data: return None date = parser.parse(data["dateTime"]) return datetime.combine(date.date(), date.time(), tz.gettz(data["timeZone"]))
def test_admins_cannot_make_incidents_without_state(mockdata, client, session): with current_app.test_request_context(): login_admin(client) date = datetime(2000, 5, 25, 1, 45) report_number = '42' address_form = LocationForm(street_name='AAAAA', cross_street1='BBBBB', city='FFFFF', state='', zip_code='03435') ooid_forms = [ OOIdForm(ooid=officer.id) for officer in Officer.query.all()[:5] ] form = IncidentForm(date_field=str(date.date()), time_field=str(date.time()), report_number=report_number, description='Something happened', department='1', address=address_form.data, officers=ooid_forms) data = process_form_data(form.data) incident_count_before = Incident.query.count() rv = client.post(url_for('main.incident_api') + 'new', data=data, follow_redirects=True) assert rv.status_code == 200 assert 'Must select a state.' in rv.data assert incident_count_before == Incident.query.count()
def view_single_binary_signal(request, id): binaryuser = binary_accounts.objects.get(user=request.user) signals = BinarySignals.objects.get(id=id) binaryuser = binary_accounts.objects.get(user=request.user) date = dt.datetime.now() expired = [] valid = [] binarySignals = BinarySignals.objects.filter(posted_on__date=date) for signals in binarySignals: datenow = date.time() date_now_hours = datenow.hour * 60 date_now_min = datenow.minute full_min = date_now_hours + date_now_min expire_date = signals.expiration_time.time() expire_hour = expire_date.hour * 60 expire_min = expire_date.minute full_expire = expire_hour + expire_min if full_expire - full_min <= 1: expired.append(signals) else: valid.append(signals) context = { 'signals': signals, 'date': date, 'valid': valid, 'expired': expired, 'binaryuser': binaryuser, } #date difference------------------------------------------------------------- return render(request, 'single_binary.html', context)
def widget(self, date): widget = wd.Widget() now = date.time() hour = wd.Text( text=str(now.hour) + "h", font=wd.Font("AmericanTypewriter-Bold", 50), color=FOREGROUND, ) minutes = wd.DynamicDate(date=time(now.hour, 0, 0), style=wd.DATE_STYLE_RELATIVE, font=wd.Font("AmericanTypewriter", 17), color=FOREGROUND, padding=wd.PADDING_ALL) layouts = [widget.small_layout, widget.medium_layout] for layout in layouts: layout.add_vertical_spacer() layout.add_row([hour]) layout.add_row([minutes]) layout.set_background_color(BACKGROUND) return widget
def getinfo(request): if request.method == 'POST': form = CheckForm(request.POST) if form.is_valid(): user_city = form.cleaned_data['cities'] user_timeinterval = int(form.cleaned_data['times']) date = datetime.now() transfered_date = date + timedelta(hours=user_timeinterval) weekday = transfered_date.isoweekday() hour = date.hour + user_timeinterval pool_list = Pool.objects.filter(city=user_city) if hour >= 24: if weekday == 1: time_list = Timetable.objects.filter( pool__in=pool_list, day=7, start_time__gte=date.time(), end_time__lte=time( 23, 59, 59)) | Timetable.objects.filter( day=1, start_time__gte=time(0, 0, 0), end_time__lt=transfered_date.time()) else: time_list = Timetable.objects.filter( Q(pool__in=pool_list, day=weekday - 1, start_time__gte=date.time(), end_time__lte=time(23, 59, 59)) | Q(pool__in=pool_list, day=weekday, start_time__gte=time(0, 0, 0), end_time__lt=transfered_date.time())) else: time_list = Timetable.objects.filter( pool__in=pool_list, day=weekday, start_time__gte=date.time(), end_time__lt=transfered_date.time()) return render(request, 'swimapp/pool.html', { 'pool_list': pool_list, 'time_list': time_list }) else: form = CheckForm() return render(request, 'swimapp/index.html', {'form': form})
def dateString(date): """ Return a datetime as a nicely formatted string """ if date.time() == time.min: return date.strftime('%Y-%m-%d') else: return date.strftime('%Y-%m-%d %H:%M')
def get_creneau(date): """Déterminer si la perm en cours est celle du matin, du midi ou du soir""" hour = date.time().hour if hour >= 16 : return 'S' elif hour >= 11: return 'D' return 'M'
def end_hour(self): """ start hour + duration """ date = datetime.datetime.combine( datetime.date.today(), self.start_hour) + timedelta( seconds=self.webclass.duration.as_seconds()) return date.time()
def get_time_index(freq, start=None, end=None): if start is None: start = "1/1/2012 9:30AM" if end is None: end = "1/1/2012 4:00PM" ideal = DatetimeIndex(start=start, end=end, freq=freq) times = [date.time() for date in ideal] return TimeIndex(times)
def is_between_time(date, start_range, end_range): """Is date between time range.""" reference_time = date.time().replace(second=0, microsecond=0) for time in time_range(start_range, end_range): if reference_time == time: return True return False
def _parse_programme(self, element): data = self._parse_element(element) date = data['start'] return dict(name=data['title']['text'][:Programme.name.max_length], date=date.date(), time=date.time(), timestart=int(date.timestamp()), timestop=int(data['stop'].timestamp()), channel=data['channel'][:Programme.channel.max_length])
def createLogEntry(place, date, description): layout = BoxLayout(orientation='vertical') placeLabel = Label(text=place, size_hint_y=None, height=40) timeLabel = Label(text=date.time().strftime("%H:%M"), size_hint_y=None, height=40) trainingLabel = Label(text=description) layout.add_widget(placeLabel) layout.add_widget(timeLabel) layout.add_widget(trainingLabel) return layout
def from_date(date): if type(date) is not datetime: raise ValueError('Supplied date must be of type datetime.') if date < incept: raise ValueError('The calendar begins at 1792-09-22. ' 'You cannot convert a date earlier than this.') # Remove the time from the timestamp date_sans_time = datetime.combine(date, datetime.min.time()) diff = date_sans_time.timestamp() - incept.timestamp() return to_wending(int(round(diff / (24 * 60 * 60))), date.time())
def __get_date(self) -> list: """Get date of system Returns: list: [0]today aaaa-mm-dd, [1]time h:m:s:ms, [2]today_str dd-mm-aaaa """ date = datetime.now() today_str = date.strftime('%d-%m-%Y') today = date.date() time = date.time() return [today, time, today_str]
def scheduleHourFromDate(user, date): ''' Returns a date that has times between 8 and 20, depending on user hour preference, using the hour of the date passed :param user: a user class :param date: a date :return: the date with the time in the constraint ''' morning = range(8, 12) afternoon = range(12, 20) minutes = str(rnd.randrange(0, 59)) if user.hour_preference is None: if date.time() > datetime.strptime('20:00', '%H:%M').time(): return date - timedelta(hours=4) elif date.time() < datetime.strptime('8:00', '%H:%M').time(): return date + timedelta(hours=8) else: return date elif user.hour_preference == "0": if date.time() >= datetime.strptime('12:00', '%H:%M').time() or date.time() <= datetime.strptime('8:00', '%H:%M').time(): return datetime.strptime(str(rnd.choice(morning)) + ':' + minutes, '%H:%M') else: return date elif user.hour_preference == "1": if date.time() <= datetime.strptime('12:00', '%H:%M').time() or date.time() >= datetime.strptime('20:00', '%H:%M').time(): return datetime.strptime(str(rnd.choice(afternoon)) + ':' + minutes, '%H:%M') else: return date
def assign_time(self, start: str, increment: int): """ If a csv file does not include a date section, this method adds it. Accomplished by iterating over all rows and adding the date Expected input: 01/23/2021 12:30 (mm/dd/yyyy hh:mm) Use regex to extract date information to create a datetime object for easy time manipulation :param start: The starting date of the time series :type start: datetime :param increment: the time interval :type increment: int :return: void """ try: month_reg = r"^([0-9]{2})" # matches the month day_reg = r"\/([0-9]{2})\/" # matches the day year_reg = r"\/([0-9]{4})" # matches the year hour_reg = r"( [0-9]{2}):" # matches the hour minute_reg = r":([0-9]{2})" # matches the minute month = re.search(month_reg, start) # extracted month day = re.search(day_reg, start) # extracted day year = re.search(year_reg, start) # extracted year hour = re.search(hour_reg, start) # extracted hour minute = (re.search(minute_reg, start)) # extracted minute # datetime object for easy time manipulation over an interval date = datetime(year=int(year.group(1)), month=int(month.group(1)), day=int(day.group(1)), hour=int(hour.group(1)), minute=int(minute.group(1))) # create the missing columns in the dataframe # self.data['DATE (MM/DD/YYYY)'] = None # self.data['MST'] = None self.data.insert(0, "Date", None) self.data.insert(1, "Time", None) """ Assign each row data in the missing time and date columns. Increment time time by increment. .date() and .time() pull exactly what it sounds like """ for i in range(len(self.data)): self.data.at[i, self.data.columns[0]] = date.date() self.data.at[i, self.data.columns[1]] = date.time() date += timedelta(hours=int(increment)) except: print("Error!") print(self.data)
def check_availability(car): """ Function that take a car class and modify the availability of the car according to the pico y placa rules""" plate_num = int(car.plate[-1]) # Get the last number of the plate date = car.date # Get the date weekday = (date.weekday() + 1) * 2 # Get the number of the week day time = date.time() # Get the time restricted = [(weekday - 1), weekday % 10] # Create an interval of restrictions check_time = (time <= morning_end.time() and time >= morning_in.time()) or \ (time <= afternoon_end.time() and time >= afternoon_in.time()) # Boolean that verify the time if check_time and plate_num in restricted: car.availability = False else: car.availability = True
def test_admins_cannot_make_incidents_with_multiple_validation_errors(mockdata, client, session): with current_app.test_request_context(): login_admin(client) date = datetime(2000, 5, 25, 1, 45) report_number = '42' address_form = LocationForm( street_name='AAAAA', cross_street1='BBBBB', # no city given => 'This field is required.' city='', state='NY', # invalid ZIP code => 'Zip codes must have 5 digits.' zip_code='0343' ) # license plate number given, but no state selected => 'Must also select a state.' license_plate_form = LicensePlateForm(number='ABCDE', state='') ooid_forms = [OOIdForm(ooid=officer.id) for officer in Officer.query.all()[:5]] form = IncidentForm( # no date given => 'This field is required.' date_field='', time_field=str(date.time()), report_number=report_number, description='Something happened', # invalid department id => 'This field is required.' department='-1', address=address_form.data, license_plates=[license_plate_form.data], officers=ooid_forms ) data = process_form_data(form.data) incident_count_before = Incident.query.count() rv = client.post( url_for('main.incident_api') + 'new', data=data, follow_redirects=True ) assert rv.status_code == 200 assert 'Must also select a state.' in rv.data.decode('utf-8') assert 'Zip codes must have 5 digits.' in rv.data.decode('utf-8') assert rv.data.decode('utf-8').count('This field is required.') >= 3 assert incident_count_before == Incident.query.count()
def asof(self, date): """ Follows price is right rules. Will return the closest time that is equal or below. If time is after the last date, it will just return the date. """ testtime = date.time() last = None for time in self.times: if testtime == time: return date if testtime < time: # found spot break last = time # TODO should I anchor this to the last time? if last is None: return date new_date = datetime.combine(date.date(), last) return new_date
def view_today_signal(request): if Forex.objects.filter( user=request.user) and binary_accounts.objects.filter( user=request.user): forexuser = Forex.objects.get(user=request.user) binaryuser = binary_accounts.objects.get(user=request.user) date = dt.date.today() forexSignals = ForexSignals.objects.filter(posted_on__date=date) expired = [] valid = [] binarySignals = BinarySignals.objects.filter(posted_on__date=date) for signals in binarySignals: datenow = date.time() date_now_hours = datenow.hour * 60 date_now_min = datenow.minute full_min = date_now_hours + date_now_min expire_date = signals.expiration_time.time() expire_hour = expire_date.hour * 60 expire_min = expire_date.minute full_expire = expire_hour + expire_min if full_expire - full_min <= 1: expired.append(signals) else: valid.append(signals) context = { 'date': date, 'valid': binary, 'expired': binary, 'forexSignals': forexSignals, 'forexuser': forexuser, 'binaryuser': binaryuser, } return render(request, 'signals.html', context) elif Forex.objects.filter(user=request.user): date = dt.date.today() forexuser = Forex.objects.get(user=request.user) forexSignals = ForexSignals.objects.filter(posted_on__date=date) context = { 'forexuser': forexuser, 'date': date, 'forexSignals': forexSignals, } return render(request, 'signals.html', context) #error-------------------------------------------- elif binary_accounts.objects.filter(user=request.user): date = dt.datetime.now() date2 = datetime.combine(date.today(), datetime.min.time()) binaryuser = binary_accounts.objects.get(user=request.user) expired = [] valid = [] binarySignals = BinarySignals.objects.filter(posted_on__date=date) for signals in binarySignals: datenow = date.time() date_now_hours = datenow.hour * 60 date_now_min = datenow.minute full_min = date_now_hours + date_now_min expire_date = signals.expiration_time.time() expire_hour = expire_date.hour * 60 expire_min = expire_date.minute full_expire = expire_hour + expire_min if full_expire - full_min <= 1: expired.append(signals) else: valid.append(signals) context = { 'binaryuser': binaryuser, 'date': date, 'expired': expired, 'valid': valid, } return render(request, 'signals.html', context) else: return redirect('home')
POSTTITLE = "blah" POSTDIR = "_post" CURRENTDIR = os.getcwd() POSTPATH = CURRENTDIR + "\\" + POSTDIR + "\\" + POSTTITLE CONTENT = ''' --- layout: post title: "{}" excerpt: date: {} categories: post author: luke_griffith --- ''' date = datetime.now() time = date.time() datestring = "{}-{}-{} {}:{}:{}".format(date.year, date.month, date.day, time.hour, time.minute, time.second) Formatted = CONTENT.format(POSTTITLE, datestring) open(POSTPATH)
def day_start(date): t = date.time().replace(hour=0,minute=1) return datetime.combine(date.date(), t)
def day_end(date): t = date.time().replace(hour=23,minute=59) return datetime.combine(date.date(), t)
def get_start_end(date_times): """ Given a sorted list of datetimes, calculate the start and end times of images""" times = sorted(date.time() for date in date_times) min, max = times[0], times[-1] return min, max
def time_getter(): return date.time()