def get_current_events(calendar: Calendar, limit: int = 5) -> list: """Get upcoming events from a calendar (ICS) object. :param calendar: The calendar object :param limit: Count of events :return: List of upcoming events """ i: int = 0 events: list = [] for event in calendar.timeline.start_after(timezone.now()): # Check for limit if i >= limit: break i += 1 if event.all_day: # The last day in all day events is excluded event.end -= timedelta(days=1) # Create formatted dates and times for begin and end begin_date_formatted = formats.date_format(event.begin) end_date_formatted = formats.date_format(event.end) begin_time_formatted = formats.time_format(event.begin.time()) end_time_formatted = formats.time_format(event.end.time()) if event.begin.date() == event.end.date(): # Event is only on one day formatted = begin_date_formatted if not event.all_day: # No all day event formatted += f" {begin_time_formatted}" if event.begin.time != event.end.time(): # Event has an end time formatted += f" – {end_time_formatted}" else: # Event is on multiple days if event.all_day: # Event is all day formatted = f"{begin_date_formatted} – {end_date_formatted}" else: # Event has begin and end times formatted = ( f"{begin_date_formatted} {begin_time_formatted}" f" – {end_date_formatted} {end_time_formatted}" ) events.append( { "name": event.name, "begin_timestamp": event.begin.timestamp, "end_timestamp": event.end.timestamp, "date_formatted": formatted, } ) return events
def get_tables(self): tables = [] # notifications.sentmessage_set.first().emailstatus_set.first().latest_statuses will be a list notifications = self.tournament.bulknotification_set.select_related( 'round', ).prefetch_related(Prefetch( 'sentmessage_set', queryset=SentMessage.objects.select_related( 'recipient', ).prefetch_related(Prefetch( 'emailstatus_set', queryset=EmailStatus.objects.order_by('-timestamp'), to_attr='statuses', )), )) for notification in notifications: if notification.round is not None: subtitle = notification.round.name else: subtitle = _("@ %s") % formats.time_format(timezone.localtime(notification.timestamp), use_l10n=True) table = TabbycatTableBuilder(view=self, title=notification.get_event_display().capitalize(), subtitle=subtitle) emails_recipient = [] emails_addresses = [] emails_status = [] emails_time = [] for sentmessage in notification.sentmessage_set.all(): emails_recipient.append(sentmessage.recipient.name if sentmessage.recipient else self.UNKNOWN_RECIPIENT_CELL) emails_addresses.append(sentmessage.email or self.UNKNOWN_RECIPIENT_CELL) if len(sentmessage.statuses) > 0: latest_status = sentmessage.statuses[0] # already ordered status_cell = { "text": latest_status.get_event_display(), "class": self._get_event_class(latest_status.event), "popover": { "title": _("Timeline"), "content": self._create_status_timeline(sentmessage.statuses), }, } emails_status.append(status_cell) emails_time.append(formats.time_format(timezone.localtime(latest_status.timestamp), use_l10n=True)) else: emails_status.append(self.NA_CELL) emails_time.append(self.NA_CELL) table.add_column({'key': 'name', 'tooltip': _("Participant"), 'icon': 'user'}, emails_recipient) table.add_column({'key': 'email', 'tooltip': _("Email address"), 'icon': 'mail'}, emails_addresses) table.add_column({'key': 'name', 'title': _("Status")}, emails_status) table.add_column({'key': 'name', 'title': _("Time")}, emails_time) tables.append(table) return tables
def get_ship_date_label(self, e_date, e_mission): start = e_mission.starts end = e_mission.ends date_str = date_format(e_date) start_str = time_format(start) end_str = time_format(end) return "%(date)s, %(start)s - %(end)s" % { 'date': date_str, 'start': start_str, 'end': end_str}
def get_ship_date_label(self, e_date, e_mission): start = e_mission.starts end = e_mission.ends date_str = date_format(e_date) start_str = time_format(start) end_str = time_format(end) return "%(date)s, %(start)s - %(end)s" % { 'date': date_str, 'start': start_str, 'end': end_str }
def compute_schedule(self, organization_id): celery_id = self.request.id start = timezone.localtime(timezone.now()) count = Organization.objects \ .filter(pk=organization_id, celery_task_id=None) \ .update(celery_task_id=celery_id, celery_start=start, message=_('Computation started at %(d)s, %(t)s') % {'d': date_format(start, use_l10n=True), 't': time_format(start, use_l10n=True)}) if count == 0: return organization = Organization.objects.get(pk=organization_id, celery_task_id=celery_id) schedule_run = ScheduleRun(organization=organization, celery_task_id=celery_id, celery_start=start) schedule_run.save() scheduler = Scheduler(organization) try: result_list = scheduler.solve(verbose=False, max_compute_time=organization.max_compute_time, schedule_run=schedule_run) result_dict = scheduler.result_by_agent(result_list) end = timezone.localtime(timezone.now()) selected = bool(result_dict) if selected: apply_schedule(organization_id, result_dict) msg = _('Computation finished at %(d)s, %(t)s') % {'d': date_format(end, use_l10n=True), 't': time_format(end, use_l10n=True)} balancing = scheduler.compute_balancing(result_list) if balancing: balances = _(', ').join(['%s: %s' % (x[0], x[2]) for x in balancing.values()]) schedule_msg = _('Balancing: %(b)s') % {'b': balances} else: schedule_msg = _('No balance required.') ScheduleRun.objects.filter(organization__id=organization_id).update(is_selected=False) else: schedule_msg = _('Unable to find a solution') msg = _('Unable to find a solution, maybe you should remove some constraints. ' 'Computation finished at %(d)s, %(t)s') % {'d': date_format(end, use_l10n=True), 't': time_format(end, use_l10n=True)} serialized_result_dict = json.dumps(result_dict, cls=SetJSONEncoder) ScheduleRun.objects.filter(pk=schedule_run.pk).update(celery_end=end, process_id=None, status=bool(result_dict), result_dict=serialized_result_dict, is_selected=selected, message=schedule_msg) except subprocess.TimeoutExpired: end = timezone.localtime(timezone.now()) msg = _('%(d)s, %(t)s: Unable to find a schedule in the allowed time.') % \ {'d': date_format(end, use_l10n=True), 't': time_format(end, use_l10n=True)} ScheduleRun.objects.filter(pk=schedule_run.pk).update(celery_end=end, process_id=None, status=False) except Exception as e: end = timezone.localtime(timezone.now()) msg = _('%(d)s, %(t)s: Unable to compute a schedule %(msg)s') % \ {'msg': e, 'd': date_format(end, use_l10n=True), 't': time_format(end, use_l10n=True)} ScheduleRun.objects.filter(pk=schedule_run.pk).update(celery_end=end, process_id=None, status=False) Organization.objects.filter(pk=organization_id, celery_task_id=celery_id) \ .update(celery_task_id=None, message=msg)
def _format_label(duration, start_time, end_time): """ Formats a time block label. :param duration: Duration. :param start_time: Start time. :param end_time: End time. :return: Formatted string with duration, start, and end time. """ return 'Asleep {} ({} to {})'.format( duration_string(duration), formats.time_format(start_time, 'TIME_FORMAT'), formats.time_format(end_time, 'TIME_FORMAT'))
def time(value, arg=None): """Formats a time according to the given format.""" if value in (None, u''): return u'' if arg is None: arg = settings.TIME_FORMAT try: return time_format(value, arg) except AttributeError: try: return time_format(value, arg) except AttributeError: return ''
def test_use_24_hour_time_format_en(self): field = DateTimeField() supported_custom_examples = [ '10/25/2006 2:30:59', '10/25/2006 2:30', '10/25/2006 14:30:59', '10/25/2006 14:30', ] for example in supported_custom_examples: try: result = field.to_python(example) self.assertIsInstance(result, datetime.datetime) except ValidationError: self.fail('Format of "{}" not recognized!'.format(example)) with self.assertRaises(ValidationError): field.to_python('invalid date string!') dt = datetime.datetime(year=2011, month=11, day=4, hour=23, minute=5, second=59) self.assertEqual( date_format(dt, 'DATETIME_FORMAT'), 'Nov. 4, 2011, 23:05:59') dt = datetime.datetime(year=2011, month=11, day=4, hour=2, minute=5, second=59) self.assertEqual( date_format(dt, 'SHORT_DATETIME_FORMAT'), '11/04/2011 2:05:59') t = datetime.time(hour=16, minute=2, second=25) self.assertEqual(time_format(t), '16:02:25')
def test_date_changed(self): event = EventFactory( title='Test Title', status='open', location=GeolocationFactory.create(position=Point(20.0, 10.0)), start=now() + timedelta(days=4), ) ParticipantFactory.create_batch(3, activity=event, status='new') ParticipantFactory.create(activity=event, status='withdrawn') mail.outbox = [] event.start = event.start + timedelta(days=1) event.save() recipients = [message.to[0] for message in mail.outbox] self.assertTrue( event.local_timezone_name in mail.outbox[0].body ) self.assertTrue( formats.time_format(event.local_start) in mail.outbox[0].body ) for participant in event.contributions.instance_of(Participant): if participant.status == 'new': self.assertTrue(participant.user.email in recipients) else: self.assertFalse(participant.user.email in recipients)
def publication_date_time(value): """ Alternative implementation to the built-in `date` template filter which also accepts the date string in iso-8601 as passed in by the REST serializers. """ if value in (None, ''): return '' if not (isinstance(value, datetime) or isinstance(value, datetime_date)): value = from_iso8601(value) if is_naive(value): value = datetime_to_local(value) time_str = formats.time_format(value, 'H:i') format_pattern = '<span class="time">{}</span><span class="date"> — {}</span>' if value.date() == datetime.now().date(): result = (format_pattern).format(time_str, _('Today')) elif value.year == datetime.today().year: result = (format_pattern).format(time_str, dateformat.format(value, 'd E')) else: result = (format_pattern).format(time_str, dateformat.format(value, 'd E Y')) return result
def apply_schedule_run(request, schedule_run_pk): obj = get_object_or_404(ScheduleRun, pk=schedule_run_pk) organization_id = obj.organization_id get_object_or_404(Organization.query(request), pk=organization_id) # only used to check rights # required to get the URL of the "administration change page" # noinspection PyProtectedMember model_admin = admin.site._registry[Organization] assert isinstance(model_admin, OrganizationAdmin) # noinspection PyProtectedMember opts = model_admin.model._meta result_dict = json.loads(obj.result_dict) end = obj.celery_end d = '%(d)s, %(t)s' % {'d': date_format(end, use_l10n=True), 't': time_format(end, use_l10n=True)} if not result_dict: messages.error(request, _('Unable to apply the invalid schedule "%(d)s".') % {'d': d}) else: try: apply_schedule(organization_id, result_dict) Organization.objects.filter(pk=organization_id).update(current_schedule=obj.pk) ScheduleRun.objects.filter(organization__id=organization_id).exclude(pk=schedule_run_pk)\ .update(is_selected=False) ScheduleRun.objects.filter(pk=schedule_run_pk).update(is_selected=True) messages.success(request, _('Schedule "%(d)s" has been applied.') % {'d': d}) except ValueError as e: messages.error(request, _('Unable to apply the invalid schedule "%(d)s": %(e)s.') % {'d': d, 'e': e}) new_url = reverse('admin:%s_%s_change' % (opts.app_label, opts.model_name), args=(quote(organization_id),), current_app=model_admin.admin_site.name) return HttpResponseRedirect(new_url)
def values(self): """ Returns a list of values for this field for this instance. It's a list so we can accomodate many-to-many fields. """ # This import is deliberately inside the function because it causes # some settings to be imported, and we don't want to do that at the # module level. if self.field.rel: if isinstance(self.field.rel, models.ManyToOneRel): objs = getattr(self.instance.instance, self.field.name) elif isinstance(self.field.rel, models.ManyToManyRel): # ManyToManyRel return list(getattr(self.instance.instance, self.field.name).all()) elif self.field.choices: objs = dict(self.field.choices).get(self.raw_value, EMPTY_VALUE) elif isinstance(self.field, models.DateField) or isinstance(self.field, models.TimeField): if self.raw_value: if isinstance(self.field, models.DateTimeField): objs = capfirst(formats.date_format(self.raw_value, 'DATETIME_FORMAT')) elif isinstance(self.field, models.TimeField): objs = capfirst(formats.time_format(self.raw_value, 'TIME_FORMAT')) else: objs = capfirst(formats.date_format(self.raw_value, 'DATE_FORMAT')) else: objs = EMPTY_VALUE elif isinstance(self.field, models.BooleanField) or isinstance(self.field, models.NullBooleanField): objs = {True: 'Yes', False: 'No', None: 'Unknown'}[self.raw_value] else: objs = self.raw_value return [objs]
def nicevalue(value): if isinstance(value,datetime): return '%s %s' % (date_format(value.date()),time_format(value.time())) elif isinstance(value,date): return date_format(value) else: return value
def _command_buatagenda(chat_id, arg, **kwargs): args = arg.split('\n', maxsplit=1) if len(args) != 2: return '''\ /buatagenda <WAKTU>[<ZONA WAKTU>]↩️ <JUDUL AGENDA>↩️ [<DESKRIPSI TAMBAHAN>] Jika zona waktu tidak ditentukan, dianggap +0700, wakni WIB. Contoh: /buatagenda 31-12-2016 16.00 Rapat Akhir Tahun (format Indonesia) /buatagenda 2016-12-31 16:00 Rapat Akhir Tahun (format waktu ISO) /buatagenda 31-12-2016 16.00+0900 Rapat Akhir Tahun (zona WIT) Catatan tambahan: Bawa konsumsi masing-masing''' arg_time, arg_text = args t = parse_date_time(arg_time.strip()) if not t: return 'Maaf, format waktunya salah, ane nggak ngerti.' reminder_t = (t.replace(hour=21, minute=0, second=0) - timedelta(days=1)).astimezone(timezone.UTC()) message = '📅 %s ⌚ %s\n✒ %s' % (date_format(t), time_format(t), arg_text) try: Reminder.objects.create(year=reminder_t.year, month=reminder_t.month, mday=reminder_t.day, hour=reminder_t.hour, message=message, subscriber_id=chat_id, type=Reminder.EVENT) return 'Agenda ditambahkan.' except IntegrityError: return 'Afwan, saat ini agenda cuma dapat digunakan di dalam grup.'
def get_simple_display_date(self): tz = timezone.get_current_timezone() start_time = self.start_time.astimezone(tz) return _("le {date} à {time}").format( date=formats.date_format(start_time, "DATE_FORMAT"), time=formats.time_format(start_time, "TIME_FORMAT"), )
def test_l10n_disabled(self): """ Catalan locale with format i18n disabled translations will be used, but not formats """ settings.USE_L10N = False activate('ca') try: self.assertEqual('N j, Y', get_format('DATE_FORMAT')) self.assertEqual(0, get_format('FIRST_DAY_OF_WEEK')) self.assertEqual('.', get_format('DECIMAL_SEPARATOR')) self.assertEqual(u'10:15 a.m.', time_format(self.t)) self.assertEqual(u'des. 31, 2009', date_format(self.d)) self.assertEqual(u'desembre 2009', date_format(self.d, 'YEAR_MONTH_FORMAT')) self.assertEqual(u'12/31/2009 8:50 p.m.', date_format(self.dt, 'SHORT_DATETIME_FORMAT')) self.assertEqual('No localizable', localize('No localizable')) self.assertEqual(decimal.Decimal('66666.666'), localize(self.n)) self.assertEqual(99999.999, localize(self.f)) self.assertEqual(datetime.date(2009, 12, 31), localize(self.d)) self.assertEqual(datetime.datetime(2009, 12, 31, 20, 50), localize(self.dt)) self.assertEqual(u'66666.666', Template('{{ n }}').render(self.ctxt)) self.assertEqual(u'99999.999', Template('{{ f }}').render(self.ctxt)) self.assertEqual(u'2009-12-31', Template('{{ d }}').render(self.ctxt)) self.assertEqual(u'2009-12-31 20:50:00', Template('{{ dt }}').render(self.ctxt)) self.assertEqual(u'66666.67', Template('{{ n|floatformat:2 }}').render(self.ctxt)) self.assertEqual(u'100000.0', Template('{{ f|floatformat }}').render(self.ctxt)) self.assertEqual(u'10:15 a.m.', Template('{{ t|time:"TIME_FORMAT" }}').render(self.ctxt)) self.assertEqual(u'12/31/2009', Template('{{ d|date:"SHORT_DATE_FORMAT" }}').render(self.ctxt)) self.assertEqual(u'12/31/2009 8:50 p.m.', Template('{{ dt|date:"SHORT_DATETIME_FORMAT" }}').render(self.ctxt)) form = I18nForm({ 'decimal_field': u'66666,666', 'float_field': u'99999,999', 'date_field': u'31/12/2009', 'datetime_field': u'31/12/2009 20:50', 'time_field': u'20:50', 'integer_field': u'1.234', }) self.assertEqual(False, form.is_valid()) self.assertEqual([u'Introdu\xefu un n\xfamero.'], form.errors['float_field']) self.assertEqual([u'Introdu\xefu un n\xfamero.'], form.errors['decimal_field']) self.assertEqual([u'Introdu\xefu una data v\xe0lida.'], form.errors['date_field']) self.assertEqual([u'Introdu\xefu una data/hora v\xe0lides.'], form.errors['datetime_field']) self.assertEqual([u'Introdu\xefu un n\xfamero sencer.'], form.errors['integer_field']) form2 = SelectDateForm({ 'date_field_month': u'12', 'date_field_day': u'31', 'date_field_year': u'2009' }) self.assertEqual(True, form2.is_valid()) self.assertEqual(datetime.date(2009, 12, 31), form2.cleaned_data['date_field']) self.assertEqual( u'<select name="mydate_month" id="id_mydate_month">\n<option value="1">gener</option>\n<option value="2">febrer</option>\n<option value="3">mar\xe7</option>\n<option value="4">abril</option>\n<option value="5">maig</option>\n<option value="6">juny</option>\n<option value="7">juliol</option>\n<option value="8">agost</option>\n<option value="9">setembre</option>\n<option value="10">octubre</option>\n<option value="11">novembre</option>\n<option value="12" selected="selected">desembre</option>\n</select>\n<select name="mydate_day" id="id_mydate_day">\n<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="4">4</option>\n<option value="5">5</option>\n<option value="6">6</option>\n<option value="7">7</option>\n<option value="8">8</option>\n<option value="9">9</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31" selected="selected">31</option>\n</select>\n<select name="mydate_year" id="id_mydate_year">\n<option value="2009" selected="selected">2009</option>\n<option value="2010">2010</option>\n<option value="2011">2011</option>\n<option value="2012">2012</option>\n<option value="2013">2013</option>\n<option value="2014">2014</option>\n<option value="2015">2015</option>\n<option value="2016">2016</option>\n<option value="2017">2017</option>\n<option value="2018">2018</option>\n</select>', SelectDateWidget(years=range(2009, 2019)).render('mydate', datetime.date(2009, 12, 31)) ) finally: deactivate()
def log_date_privacy(log_date, threshold_days): """Removes time from datetimes older than threshold_days days.""" now = timezone.now() delta = now - log_date if delta.days >= threshold_days: return formats.date_format(log_date, "SHORT_DATE_FORMAT") else: return (formats.date_format(log_date, "SHORT_DATE_FORMAT") + ' ' + formats.time_format(log_date, settings.TIME_WITH_SECONDS_FORMAT))
def _timeFormat(when, formatStr): """ Format a single time, e.g. 10am """ if formatStr: retval = _Formatter(when).format(formatStr) else: retval = formats.time_format(when) return retval
def get_story(self): story = [ Paragraph(f"{self.event.type}: {self.event.title}", self.style["Heading1"]), Spacer(height=0.5 * cm, width=19 * cm), ] tz = pytz.timezone(settings.TIME_ZONE) start_time = self.event.get_start_time().astimezone(tz) end_time = self.event.get_end_time().astimezone(tz) end_date = ( f"- {formats.date_format(end_time, 'l')}, {formats.date_format(end_time, 'SHORT_DATE_FORMAT')}" if end_time.date() > start_time.date() else "") event_date = f"{formats.date_format(start_time, 'l')}, {formats.date_format(start_time, 'SHORT_DATE_FORMAT')} {end_date}" data = [ [_("Location"), self.event.location], [_("Date"), event_date], [_("Description"), Paragraph(self.event.description)], ] table = Table(data, colWidths=[6 * cm, 13 * cm]) table.setStyle([("VALIGN", (0, -1), (-1, -1), "TOP")]) story.append(table) for shift in self.event.shifts.all(): story.append(Spacer(height=1 * cm, width=19 * cm)) story.append( Paragraph(shift.get_start_end_time_display(), self.style["Heading2"])) data = [ [ _("Meeting time"), formats.time_format(shift.meeting_time.astimezone(tz)) ], ] + [[ Paragraph(key), Paragraph(value) ] for key, value in shift.signup_method.get_signup_info().items()] story.append(Table(data, colWidths=[6 * cm, 13 * cm])) if participation_info := shift.signup_method.get_participation_display( ): story.append( Paragraph(_("Participants"), self.style["Heading3"])) col_count = len(participation_info[0]) table = Table( [[[Paragraph(entry)] for entry in participation] for participation in participation_info], hAlign="LEFT", colWidths=[185 * mm / col_count] * col_count, ) table.setStyle( TableStyle([ ("INNERGRID", (0, 0), (-1, -1), 0.25, colors.black), ("BOX", (0, 0), (-1, -1), 0.25, colors.black), ])) story.append(table)
def test_l10n_disabled(self): """ Catalan locale with format i18n disabled translations will be used, but not formats """ settings.USE_L10N = False activate("ca") try: self.assertEqual("N j, Y", get_format("DATE_FORMAT")) self.assertEqual(0, get_format("FIRST_DAY_OF_WEEK")) self.assertEqual(".", get_format("DECIMAL_SEPARATOR")) self.assertEqual(u"10:15 a.m.", time_format(self.t)) self.assertEqual(u"des. 31, 2009", date_format(self.d)) self.assertEqual(u"desembre 2009", date_format(self.d, "YEAR_MONTH_FORMAT")) self.assertEqual(u"12/31/2009 8:50 p.m.", date_format(self.dt, "SHORT_DATETIME_FORMAT")) self.assertEqual("No localizable", localize("No localizable")) self.assertEqual(decimal.Decimal("66666.666"), localize(self.n)) self.assertEqual(99999.999, localize(self.f)) self.assertEqual(datetime.date(2009, 12, 31), localize(self.d)) self.assertEqual(datetime.datetime(2009, 12, 31, 20, 50), localize(self.dt)) self.assertEqual(u"66666.666", Template("{{ n }}").render(self.ctxt)) self.assertEqual(u"99999.999", Template("{{ f }}").render(self.ctxt)) self.assertEqual(u"2009-12-31", Template("{{ d }}").render(self.ctxt)) self.assertEqual(u"2009-12-31 20:50:00", Template("{{ dt }}").render(self.ctxt)) self.assertEqual(u"66666.67", Template("{{ n|floatformat:2 }}").render(self.ctxt)) self.assertEqual(u"100000.0", Template("{{ f|floatformat }}").render(self.ctxt)) self.assertEqual(u"10:15 a.m.", Template('{{ t|time:"TIME_FORMAT" }}').render(self.ctxt)) self.assertEqual(u"12/31/2009", Template('{{ d|date:"SHORT_DATE_FORMAT" }}').render(self.ctxt)) self.assertEqual( u"12/31/2009 8:50 p.m.", Template('{{ dt|date:"SHORT_DATETIME_FORMAT" }}').render(self.ctxt) ) form = I18nForm( { "decimal_field": u"66666,666", "float_field": u"99999,999", "date_field": u"31/12/2009", "datetime_field": u"31/12/2009 20:50", "time_field": u"20:50", } ) self.assertEqual(False, form.is_valid()) self.assertEqual([u"Introdu\xefu un n\xfamero."], form.errors["float_field"]) self.assertEqual([u"Introdu\xefu un n\xfamero."], form.errors["decimal_field"]) self.assertEqual([u"Introdu\xefu una data v\xe0lida."], form.errors["date_field"]) self.assertEqual([u"Introdu\xefu una data/hora v\xe0lides."], form.errors["datetime_field"]) form2 = SelectDateForm({"date_field_month": u"12", "date_field_day": u"31", "date_field_year": u"2009"}) self.assertEqual(True, form2.is_valid()) self.assertEqual(datetime.date(2009, 12, 31), form2.cleaned_data["date_field"]) self.assertEqual( u'<select name="mydate_month" id="id_mydate_month">\n<option value="1">gener</option>\n<option value="2">febrer</option>\n<option value="3">mar\xe7</option>\n<option value="4">abril</option>\n<option value="5">maig</option>\n<option value="6">juny</option>\n<option value="7">juliol</option>\n<option value="8">agost</option>\n<option value="9">setembre</option>\n<option value="10">octubre</option>\n<option value="11">novembre</option>\n<option value="12" selected="selected">desembre</option>\n</select>\n<select name="mydate_day" id="id_mydate_day">\n<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="4">4</option>\n<option value="5">5</option>\n<option value="6">6</option>\n<option value="7">7</option>\n<option value="8">8</option>\n<option value="9">9</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31" selected="selected">31</option>\n</select>\n<select name="mydate_year" id="id_mydate_year">\n<option value="2009" selected="selected">2009</option>\n<option value="2010">2010</option>\n<option value="2011">2011</option>\n<option value="2012">2012</option>\n<option value="2013">2013</option>\n<option value="2014">2014</option>\n<option value="2015">2015</option>\n<option value="2016">2016</option>\n<option value="2017">2017</option>\n<option value="2018">2018</option>\n</select>', SelectDateWidget(years=range(2009, 2019)).render("mydate", datetime.date(2009, 12, 31)), ) finally: deactivate()
def humantime(time): formatting = 'H:i' try: formatted = formats.time_format(time, formatting) except AttributeError: try: formatted = time_format(time, formatting) except AttributeError: formatted = '' return _("{date} at {time}").format(date=humandate(time), time=formatted)
def get_times_list(self): return '{start}{separator}{end}'.format( start = (date_format(datetime.combine(self.start_date, self.start_time), 'SHORT_DATETIME_FORMAT') if self.start_time else date_format(self.start_date, 'SHORT_DATE_FORMAT')), separator = ' - ' if self.start_date != self.end_date or self.end_time is not None else '', end = ((time_format(self.end_time, 'TIME_FORMAT') if self.end_time else '') if self.start_date == self.end_date else (date_format(datetime.combine(self.end_date, self.end_time), 'SHORT_DATETIME_FORMAT') if self.end_time else date_format(self.end_date, 'SHORT_DATE_FORMAT'))), )
def get_display_date(self): tz = timezone.get_current_timezone() start_time = self.start_time.astimezone(tz) end_time = self.end_time.astimezone(tz) if start_time.date() == end_time.date(): date = formats.date_format(start_time, "DATE_FORMAT") return _("le {date}, de {start_hour} à {end_hour}").format( date=date, start_hour=formats.time_format(start_time, "TIME_FORMAT"), end_hour=formats.time_format(end_time, "TIME_FORMAT"), ) return _("du {start_date}, {start_time} au {end_date}, {end_time}").format( start_date=formats.date_format(start_time, "DATE_FORMAT"), start_time=formats.date_format(start_time, "TIME_FORMAT"), end_date=formats.date_format(end_time, "DATE_FORMAT"), end_time=formats.date_format(end_time, "TIME_FORMAT"), )
def log_date_privacy(log_date, threshold_days): """Removes time from datetimes older than threshold_days days.""" now = timezone.now() delta = now - log_date if delta.days >= threshold_days: return formats.date_format(log_date, "SHORT_DATE_FORMAT") else: return ( formats.date_format(log_date, "SHORT_DATE_FORMAT") + ' ' + formats.time_format(log_date, settings.TIME_WITH_SECONDS_FORMAT))
def get_comments(request, post_id): post = get_object_or_404(Post, pk=post_id) return_json = [] for comment in post.comment_set.all(): comment_json = {} comment_json['text'] = comment.text comment_json['user'] = comment.user.username comment_json['date'] = "%s %s" % (formats.date_format(comment.pub_date), formats.time_format(comment.pub_date)) return_json.append(comment_json) return HttpResponse(json.dumps(return_json), content_type='application/json')
def _create_status_timeline(self, status): statuses = [] for s in status: text = _("%(status)s @ %(time)s") % { 'status': s.get_event_display(), 'time': formats.time_format(timezone.localtime(s.timestamp), use_l10n=True), } statuses.append({ 'text': '<span class="%s">%s</span>' % (self._get_event_class(s.event), text), }) return statuses
def time(value, arg=None): """Format a time according to the given format.""" if value in (None, ''): return '' try: return formats.time_format(value, arg) except (AttributeError, TypeError): try: return time_format(value, arg) except (AttributeError, TypeError): return ''
def time(value, arg=None): """Formats a time according to the given format.""" if value in (None, ''): return '' try: return formats.time_format(value, arg) except (AttributeError, TypeError): try: return time_format(value, arg) except (AttributeError, TypeError): return ''
def time(value, arg=None): """Formats a time according to the given format.""" if value in (None, ''): return '' if arg is None: arg = settings.TIME_FORMAT try: return formats.time_format(value, arg) except AttributeError: try: return time_format(value, arg) except AttributeError: return ''
def get_display_date(self): start_time = self.local_start_time end_time = self.local_end_time if start_time.date() == end_time.date(): date = formats.date_format(start_time, "DATE_FORMAT") return _("le {date}, de {start_hour} à {end_hour} ({tz})").format( date=date, start_hour=formats.time_format(start_time, "TIME_FORMAT"), end_hour=formats.time_format(end_time, "TIME_FORMAT"), tz=self.timezone, ) return _( "du {start_date}, {start_time} au {end_date}, {end_time} ({tz})" ).format( start_date=formats.date_format(start_time, "DATE_FORMAT"), start_time=formats.date_format(start_time, "TIME_FORMAT"), end_date=formats.date_format(end_time, "DATE_FORMAT"), end_time=formats.date_format(end_time, "TIME_FORMAT"), tz=self.timezone, )
def time(value, arg=None): """Formats a time according to the given format.""" from django.utils import dateformat if value in (None, u''): return u'' if arg is None: arg = settings.TIME_FORMAT try: return formats.time_format(value, arg) except AttributeError: try: return dateformat.time_format(value, arg) except AttributeError: return ''
def event_date(self): return '{start}{separator}{end}'.format( start=(date_format( datetime.combine(self.start_date, self.start_time), 'SHORT_DATETIME_FORMAT') if self.start_time else date_format( self.start_date, 'SHORT_DATE_FORMAT')), separator=' - ' if self.start_date != self.end_date or self.end_time is not None else '', end=((time_format(self.end_time, 'TIME_FORMAT') if self.end_time else '') if self.start_date == self.end_date else (date_format(datetime.combine(self.end_date, self.end_time), 'SHORT_DATETIME_FORMAT') if self.end_time else date_format(self.end_date, 'SHORT_DATE_FORMAT'))), )
def get_time_programed(self): string = '' if self.date_programed not in (None, ''): try: hour, minute = self.date_programed.hour, self.date_programed.minute except: date, time = self.date_programed.split(' ') hour, minute = time.split(':') finally: string = str( format( formats.time_format( datetime.time(int(hour), int(minute)), "h:i A"))) return string
def time(value, arg=None): """Formats a time according to the given format.""" if value is None or isinstance(value, Undefined): return u'' from django.conf import settings from django.utils import formats from django.utils.dateformat import time_format if arg is None: arg = settings.TIME_FORMAT try: return formats.time_format(value, arg) except AttributeError: try: return time_format(value, arg) except AttributeError: return ''
def _death_time(self, obj): remaining_life = obj.death_time - timezone.now() percentage_remaining = remaining_life / JobLifeLength.objects.get( ).life_length if percentage_remaining < 0.2: color = "red" elif percentage_remaining < 0.5: color = "orange" elif percentage_remaining < 0.7: color = "#b3b300" else: color = "green" return format_html(u'<span style="color:{}">{}, {}</span>'.format( color, formats.date_format(obj.death_time), formats.time_format(obj.death_time), ))
def time(value, arg=None): """ Alternative implementation to the built-in `time` template filter which also accepts the date string in iso-8601 as passed in by the REST serializers. """ if value in (None, ''): return '' if not isinstance(value, datetime): value = from_iso8601(value) if arg is None: arg = settings.TIME_FORMAT try: return formats.time_format(value, arg) except AttributeError: try: return time_format(value, arg) except AttributeError: return ''
def get_local_format(_obj) : # Imports from django.conf import settings from django.utils.formats import date_format from django.utils.formats import time_format import datetime output = _obj if _obj and settings.USE_L10N == True : if isinstance(_obj, datetime.datetime) : output = date_format(_obj, 'd/m/Y H:i:s') elif isinstance(_obj, datetime.date) : output = date_format(_obj, 'd/m/Y') elif isinstance(_obj, datetime.time) : output = time_format(_obj, 'H:M:S') return output
def kill_schedule(self, celery_task_id): # noinspection PyUnusedLocal self = self app.control.revoke(celery_task_id) all_process_ids = [] for values in ScheduleRun.objects.filter(celery_task_id=celery_task_id).values_list('process_id'): if values[0]: # noinspection PyBroadException try: os.kill(values[0], signal.SIGKILL) all_process_ids.append(values[0]) except: pass end = timezone.localtime(timezone.now()) ScheduleRun.objects.filter(celery_task_id=celery_task_id, process_id__in=all_process_ids) \ .update(process_id=None, celery_end=end) Organization.objects.filter(celery_task_id=celery_task_id) \ .update(celery_task_id=None, celery_end=end, message=_('Computation killed at %(d)s, %(t)s') % {'d': date_format(end, use_l10n=True), 't': time_format(end, use_l10n=True)})
def home(request, course_key_string): course_module = get_course(course_key_string) if not request.user.is_staff and not request.user.is_superuser: # Are we in a deactivation period? now = timezone.now() deactivations = VideoUploaderDeactivationPeriod.objects.filter( start_time__lte=now, end_time__gte=now ).order_by('-end_time') if deactivations: deactivation = deactivations[0] end_date = date_format(deactivation.end_time) end_time = time_format(deactivation.end_time) return render_to_response('videoupload/deactivated.html', { "context_course": course_module, "end_date": end_date, "end_time": end_time, }) return render_to_response('videoupload/index.html', { "context_course": course_module, })
def home(request, course_key_string): course_module = get_course(course_key_string) if not request.user.is_staff and not request.user.is_superuser: # Are we in a deactivation period? now = timezone.now() deactivations = VideoUploaderDeactivationPeriod.objects.filter( start_time__lte=now, end_time__gte=now).order_by('-end_time') if deactivations: deactivation = deactivations[0] end_date = date_format(deactivation.end_time) end_time = time_format(deactivation.end_time) return render_to_response( 'videoupload/deactivated.html', { "context_course": course_module, "end_date": end_date, "end_time": end_time, }) return render_to_response('videoupload/index.html', { "context_course": course_module, })
def test_use_24_hour_time_format(self): update_en_gb_date_formats() field = DateTimeField() supported_custom_examples = [ "25/10/2006 2:30:59", "25/10/2006 2:30", "25/10/2006 14:30:59", "25/10/2006 14:30", ] for example in supported_custom_examples: try: result = field.to_python(example) self.assertIsInstance(result, datetime.datetime) except ValidationError: self.fail('Format of "{}" not recognized!'.format(example)) with self.assertRaises(ValidationError): field.to_python("invalid date string!") dt = datetime.datetime(year=2011, month=11, day=4, hour=23, minute=5, second=59) self.assertEqual(date_format(dt, "DATETIME_FORMAT"), "4 November 2011 23:05:59") dt = datetime.datetime(year=2011, month=11, day=4, hour=2, minute=5, second=59) self.assertEqual(date_format(dt, "SHORT_DATETIME_FORMAT"), "04/11/2011 02:05") t = datetime.time(hour=16, minute=2, second=25) self.assertEqual(time_format(t), "16:02")
def _command_jadwalshalat(arg, **kwargs): location_name = arg.strip() or 'Jakarta' try: l = Location.objects.get(city__iexact=location_name) except (Location.DoesNotExist, Location.MultipleObjectsReturned): return 'Afwan, ane belum tahu lokasi "%s" ada dimana.' % location_name date = timezone.now().astimezone(timezone.FixedOffset(l.tz * 60)) t = salat.TimeCalculator().date(date). \ location(l.lat, l.lng, l.alt, l.tz). \ method('muhammadiyah').calculate() return '''🕌 Jadwal shalat {} untuk {} (koordinat {}, {}; ketinggian {} mdpl; zona waktu {}): Shubuh - {} Syuruq - {} Zhuhur - {} Ashar - {} Maghrib - {} Isya - {}'''.format(date_format(date), l.city, number_format(l.lat), number_format(l.lng), number_format(l.alt, -2), timezone_format(l.tz), *[time_format(t.get_time(i)) for i in range(salat.N)])
def process_export_transactions(self, transactions): """ Convert raw object list transactions into format as per template TODO would be neater to use same template for both HTML and CSV """ processed_transactions = [] for trans in transactions: amount = round(float(trans.amount), 2) amount = "%s%s" % (intcomma(int(amount)), ("%0.2f" % amount)[-3:]) try: sender = trans.sender.get_profile().full_name except: try: sender = trans.sender.cc3_profile.full_name except: sender = trans.sender try: receiver = trans.recipient.get_profile().full_name except: try: receiver = trans.recipient.cc3_profile.full_name except: receiver = trans.recipient trans_dict = SortedDict() trans_dict["date"] = "%s %s" % ( date_format(trans.created, use_l10n=True), time_format(trans.created, use_l10n=True) ) trans_dict["from"] = sender trans_dict["to"] = receiver trans_dict["description"] = trans.description trans_dict["amount"] = "%s %s" % (amount, settings.CURRENCY_SYMBOL) processed_transactions.append(trans_dict) return processed_transactions
def get(self, request, *args, **kwargs): transactions = self.get_queryset() processed_transactions = [] for trans in transactions: # TODO Add support for currencies with decimal points amount = int(trans.amount) trans_dict = SortedDict() trans_dict['date'] = "%s %s" % (date_format( trans.date_created, use_l10n=True), time_format(trans.date_created, use_l10n=True)) trans_dict['operator'] = trans.operator.name if trans.operator.business == trans.receiver: trans_dict['amount +'] = "%s" % amount trans_dict['amount -/-'] = "" else: trans_dict['amount +'] = "" trans_dict['amount -/-'] = "-%s" % amount processed_transactions.append(trans_dict) if not processed_transactions: processed_transactions = [[]] headings = None else: headings = [ ugettext('date'), ugettext('operator'), ugettext('amount +'), ugettext('amount -/-') ] return ExcelResponse(processed_transactions, force_csv=True, output_name=self.report_output_name, header_override=headings)
def post_comment(request): return_json = {} formatted_date = "" if request.user.is_authenticated: post_id = request.POST['post'] text = request.POST['text'] try: post = get_object_or_404(Post, pk=int(post_id)) except ValueError: return_json = {'status': 0, 'error': u'Не существует такой записи'} return HttpResponse(json.dumps(return_json), mimetype='application/json') if text and len(text.strip()) > 0: comment = Comment(user=request.user, pub_date=datetime.datetime.now(), text=text, post=post) comment.save() return_json = {'status': 1, 'date': "%s %s" % (formats.date_format(comment.pub_date), formats.time_format(comment.pub_date))} else: return_json = {'status': 0, 'error': u'Текст комментария не может быть пустым'} else: return_json = {'status': 0, 'error': u'Вы должны быть зарегистрированы, чтобы оставить комментарий'} return HttpResponse(json.dumps(return_json), content_type='application/json')
def format_datetime(value): return "%s, %s" % (formats.date_format(value), formats.time_format(value))
def start_time_f(self): return formats.time_format(self.start_time, "TIME_FORMAT")
def test_l10n_enabled(self): """ Catalan locale """ settings.USE_L10N = True activate('ca') try: self.assertEqual('j \de F \de Y', get_format('DATE_FORMAT')) self.assertEqual(1, get_format('FIRST_DAY_OF_WEEK')) self.assertEqual(',', get_format('DECIMAL_SEPARATOR')) self.assertEqual(u'10:15:48', time_format(self.t)) self.assertEqual(u'31 de desembre de 2009', date_format(self.d)) self.assertEqual(u'desembre del 2009', date_format(self.d, 'YEAR_MONTH_FORMAT')) self.assertEqual(u'31/12/2009 20:50', date_format(self.dt, 'SHORT_DATETIME_FORMAT')) self.assertEqual('No localizable', localize('No localizable')) settings.USE_THOUSAND_SEPARATOR = True self.assertEqual(u'66.666,666', localize(self.n)) self.assertEqual(u'99.999,999', localize(self.f)) settings.USE_THOUSAND_SEPARATOR = False self.assertEqual(u'66666,666', localize(self.n)) self.assertEqual(u'99999,999', localize(self.f)) self.assertEqual(u'31 de desembre de 2009', localize(self.d)) self.assertEqual(u'31 de desembre de 2009 a les 20:50', localize(self.dt)) settings.USE_THOUSAND_SEPARATOR = True self.assertEqual(u'66.666,666', Template('{{ n }}').render(self.ctxt)) self.assertEqual(u'99.999,999', Template('{{ f }}').render(self.ctxt)) settings.USE_THOUSAND_SEPARATOR = False self.assertEqual(u'66666,666', Template('{{ n }}').render(self.ctxt)) self.assertEqual(u'99999,999', Template('{{ f }}').render(self.ctxt)) self.assertEqual(u'31 de desembre de 2009', Template('{{ d }}').render(self.ctxt)) self.assertEqual(u'31 de desembre de 2009 a les 20:50', Template('{{ dt }}').render(self.ctxt)) self.assertEqual(u'66666,67', Template('{{ n|floatformat:2 }}').render(self.ctxt)) self.assertEqual(u'100000,0', Template('{{ f|floatformat }}').render(self.ctxt)) self.assertEqual(u'10:15:48', Template('{{ t|time:"TIME_FORMAT" }}').render(self.ctxt)) self.assertEqual(u'31/12/2009', Template('{{ d|date:"SHORT_DATE_FORMAT" }}').render(self.ctxt)) self.assertEqual(u'31/12/2009 20:50', Template('{{ dt|date:"SHORT_DATETIME_FORMAT" }}').render(self.ctxt)) form3 = I18nForm({ 'decimal_field': u'66666,666', 'float_field': u'99999,999', 'date_field': u'31/12/2009', 'datetime_field': u'31/12/2009 20:50', 'time_field': u'20:50' }) self.assertEqual(True, form3.is_valid()) self.assertEqual(decimal.Decimal('66666.666'), form3.cleaned_data['decimal_field']) self.assertEqual(99999.999, form3.cleaned_data['float_field']) self.assertEqual(datetime.date(2009, 12, 31), form3.cleaned_data['date_field']) self.assertEqual(datetime.datetime(2009, 12, 31, 20, 50), form3.cleaned_data['datetime_field']) self.assertEqual(datetime.time(20, 50), form3.cleaned_data['time_field']) form4 = SelectDateForm({ 'date_field_month': u'12', 'date_field_day': u'31', 'date_field_year': u'2009' }) self.assertEqual(True, form4.is_valid()) self.assertEqual(datetime.date(2009, 12, 31), form4.cleaned_data['date_field']) self.assertEqual( u'<select name="mydate_day" id="id_mydate_day">\n<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="4">4</option>\n<option value="5">5</option>\n<option value="6">6</option>\n<option value="7">7</option>\n<option value="8">8</option>\n<option value="9">9</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31" selected="selected">31</option>\n</select>\n<select name="mydate_month" id="id_mydate_month">\n<option value="1">gener</option>\n<option value="2">febrer</option>\n<option value="3">mar\xe7</option>\n<option value="4">abril</option>\n<option value="5">maig</option>\n<option value="6">juny</option>\n<option value="7">juliol</option>\n<option value="8">agost</option>\n<option value="9">setembre</option>\n<option value="10">octubre</option>\n<option value="11">novembre</option>\n<option value="12" selected="selected">desembre</option>\n</select>\n<select name="mydate_year" id="id_mydate_year">\n<option value="2009" selected="selected">2009</option>\n<option value="2010">2010</option>\n<option value="2011">2011</option>\n<option value="2012">2012</option>\n<option value="2013">2013</option>\n<option value="2014">2014</option>\n<option value="2015">2015</option>\n<option value="2016">2016</option>\n<option value="2017">2017</option>\n<option value="2018">2018</option>\n</select>', SelectDateWidget(years=range(2009, 2019)).render('mydate', datetime.date(2009, 12, 31)) ) finally: deactivate() # English locale settings.USE_L10N = True activate('en') try: self.assertEqual('N j, Y', get_format('DATE_FORMAT')) self.assertEqual(0, get_format('FIRST_DAY_OF_WEEK')) self.assertEqual('.', get_format('DECIMAL_SEPARATOR')) self.assertEqual(u'Dec. 31, 2009', date_format(self.d)) self.assertEqual(u'December 2009', date_format(self.d, 'YEAR_MONTH_FORMAT')) self.assertEqual(u'12/31/2009 8:50 p.m.', date_format(self.dt, 'SHORT_DATETIME_FORMAT')) self.assertEqual('No localizable', localize('No localizable')) settings.USE_THOUSAND_SEPARATOR = True self.assertEqual(u'66,666.666', localize(self.n)) self.assertEqual(u'99,999.999', localize(self.f)) settings.USE_THOUSAND_SEPARATOR = False self.assertEqual(u'66666.666', localize(self.n)) self.assertEqual(u'99999.999', localize(self.f)) self.assertEqual(u'Dec. 31, 2009', localize(self.d)) self.assertEqual(u'Dec. 31, 2009, 8:50 p.m.', localize(self.dt)) settings.USE_THOUSAND_SEPARATOR = True self.assertEqual(u'66,666.666', Template('{{ n }}').render(self.ctxt)) self.assertEqual(u'99,999.999', Template('{{ f }}').render(self.ctxt)) settings.USE_THOUSAND_SEPARATOR = False self.assertEqual(u'66666.666', Template('{{ n }}').render(self.ctxt)) self.assertEqual(u'99999.999', Template('{{ f }}').render(self.ctxt)) self.assertEqual(u'Dec. 31, 2009', Template('{{ d }}').render(self.ctxt)) self.assertEqual(u'Dec. 31, 2009, 8:50 p.m.', Template('{{ dt }}').render(self.ctxt)) self.assertEqual(u'66666.67', Template('{{ n|floatformat:2 }}').render(self.ctxt)) self.assertEqual(u'100000.0', Template('{{ f|floatformat }}').render(self.ctxt)) self.assertEqual(u'12/31/2009', Template('{{ d|date:"SHORT_DATE_FORMAT" }}').render(self.ctxt)) self.assertEqual(u'12/31/2009 8:50 p.m.', Template('{{ dt|date:"SHORT_DATETIME_FORMAT" }}').render(self.ctxt)) form5 = I18nForm({ 'decimal_field': u'66666.666', 'float_field': u'99999.999', 'date_field': u'12/31/2009', 'datetime_field': u'12/31/2009 20:50', 'time_field': u'20:50' }) self.assertEqual(True, form5.is_valid()) self.assertEqual(decimal.Decimal('66666.666'), form5.cleaned_data['decimal_field']) self.assertEqual(99999.999, form5.cleaned_data['float_field']) self.assertEqual(datetime.date(2009, 12, 31), form5.cleaned_data['date_field']) self.assertEqual(datetime.datetime(2009, 12, 31, 20, 50), form5.cleaned_data['datetime_field']) self.assertEqual(datetime.time(20, 50), form5.cleaned_data['time_field']) form6 = SelectDateForm({ 'date_field_month': u'12', 'date_field_day': u'31', 'date_field_year': u'2009' }) self.assertEqual(True, form6.is_valid()) self.assertEqual(datetime.date(2009, 12, 31), form6.cleaned_data['date_field']) self.assertEqual( u'<select name="mydate_month" id="id_mydate_month">\n<option value="1">January</option>\n<option value="2">February</option>\n<option value="3">March</option>\n<option value="4">April</option>\n<option value="5">May</option>\n<option value="6">June</option>\n<option value="7">July</option>\n<option value="8">August</option>\n<option value="9">September</option>\n<option value="10">October</option>\n<option value="11">November</option>\n<option value="12" selected="selected">December</option>\n</select>\n<select name="mydate_day" id="id_mydate_day">\n<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="4">4</option>\n<option value="5">5</option>\n<option value="6">6</option>\n<option value="7">7</option>\n<option value="8">8</option>\n<option value="9">9</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31" selected="selected">31</option>\n</select>\n<select name="mydate_year" id="id_mydate_year">\n<option value="2009" selected="selected">2009</option>\n<option value="2010">2010</option>\n<option value="2011">2011</option>\n<option value="2012">2012</option>\n<option value="2013">2013</option>\n<option value="2014">2014</option>\n<option value="2015">2015</option>\n<option value="2016">2016</option>\n<option value="2017">2017</option>\n<option value="2018">2018</option>\n</select>', SelectDateWidget(years=range(2009, 2019)).render('mydate', datetime.date(2009, 12, 31)) ) finally: deactivate()
def render(self, data, media_type=None, renderer_context=None): renderer_context = renderer_context or {} day = renderer_context.get('day') include_resources_without_reservations = renderer_context.get('include_resources_without_reservations') document = self.create_document() first_resource = True atleast_one_reservation = False current_language = get_language() def get_translated_prop(obj, prop_name): prop = obj.get(prop_name, {}) val = prop.get(current_language) if not val: return prop.get(FALLBACK_LANGUAGE) return val for resource in data: reservations = [rv for rv in resource['reservations'] if rv['state'] == Reservation.CONFIRMED] reservation_count = len(reservations) if reservation_count == 0 and not include_resources_without_reservations: continue atleast_one_reservation = True # every resource on it's own page, a bit easier to add linebreak here than at the end if not first_resource: document.add_page_break() else: first_resource = False document.add_heading(get_translated_prop(resource, 'name'), 1) document.add_heading(formats.date_format(day, format='D j.n.Y'), 2) if reservation_count == 0: run = document.add_paragraph().add_run(_('No reservations.')) run.font.size = Pt(20) for reservation in reservations: # the time begin = iso_to_dt(reservation['begin']) end = iso_to_dt(reservation['end']) range_str = formats.time_format(localtime(begin)) + '–' + formats.time_format(localtime(end)) time_paragraph = document.add_heading(range_str, 3) time_paragraph.paragraph_format.space_before = Cm(1) # collect attributes from the reservation, skip empty ones attrs = [(field, reservation.get(field)) for field in ( 'event_subject', 'reserver_name', 'host_name', 'number_of_participants', ) if reservation.get(field)] if not attrs: document.add_paragraph(_('No information available')) continue table = document.add_table(rows=0, cols=2) # build the attribute table for attr in attrs: row_cells = table.add_row().cells row_cells[0].text = Reservation._meta.get_field(attr[0]).verbose_name + ':' row_cells[1].text = str(attr[1]) if not atleast_one_reservation: document.add_heading(_('No reservations'), 1) output = io.BytesIO() document.save(output) return output.getvalue()
def l10n_end_time(self): if self.end: return unicode(formats.time_format(self.naive_end)) else: return ''
def test_l10n_enabled(self): """ Catalan locale """ settings.USE_L10N = True activate("ca") try: self.assertEqual("j \de F \de Y", get_format("DATE_FORMAT")) self.assertEqual(1, get_format("FIRST_DAY_OF_WEEK")) self.assertEqual(",", get_format("DECIMAL_SEPARATOR")) self.assertEqual(u"10:15:48", time_format(self.t)) self.assertEqual(u"31 de desembre de 2009", date_format(self.d)) self.assertEqual(u"desembre del 2009", date_format(self.d, "YEAR_MONTH_FORMAT")) self.assertEqual(u"31/12/2009 20:50", date_format(self.dt, "SHORT_DATETIME_FORMAT")) self.assertEqual("No localizable", localize("No localizable")) settings.USE_THOUSAND_SEPARATOR = True self.assertEqual(u"66.666,666", localize(self.n)) self.assertEqual(u"99.999,999", localize(self.f)) settings.USE_THOUSAND_SEPARATOR = False self.assertEqual(u"66666,666", localize(self.n)) self.assertEqual(u"99999,999", localize(self.f)) self.assertEqual(u"31 de desembre de 2009", localize(self.d)) self.assertEqual(u"31 de desembre de 2009 a les 20:50", localize(self.dt)) settings.USE_THOUSAND_SEPARATOR = True self.assertEqual(u"66.666,666", Template("{{ n }}").render(self.ctxt)) self.assertEqual(u"99.999,999", Template("{{ f }}").render(self.ctxt)) form3 = I18nForm( { "decimal_field": u"66.666,666", "float_field": u"99.999,999", "date_field": u"31/12/2009", "datetime_field": u"31/12/2009 20:50", "time_field": u"20:50", "integer_field": u"1.234", } ) self.assertEqual(True, form3.is_valid()) self.assertEqual(decimal.Decimal("66666.666"), form3.cleaned_data["decimal_field"]) self.assertEqual(99999.999, form3.cleaned_data["float_field"]) self.assertEqual(datetime.date(2009, 12, 31), form3.cleaned_data["date_field"]) self.assertEqual(datetime.datetime(2009, 12, 31, 20, 50), form3.cleaned_data["datetime_field"]) self.assertEqual(datetime.time(20, 50), form3.cleaned_data["time_field"]) self.assertEqual(1234, form3.cleaned_data["integer_field"]) settings.USE_THOUSAND_SEPARATOR = False self.assertEqual(u"66666,666", Template("{{ n }}").render(self.ctxt)) self.assertEqual(u"99999,999", Template("{{ f }}").render(self.ctxt)) self.assertEqual(u"31 de desembre de 2009", Template("{{ d }}").render(self.ctxt)) self.assertEqual(u"31 de desembre de 2009 a les 20:50", Template("{{ dt }}").render(self.ctxt)) self.assertEqual(u"66666,67", Template("{{ n|floatformat:2 }}").render(self.ctxt)) self.assertEqual(u"100000,0", Template("{{ f|floatformat }}").render(self.ctxt)) self.assertEqual(u"10:15:48", Template('{{ t|time:"TIME_FORMAT" }}').render(self.ctxt)) self.assertEqual(u"31/12/2009", Template('{{ d|date:"SHORT_DATE_FORMAT" }}').render(self.ctxt)) self.assertEqual(u"31/12/2009 20:50", Template('{{ dt|date:"SHORT_DATETIME_FORMAT" }}').render(self.ctxt)) form4 = I18nForm( { "decimal_field": u"66666,666", "float_field": u"99999,999", "date_field": u"31/12/2009", "datetime_field": u"31/12/2009 20:50", "time_field": u"20:50", "integer_field": u"1234", } ) self.assertEqual(True, form4.is_valid()) self.assertEqual(decimal.Decimal("66666.666"), form4.cleaned_data["decimal_field"]) self.assertEqual(99999.999, form4.cleaned_data["float_field"]) self.assertEqual(datetime.date(2009, 12, 31), form4.cleaned_data["date_field"]) self.assertEqual(datetime.datetime(2009, 12, 31, 20, 50), form4.cleaned_data["datetime_field"]) self.assertEqual(datetime.time(20, 50), form4.cleaned_data["time_field"]) self.assertEqual(1234, form4.cleaned_data["integer_field"]) form5 = SelectDateForm({"date_field_month": u"12", "date_field_day": u"31", "date_field_year": u"2009"}) self.assertEqual(True, form5.is_valid()) self.assertEqual(datetime.date(2009, 12, 31), form5.cleaned_data["date_field"]) self.assertEqual( u'<select name="mydate_day" id="id_mydate_day">\n<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="4">4</option>\n<option value="5">5</option>\n<option value="6">6</option>\n<option value="7">7</option>\n<option value="8">8</option>\n<option value="9">9</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31" selected="selected">31</option>\n</select>\n<select name="mydate_month" id="id_mydate_month">\n<option value="1">gener</option>\n<option value="2">febrer</option>\n<option value="3">mar\xe7</option>\n<option value="4">abril</option>\n<option value="5">maig</option>\n<option value="6">juny</option>\n<option value="7">juliol</option>\n<option value="8">agost</option>\n<option value="9">setembre</option>\n<option value="10">octubre</option>\n<option value="11">novembre</option>\n<option value="12" selected="selected">desembre</option>\n</select>\n<select name="mydate_year" id="id_mydate_year">\n<option value="2009" selected="selected">2009</option>\n<option value="2010">2010</option>\n<option value="2011">2011</option>\n<option value="2012">2012</option>\n<option value="2013">2013</option>\n<option value="2014">2014</option>\n<option value="2015">2015</option>\n<option value="2016">2016</option>\n<option value="2017">2017</option>\n<option value="2018">2018</option>\n</select>', SelectDateWidget(years=range(2009, 2019)).render("mydate", datetime.date(2009, 12, 31)), ) finally: deactivate() # English locale settings.USE_L10N = True activate("en") try: self.assertEqual("N j, Y", get_format("DATE_FORMAT")) self.assertEqual(0, get_format("FIRST_DAY_OF_WEEK")) self.assertEqual(".", get_format("DECIMAL_SEPARATOR")) self.assertEqual(u"Dec. 31, 2009", date_format(self.d)) self.assertEqual(u"December 2009", date_format(self.d, "YEAR_MONTH_FORMAT")) self.assertEqual(u"12/31/2009 8:50 p.m.", date_format(self.dt, "SHORT_DATETIME_FORMAT")) self.assertEqual("No localizable", localize("No localizable")) settings.USE_THOUSAND_SEPARATOR = True self.assertEqual(u"66,666.666", localize(self.n)) self.assertEqual(u"99,999.999", localize(self.f)) settings.USE_THOUSAND_SEPARATOR = False self.assertEqual(u"66666.666", localize(self.n)) self.assertEqual(u"99999.999", localize(self.f)) self.assertEqual(u"Dec. 31, 2009", localize(self.d)) self.assertEqual(u"Dec. 31, 2009, 8:50 p.m.", localize(self.dt)) settings.USE_THOUSAND_SEPARATOR = True self.assertEqual(u"66,666.666", Template("{{ n }}").render(self.ctxt)) self.assertEqual(u"99,999.999", Template("{{ f }}").render(self.ctxt)) settings.USE_THOUSAND_SEPARATOR = False self.assertEqual(u"66666.666", Template("{{ n }}").render(self.ctxt)) self.assertEqual(u"99999.999", Template("{{ f }}").render(self.ctxt)) self.assertEqual(u"Dec. 31, 2009", Template("{{ d }}").render(self.ctxt)) self.assertEqual(u"Dec. 31, 2009, 8:50 p.m.", Template("{{ dt }}").render(self.ctxt)) self.assertEqual(u"66666.67", Template("{{ n|floatformat:2 }}").render(self.ctxt)) self.assertEqual(u"100000.0", Template("{{ f|floatformat }}").render(self.ctxt)) self.assertEqual(u"12/31/2009", Template('{{ d|date:"SHORT_DATE_FORMAT" }}').render(self.ctxt)) self.assertEqual( u"12/31/2009 8:50 p.m.", Template('{{ dt|date:"SHORT_DATETIME_FORMAT" }}').render(self.ctxt) ) form5 = I18nForm( { "decimal_field": u"66666.666", "float_field": u"99999.999", "date_field": u"12/31/2009", "datetime_field": u"12/31/2009 20:50", "time_field": u"20:50", "integer_field": u"1234", } ) self.assertEqual(True, form5.is_valid()) self.assertEqual(decimal.Decimal("66666.666"), form5.cleaned_data["decimal_field"]) self.assertEqual(99999.999, form5.cleaned_data["float_field"]) self.assertEqual(datetime.date(2009, 12, 31), form5.cleaned_data["date_field"]) self.assertEqual(datetime.datetime(2009, 12, 31, 20, 50), form5.cleaned_data["datetime_field"]) self.assertEqual(datetime.time(20, 50), form5.cleaned_data["time_field"]) self.assertEqual(1234, form5.cleaned_data["integer_field"]) form6 = SelectDateForm({"date_field_month": u"12", "date_field_day": u"31", "date_field_year": u"2009"}) self.assertEqual(True, form6.is_valid()) self.assertEqual(datetime.date(2009, 12, 31), form6.cleaned_data["date_field"]) self.assertEqual( u'<select name="mydate_month" id="id_mydate_month">\n<option value="1">January</option>\n<option value="2">February</option>\n<option value="3">March</option>\n<option value="4">April</option>\n<option value="5">May</option>\n<option value="6">June</option>\n<option value="7">July</option>\n<option value="8">August</option>\n<option value="9">September</option>\n<option value="10">October</option>\n<option value="11">November</option>\n<option value="12" selected="selected">December</option>\n</select>\n<select name="mydate_day" id="id_mydate_day">\n<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="4">4</option>\n<option value="5">5</option>\n<option value="6">6</option>\n<option value="7">7</option>\n<option value="8">8</option>\n<option value="9">9</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31" selected="selected">31</option>\n</select>\n<select name="mydate_year" id="id_mydate_year">\n<option value="2009" selected="selected">2009</option>\n<option value="2010">2010</option>\n<option value="2011">2011</option>\n<option value="2012">2012</option>\n<option value="2013">2013</option>\n<option value="2014">2014</option>\n<option value="2015">2015</option>\n<option value="2016">2016</option>\n<option value="2017">2017</option>\n<option value="2018">2018</option>\n</select>', SelectDateWidget(years=range(2009, 2019)).render("mydate", datetime.date(2009, 12, 31)), ) finally: deactivate()
def __unicode__(self): return _(u"%(start)s - %(end)s, %(day)s") % { 'day': unicode(self.calendar_day), 'start': time_format(self.starts), 'end': time_format(self.ends) }
def test_l10n_enabled(self): settings.USE_L10N = True # Catalan locale activate('ca') try: self.assertEqual('j \de F \de Y', get_format('DATE_FORMAT')) self.assertEqual(1, get_format('FIRST_DAY_OF_WEEK')) self.assertEqual(',', get_format('DECIMAL_SEPARATOR')) self.assertEqual(u'10:15:48', time_format(self.t)) self.assertEqual(u'31 de desembre de 2009', date_format(self.d)) self.assertEqual(u'desembre del 2009', date_format(self.d, 'YEAR_MONTH_FORMAT')) self.assertEqual(u'31/12/2009 20:50', date_format(self.dt, 'SHORT_DATETIME_FORMAT')) self.assertEqual('No localizable', localize('No localizable')) settings.USE_THOUSAND_SEPARATOR = True self.assertEqual(u'66.666,666', localize(self.n)) self.assertEqual(u'99.999,999', localize(self.f)) self.assertEqual(u'10.000', localize(self.l)) self.assertEqual(u'True', localize(True)) settings.USE_THOUSAND_SEPARATOR = False self.assertEqual(u'66666,666', localize(self.n)) self.assertEqual(u'99999,999', localize(self.f)) self.assertEqual(u'10000', localize(self.l)) self.assertEqual(u'31 de desembre de 2009', localize(self.d)) self.assertEqual(u'31 de desembre de 2009 a les 20:50', localize(self.dt)) settings.USE_THOUSAND_SEPARATOR = True self.assertEqual(u'66.666,666', Template('{{ n }}').render(self.ctxt)) self.assertEqual(u'99.999,999', Template('{{ f }}').render(self.ctxt)) self.assertEqual(u'10.000', Template('{{ l }}').render(self.ctxt)) form3 = I18nForm({ 'decimal_field': u'66.666,666', 'float_field': u'99.999,999', 'date_field': u'31/12/2009', 'datetime_field': u'31/12/2009 20:50', 'time_field': u'20:50', 'integer_field': u'1.234', }) self.assertEqual(True, form3.is_valid()) self.assertEqual(decimal.Decimal('66666.666'), form3.cleaned_data['decimal_field']) self.assertEqual(99999.999, form3.cleaned_data['float_field']) self.assertEqual(datetime.date(2009, 12, 31), form3.cleaned_data['date_field']) self.assertEqual(datetime.datetime(2009, 12, 31, 20, 50), form3.cleaned_data['datetime_field']) self.assertEqual(datetime.time(20, 50), form3.cleaned_data['time_field']) self.assertEqual(1234, form3.cleaned_data['integer_field']) settings.USE_THOUSAND_SEPARATOR = False self.assertEqual(u'66666,666', Template('{{ n }}').render(self.ctxt)) self.assertEqual(u'99999,999', Template('{{ f }}').render(self.ctxt)) self.assertEqual(u'31 de desembre de 2009', Template('{{ d }}').render(self.ctxt)) self.assertEqual(u'31 de desembre de 2009 a les 20:50', Template('{{ dt }}').render(self.ctxt)) self.assertEqual( u'66666,67', Template('{{ n|floatformat:2 }}').render(self.ctxt)) self.assertEqual(u'100000,0', Template('{{ f|floatformat }}').render(self.ctxt)) self.assertEqual( u'10:15:48', Template('{{ t|time:"TIME_FORMAT" }}').render(self.ctxt)) self.assertEqual( u'31/12/2009', Template('{{ d|date:"SHORT_DATE_FORMAT" }}').render(self.ctxt)) self.assertEqual( u'31/12/2009 20:50', Template('{{ dt|date:"SHORT_DATETIME_FORMAT" }}').render( self.ctxt)) form4 = I18nForm({ 'decimal_field': u'66666,666', 'float_field': u'99999,999', 'date_field': u'31/12/2009', 'datetime_field': u'31/12/2009 20:50', 'time_field': u'20:50', 'integer_field': u'1234', }) self.assertEqual(True, form4.is_valid()) self.assertEqual(decimal.Decimal('66666.666'), form4.cleaned_data['decimal_field']) self.assertEqual(99999.999, form4.cleaned_data['float_field']) self.assertEqual(datetime.date(2009, 12, 31), form4.cleaned_data['date_field']) self.assertEqual(datetime.datetime(2009, 12, 31, 20, 50), form4.cleaned_data['datetime_field']) self.assertEqual(datetime.time(20, 50), form4.cleaned_data['time_field']) self.assertEqual(1234, form4.cleaned_data['integer_field']) form5 = SelectDateForm({ 'date_field_month': u'12', 'date_field_day': u'31', 'date_field_year': u'2009' }) self.assertEqual(True, form5.is_valid()) self.assertEqual(datetime.date(2009, 12, 31), form5.cleaned_data['date_field']) self.assertEqual( u'<select name="mydate_day" id="id_mydate_day">\n<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="4">4</option>\n<option value="5">5</option>\n<option value="6">6</option>\n<option value="7">7</option>\n<option value="8">8</option>\n<option value="9">9</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31" selected="selected">31</option>\n</select>\n<select name="mydate_month" id="id_mydate_month">\n<option value="1">gener</option>\n<option value="2">febrer</option>\n<option value="3">mar\xe7</option>\n<option value="4">abril</option>\n<option value="5">maig</option>\n<option value="6">juny</option>\n<option value="7">juliol</option>\n<option value="8">agost</option>\n<option value="9">setembre</option>\n<option value="10">octubre</option>\n<option value="11">novembre</option>\n<option value="12" selected="selected">desembre</option>\n</select>\n<select name="mydate_year" id="id_mydate_year">\n<option value="2009" selected="selected">2009</option>\n<option value="2010">2010</option>\n<option value="2011">2011</option>\n<option value="2012">2012</option>\n<option value="2013">2013</option>\n<option value="2014">2014</option>\n<option value="2015">2015</option>\n<option value="2016">2016</option>\n<option value="2017">2017</option>\n<option value="2018">2018</option>\n</select>', SelectDateWidget(years=range(2009, 2019)).render( 'mydate', datetime.date(2009, 12, 31))) finally: deactivate() # Russian locale (with E as month) activate('ru') try: self.assertEqual( u'<select name="mydate_day" id="id_mydate_day">\n<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="4">4</option>\n<option value="5">5</option>\n<option value="6">6</option>\n<option value="7">7</option>\n<option value="8">8</option>\n<option value="9">9</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31" selected="selected">31</option>\n</select>\n<select name="mydate_month" id="id_mydate_month">\n<option value="1">\u042f\u043d\u0432\u0430\u0440\u044c</option>\n<option value="2">\u0424\u0435\u0432\u0440\u0430\u043b\u044c</option>\n<option value="3">\u041c\u0430\u0440\u0442</option>\n<option value="4">\u0410\u043f\u0440\u0435\u043b\u044c</option>\n<option value="5">\u041c\u0430\u0439</option>\n<option value="6">\u0418\u044e\u043d\u044c</option>\n<option value="7">\u0418\u044e\u043b\u044c</option>\n<option value="8">\u0410\u0432\u0433\u0443\u0441\u0442</option>\n<option value="9">\u0421\u0435\u043d\u0442\u044f\u0431\u0440\u044c</option>\n<option value="10">\u041e\u043a\u0442\u044f\u0431\u0440\u044c</option>\n<option value="11">\u041d\u043e\u044f\u0431\u0440\u044c</option>\n<option value="12" selected="selected">\u0414\u0435\u043a\u0430\u0431\u0440\u044c</option>\n</select>\n<select name="mydate_year" id="id_mydate_year">\n<option value="2009" selected="selected">2009</option>\n<option value="2010">2010</option>\n<option value="2011">2011</option>\n<option value="2012">2012</option>\n<option value="2013">2013</option>\n<option value="2014">2014</option>\n<option value="2015">2015</option>\n<option value="2016">2016</option>\n<option value="2017">2017</option>\n<option value="2018">2018</option>\n</select>', SelectDateWidget(years=range(2009, 2019)).render( 'mydate', datetime.date(2009, 12, 31))) finally: deactivate() # English locale activate('en') try: self.assertEqual('N j, Y', get_format('DATE_FORMAT')) self.assertEqual(0, get_format('FIRST_DAY_OF_WEEK')) self.assertEqual('.', get_format('DECIMAL_SEPARATOR')) self.assertEqual(u'Dec. 31, 2009', date_format(self.d)) self.assertEqual(u'December 2009', date_format(self.d, 'YEAR_MONTH_FORMAT')) self.assertEqual(u'12/31/2009 8:50 p.m.', date_format(self.dt, 'SHORT_DATETIME_FORMAT')) self.assertEqual(u'No localizable', localize('No localizable')) settings.USE_THOUSAND_SEPARATOR = True self.assertEqual(u'66,666.666', localize(self.n)) self.assertEqual(u'99,999.999', localize(self.f)) self.assertEqual(u'10,000', localize(self.l)) settings.USE_THOUSAND_SEPARATOR = False self.assertEqual(u'66666.666', localize(self.n)) self.assertEqual(u'99999.999', localize(self.f)) self.assertEqual(u'10000', localize(self.l)) self.assertEqual(u'Dec. 31, 2009', localize(self.d)) self.assertEqual(u'Dec. 31, 2009, 8:50 p.m.', localize(self.dt)) settings.USE_THOUSAND_SEPARATOR = True self.assertEqual(u'66,666.666', Template('{{ n }}').render(self.ctxt)) self.assertEqual(u'99,999.999', Template('{{ f }}').render(self.ctxt)) self.assertEqual(u'10,000', Template('{{ l }}').render(self.ctxt)) settings.USE_THOUSAND_SEPARATOR = False self.assertEqual(u'66666.666', Template('{{ n }}').render(self.ctxt)) self.assertEqual(u'99999.999', Template('{{ f }}').render(self.ctxt)) self.assertEqual(u'Dec. 31, 2009', Template('{{ d }}').render(self.ctxt)) self.assertEqual(u'Dec. 31, 2009, 8:50 p.m.', Template('{{ dt }}').render(self.ctxt)) self.assertEqual( u'66666.67', Template('{{ n|floatformat:2 }}').render(self.ctxt)) self.assertEqual(u'100000.0', Template('{{ f|floatformat }}').render(self.ctxt)) self.assertEqual( u'12/31/2009', Template('{{ d|date:"SHORT_DATE_FORMAT" }}').render(self.ctxt)) self.assertEqual( u'12/31/2009 8:50 p.m.', Template('{{ dt|date:"SHORT_DATETIME_FORMAT" }}').render( self.ctxt)) form5 = I18nForm({ 'decimal_field': u'66666.666', 'float_field': u'99999.999', 'date_field': u'12/31/2009', 'datetime_field': u'12/31/2009 20:50', 'time_field': u'20:50', 'integer_field': u'1234', }) self.assertEqual(True, form5.is_valid()) self.assertEqual(decimal.Decimal('66666.666'), form5.cleaned_data['decimal_field']) self.assertEqual(99999.999, form5.cleaned_data['float_field']) self.assertEqual(datetime.date(2009, 12, 31), form5.cleaned_data['date_field']) self.assertEqual(datetime.datetime(2009, 12, 31, 20, 50), form5.cleaned_data['datetime_field']) self.assertEqual(datetime.time(20, 50), form5.cleaned_data['time_field']) self.assertEqual(1234, form5.cleaned_data['integer_field']) form6 = SelectDateForm({ 'date_field_month': u'12', 'date_field_day': u'31', 'date_field_year': u'2009' }) self.assertEqual(True, form6.is_valid()) self.assertEqual(datetime.date(2009, 12, 31), form6.cleaned_data['date_field']) self.assertEqual( u'<select name="mydate_month" id="id_mydate_month">\n<option value="1">January</option>\n<option value="2">February</option>\n<option value="3">March</option>\n<option value="4">April</option>\n<option value="5">May</option>\n<option value="6">June</option>\n<option value="7">July</option>\n<option value="8">August</option>\n<option value="9">September</option>\n<option value="10">October</option>\n<option value="11">November</option>\n<option value="12" selected="selected">December</option>\n</select>\n<select name="mydate_day" id="id_mydate_day">\n<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="4">4</option>\n<option value="5">5</option>\n<option value="6">6</option>\n<option value="7">7</option>\n<option value="8">8</option>\n<option value="9">9</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31" selected="selected">31</option>\n</select>\n<select name="mydate_year" id="id_mydate_year">\n<option value="2009" selected="selected">2009</option>\n<option value="2010">2010</option>\n<option value="2011">2011</option>\n<option value="2012">2012</option>\n<option value="2013">2013</option>\n<option value="2014">2014</option>\n<option value="2015">2015</option>\n<option value="2016">2016</option>\n<option value="2017">2017</option>\n<option value="2018">2018</option>\n</select>', SelectDateWidget(years=range(2009, 2019)).render( 'mydate', datetime.date(2009, 12, 31))) finally: deactivate()
def test_l10n_disabled(self): """ Catalan locale with format i18n disabled translations will be used, but not formats """ settings.USE_L10N = False activate('ca') try: self.assertEqual(u'N j, Y', get_format('DATE_FORMAT')) self.assertEqual(0, get_format('FIRST_DAY_OF_WEEK')) self.assertEqual(u'.', get_format('DECIMAL_SEPARATOR')) self.assertEqual(u'10:15 a.m.', time_format(self.t)) self.assertEqual(u'des. 31, 2009', date_format(self.d)) self.assertEqual(u'desembre 2009', date_format(self.d, 'YEAR_MONTH_FORMAT')) self.assertEqual(u'12/31/2009 8:50 p.m.', date_format(self.dt, 'SHORT_DATETIME_FORMAT')) self.assertEqual(u'No localizable', localize('No localizable')) self.assertEqual(u'66666.666', localize(self.n)) self.assertEqual(u'99999.999', localize(self.f)) self.assertEqual(u'10000', localize(self.l)) self.assertEqual(u'des. 31, 2009', localize(self.d)) self.assertEqual(u'des. 31, 2009, 8:50 p.m.', localize(self.dt)) self.assertEqual(u'66666.666', Template('{{ n }}').render(self.ctxt)) self.assertEqual(u'99999.999', Template('{{ f }}').render(self.ctxt)) self.assertEqual(u'des. 31, 2009', Template('{{ d }}').render(self.ctxt)) self.assertEqual(u'des. 31, 2009, 8:50 p.m.', Template('{{ dt }}').render(self.ctxt)) self.assertEqual( u'66666.67', Template('{{ n|floatformat:2 }}').render(self.ctxt)) self.assertEqual(u'100000.0', Template('{{ f|floatformat }}').render(self.ctxt)) self.assertEqual( u'10:15 a.m.', Template('{{ t|time:"TIME_FORMAT" }}').render(self.ctxt)) self.assertEqual( u'12/31/2009', Template('{{ d|date:"SHORT_DATE_FORMAT" }}').render(self.ctxt)) self.assertEqual( u'12/31/2009 8:50 p.m.', Template('{{ dt|date:"SHORT_DATETIME_FORMAT" }}').render( self.ctxt)) form = I18nForm({ 'decimal_field': u'66666,666', 'float_field': u'99999,999', 'date_field': u'31/12/2009', 'datetime_field': u'31/12/2009 20:50', 'time_field': u'20:50', 'integer_field': u'1.234', }) self.assertEqual(False, form.is_valid()) self.assertEqual([u'Introdu\xefu un n\xfamero.'], form.errors['float_field']) self.assertEqual([u'Introdu\xefu un n\xfamero.'], form.errors['decimal_field']) self.assertEqual([u'Introdu\xefu una data v\xe0lida.'], form.errors['date_field']) self.assertEqual([u'Introdu\xefu una data/hora v\xe0lides.'], form.errors['datetime_field']) self.assertEqual([u'Introdu\xefu un n\xfamero sencer.'], form.errors['integer_field']) form2 = SelectDateForm({ 'date_field_month': u'12', 'date_field_day': u'31', 'date_field_year': u'2009' }) self.assertEqual(True, form2.is_valid()) self.assertEqual(datetime.date(2009, 12, 31), form2.cleaned_data['date_field']) self.assertEqual( u'<select name="mydate_month" id="id_mydate_month">\n<option value="1">gener</option>\n<option value="2">febrer</option>\n<option value="3">mar\xe7</option>\n<option value="4">abril</option>\n<option value="5">maig</option>\n<option value="6">juny</option>\n<option value="7">juliol</option>\n<option value="8">agost</option>\n<option value="9">setembre</option>\n<option value="10">octubre</option>\n<option value="11">novembre</option>\n<option value="12" selected="selected">desembre</option>\n</select>\n<select name="mydate_day" id="id_mydate_day">\n<option value="1">1</option>\n<option value="2">2</option>\n<option value="3">3</option>\n<option value="4">4</option>\n<option value="5">5</option>\n<option value="6">6</option>\n<option value="7">7</option>\n<option value="8">8</option>\n<option value="9">9</option>\n<option value="10">10</option>\n<option value="11">11</option>\n<option value="12">12</option>\n<option value="13">13</option>\n<option value="14">14</option>\n<option value="15">15</option>\n<option value="16">16</option>\n<option value="17">17</option>\n<option value="18">18</option>\n<option value="19">19</option>\n<option value="20">20</option>\n<option value="21">21</option>\n<option value="22">22</option>\n<option value="23">23</option>\n<option value="24">24</option>\n<option value="25">25</option>\n<option value="26">26</option>\n<option value="27">27</option>\n<option value="28">28</option>\n<option value="29">29</option>\n<option value="30">30</option>\n<option value="31" selected="selected">31</option>\n</select>\n<select name="mydate_year" id="id_mydate_year">\n<option value="2009" selected="selected">2009</option>\n<option value="2010">2010</option>\n<option value="2011">2011</option>\n<option value="2012">2012</option>\n<option value="2013">2013</option>\n<option value="2014">2014</option>\n<option value="2015">2015</option>\n<option value="2016">2016</option>\n<option value="2017">2017</option>\n<option value="2018">2018</option>\n</select>', SelectDateWidget(years=range(2009, 2019)).render( 'mydate', datetime.date(2009, 12, 31))) # We shouldn't change the behavior of the floatformat filter re: # thousand separator and grouping when USE_L10N is False even # if the USE_THOUSAND_SEPARATOR, NUMBER_GROUPING and # THOUSAND_SEPARATOR settings are specified settings.USE_THOUSAND_SEPARATOR = True settings.NUMBER_GROUPING = 1 settings.THOUSAND_SEPARATOR = '!' self.assertEqual( u'66666.67', Template('{{ n|floatformat:2 }}').render(self.ctxt)) self.assertEqual(u'100000.0', Template('{{ f|floatformat }}').render(self.ctxt)) finally: deactivate()
def __unicode__(self): return date_format(self.scheduled_at) + ", " + time_format(self.scheduled_at)
def get_cell_value(self, rec): value = super().get_cell_value(rec) if isinstance(value, datetime.date): # date also match datetime return formats.time_format(value, self.time_format) return value