def test_timeline(self): #Test for timeline's form date_begin = from_current_timezone(datetime.datetime.today() + datetime.timedelta(days = 1)) date_end = from_current_timezone(datetime.datetime.today() - datetime.timedelta(days = 30)) # document + part selected + no date specified response = self.get("/timeline/", {"part":"on","document":"on"}) history = response.context["object_history"] self.assertEqual(list(history), list(m.History.objects.filter(date__gte = date_end, date__lt = date_begin))) # Only document selected + no date specified response = self.get("/timeline/", {"document":"on"}) history2 = response.context["object_history"] self.assertEqual(list(history2), list(m.History.objects.filter(date__gte = date_end, date__lt = date_begin, plmobject__type__in = m.document.get_all_documents().keys()))) # Only part selected + no date specified response = self.get("/timeline/", {"part":"on"}) history3 = response.context["object_history"] self.assertEqual(list(history3), list(m.History.objects.filter(date__gte = date_end, date__lt = date_begin, plmobject__type__in = m.part.get_all_parts().keys()))) # part + document selected and date specified / done_by not informed response = self.get("/timeline/", {"part":"on", "document":"on", "date_history_begin":"2013-06-8", "number_days": "15"}) history4 = response.context["object_history"] date_begin = from_current_timezone(datetime.datetime(2013,6,9)) date_end = from_current_timezone(date_begin - datetime.timedelta(days = 15)) self.assertEqual(list(history4), list(m.History.objects.filter(date__gte = date_end, date__lt = date_begin))) # part + document selected and date specified + done_by informed response = self.get("/timeline/" , {"part":"on", "document":"on", "date_history_begin":"2013-06-8", "number_days": "15", "done_by": "company"}) history5 = response.context["object_history"] self.assertEqual(list(history5), list(m.History.objects.filter(date__gte = date_end, date__lt = date_begin, user__username="******"))) # only group selected response = self.get("/timeline/" , {"group":"on","date_history_begin":"2013-06-8", "number_days": "15", "done_by": "company"}) history6 = response.context["object_history"] self.assertEqual(list(history6), list(m.GroupHistory.objects.filter(date__gte = date_end, date__lt = date_begin, user__username="******")))
def to_python(self, value): if value in validators.EMPTY_VALUES: return None if isinstance(value, list): # This came from SplitDateTimeWidget so the value is two strings value = ' '.join(value) if isinstance(value, str) or isinstance(value, unicode): try: v = dateutil.parser.parse(value, tzinfos=all_timezones_map()) except: raise ValidationError('Invalid date/time string: %s' % value) return from_current_timezone(v) if isinstance(value, datetime.datetime): return from_current_timezone(value) if isinstance(value, datetime.date): result = datetime.datetime(value.year, value.month, value.day) return from_current_timezone(result) raise ValidationError('Unknown data/time field value type: %s' % type(value))
def save(self, *args, **kwargs): if self.allday == True: self.startdatetime = from_current_timezone(datetime(self.startdatetime.year, self.startdatetime.month, self.startdatetime.day)) self.enddatetime = from_current_timezone(datetime(self.startdatetime.year, self.startdatetime.month, self.startdatetime.day + 1)) if self.until: self.until = from_current_timezone(self.until) #self.byweekday = [int(day) for day in self.byweekday] super(Event, self).save(*args, **kwargs)
def save(self, *args, **kwargs): if self.allday == True: self.startdatetime = from_current_timezone( datetime(self.startdatetime.year, self.startdatetime.month, self.startdatetime.day)) self.enddatetime = from_current_timezone( datetime(self.startdatetime.year, self.startdatetime.month, self.startdatetime.day + timedelta(days=1))) super(Event, self).save(*args, **kwargs)
def clean(self, value): value = super(TzAwareTimeField, self).to_python(value) print value dt = to_current_timezone(timezone.now()) print dt new_time = dt.replace( hour=value.hour, minute=value.minute, second=value.second, microsecond=value.microsecond) print from_current_timezone(new_time) return from_current_timezone(new_time)
def save(self, *args, **kwargs): if self.allday == True: self.startdatetime = from_current_timezone( datetime(self.startdatetime.year, self.startdatetime.month, self.startdatetime.day)) self.enddatetime = from_current_timezone( datetime(self.startdatetime.year, self.startdatetime.month, self.startdatetime.day + 1)) if self.until: self.until = from_current_timezone(self.until) #self.byweekday = [int(day) for day in self.byweekday] super(Event, self).save(*args, **kwargs)
def testHandler(self): import decimal from django.forms.util import from_current_timezone handler = TestHandler(self.request.GET); status = handler._is_valid() if not status: errors = handler.get_error_list() print errors, type(errors) self.assertEqual(status, True) self.assertEqual(handler._meta.resource_name, 'test_handler') self.assertEqual(handler.test_name, unicode(self.request.GET['test_name'])) self.assertEqual(handler.test_datetime, from_current_timezone(self.request.now)) self.assertEqual(handler.test_date, self.now_date) self.assertEqual(handler.test_time, self.now_time) self.assertEqual(handler.test_integer, int(self.request.GET['test_integer'])) self.assertEqual(handler.test_decimal, decimal.Decimal(self.request.GET['test_decimal'])) self.assertEqual(handler.test_float, float(self.request.GET['test_float'])) self.assertEqual(handler.test_email, unicode(self.request.GET['test_email'])) self.assertEqual(handler.test_url, unicode('http://' + self.request.GET['test_url'] + '/')) self.assertEqual(handler.test_ip, unicode(self.request.GET['test_ip'])) self.assertEqual(handler.test_slug, unicode(self.request.GET['test_slug'])) self.assertEqual(handler.test_bool, True) self.assertEqual(handler.test_null_bool, None)
def testHandler(self): import decimal from django.forms.util import from_current_timezone handler = TestHandler(self.request.GET) status = handler._is_valid() if not status: errors = handler.get_error_list() print errors, type(errors) self.assertEqual(status, True) self.assertEqual(handler._meta.resource_name, 'test_handler') self.assertEqual(handler.test_name, unicode(self.request.GET['test_name'])) self.assertEqual(handler.test_datetime, from_current_timezone(self.request.now)) self.assertEqual(handler.test_date, self.now_date) self.assertEqual(handler.test_time, self.now_time) self.assertEqual(handler.test_integer, int(self.request.GET['test_integer'])) self.assertEqual(handler.test_decimal, decimal.Decimal(self.request.GET['test_decimal'])) self.assertEqual(handler.test_float, float(self.request.GET['test_float'])) self.assertEqual(handler.test_email, unicode(self.request.GET['test_email'])) self.assertEqual( handler.test_url, unicode('http://' + self.request.GET['test_url'] + '/')) self.assertEqual(handler.test_ip, unicode(self.request.GET['test_ip'])) self.assertEqual(handler.test_slug, unicode(self.request.GET['test_slug'])) self.assertEqual(handler.test_bool, True) self.assertEqual(handler.test_null_bool, None)
def is_valid(self, bundle, request=None): if not bundle.data: return {'__all__': 'Data should be present'} errors = {} for key, value in bundle.data.items(): if 'purchase_date' in key and datetime_now() < from_current_timezone(get_date_from_string(value)): errors['purchase_date'] = ['Purchase date cannot be more than current date'] return errors
def to_python(self, value): """ Validates that the input can be converted to a datetime. Returns a Python datetime.datetime object. """ if value in validators.EMPTY_VALUES: return self.default if isinstance(value, datetime.datetime): return from_current_timezone(value) if isinstance(value, datetime.date): result = datetime.datetime(value.year, value.month, value.day) return from_current_timezone(result) if isinstance(value, list): # Input comes from a SplitDateTimeWidget, for example. So, it's two # components: date and time. if value in validators.EMPTY_VALUES and value[1] in validators.EMPTY_VALUES: return self.default result = super(DateTimeField, self).to_python(value) return from_current_timezone(result)
def compress(self, data_list): if data_list: # Raise a validation error if time or date is empty # (possible if SplitDateTimeField has required=False). if data_list[0] in self.empty_values: raise ValidationError(self.error_messages['invalid_date'], code='invalid_date') if data_list[1] in self.empty_values: raise ValidationError(self.error_messages['invalid_time'], code='invalid_time') result = datetime.datetime.combine(*data_list) return from_current_timezone(result) return None
def to_python(self, value): try: result = super(FlexibleDateTimeField, self).to_python(value) return from_current_timezone(result) except ValidationError as e: pass try: return datetime.datetime.strptime(value, '%Y-%m-%dT%H:%M:%S.%fZ') except: pass raise ValidationError("invalid date time, does not match any formats")
def compress(self, data_list): if data_list: # Raise a validation error if time or date is empty # (possible if SplitDateTimeField has required=False). if data_list[0] in self.empty_values: raise ValidationError(self.error_messages['invalid_date']) if data_list[1] in self.empty_values: raise ValidationError(self.error_messages['invalid_time']) result = datetime.datetime.combine(*data_list) return from_current_timezone(result) return None
def compress(self, data_list): if data_list: # Raise a validation error if time or date is empty # (possible if SplitDateTimeField has required=False). if data_list[0] in validators.EMPTY_VALUES: raise ValidationError(self.error_messages["invalid_date"]) if data_list[1] in validators.EMPTY_VALUES: raise ValidationError(self.error_messages["invalid_time"]) result = datetime.datetime.combine(*data_list) return from_current_timezone(result) return None
def to_python(self, value): """ Validates that the input can be converted to a datetime. Returns a Python datetime.datetime object. """ if value in validators.EMPTY_VALUES: return self.default if isinstance(value, datetime.datetime): return from_current_timezone(value) if isinstance(value, datetime.date): result = datetime.datetime(value.year, value.month, value.day) return from_current_timezone(result) if isinstance(value, list): # Input comes from a SplitDateTimeWidget, for example. So, it's two # components: date and time. if value in validators.EMPTY_VALUES and value[ 1] in validators.EMPTY_VALUES: return self.default result = super(DateTimeField, self).to_python(value) return from_current_timezone(result)
def to_python(self, value): """ Validates that the input can be converted to a datetime. Returns a Python datetime.datetime object. """ if value in validators.EMPTY_VALUES: return None if isinstance(value, datetime.datetime): return from_current_timezone(value) if isinstance(value, datetime.date): result = datetime.datetime(value.year, value.month, value.day) return from_current_timezone(result) if isinstance(value, list): # Input comes from a SplitDateTimeWidget, for example. So, it's two # components: date and time. if len(value) != 2: raise ValidationError(self.error_messages["invalid"]) if value[0] in validators.EMPTY_VALUES and value[1] in validators.EMPTY_VALUES: return None value = "%s %s" % tuple(value) result = super(DateTimeField, self).to_python(value) return from_current_timezone(result)
def to_python(self, value): """ Validates that the input can be converted to a datetime. Returns a Python datetime.datetime object. """ if value in self.empty_values: return None if isinstance(value, datetime.datetime): return from_current_timezone(value) if isinstance(value, datetime.date): result = datetime.datetime(value.year, value.month, value.day) return from_current_timezone(result) if isinstance(value, list): # Input comes from a SplitDateTimeWidget, for example. So, it's two # components: date and time. if len(value) != 2: raise ValidationError(self.error_messages['invalid']) if value[0] in self.empty_values and value[1] in self.empty_values: return None value = '%s %s' % tuple(value) result = super(DateTimeField, self).to_python(value) return from_current_timezone(result)
def save(self, *args, **kwargs): # if self.byweekday: # self.byweekday = [str(day) for day in self.byweekday] if self.until: self.until = from_current_timezone(self.until) super(Rule, self).save(*args, **kwargs)
def display_object_history(request, obj_type="-", obj_ref="-", obj_revi="-", timeline=False, template="history.html"): """ History view. This view displays a history of the selected object and its revisions. :url: :samp:`/object/{obj_type}/{obj_ref}/{obj_revi}/history/` :url: :samp:`/user/{username}/history/` :url: :samp:`/group/{group_name}/history/` :url: :samp:`/timeline/` .. include:: views_params.txt **Template:** :file:`history.html` **Context:** ``RequestContext`` ``object_history`` list of :class:`.AbstractHistory` ``show_revisions`` True if the template should show the revision of each history row ``show_identifiers`` True if the template should show the type, reference and revision of each history row """ obj, ctx = get_generic_data(request, obj_type, obj_ref, obj_revi) form_date = forms.HistoryDateForm(request.GET if request.GET else None) if form_date.is_valid(): date_begin = form_date.cleaned_data["date_history_begin"] number_days = form_date.cleaned_data["number_days"] done_by = form_date.cleaned_data["done_by"] else: done_by = "" if 'date_history_begin' in request.GET: if len(request.GET['date_history_begin']) == 10 : date_begin = request.GET['date_history_begin'] date_begin = datetime.datetime(int(date_begin[:4]), int(date_begin[5:7]), int(date_begin[8:10])) else: date_begin = datetime.datetime.today() else : date_begin = datetime.datetime.today() number_days = 30 date_begin = from_current_timezone(date_begin) if date_begin > from_current_timezone(datetime.datetime.today()): date_begin = from_current_timezone(datetime.datetime.today()) date_end = date_begin - datetime.timedelta(days = int(number_days)) date_end = from_current_timezone(date_end) if timeline: # global timeline: shows objects owned by the company and readable objects ctx["timeline"] = True ctx['object_type'] = _("Timeline") form_object = forms.HistoryObjectForm(request.GET if request.GET else None) if form_object.is_valid(): display_part = form_object.cleaned_data["part"] display_document = form_object.cleaned_data["document"] display_group = form_object.cleaned_data["group"] else: display_part = True display_document = True display_group = True list_display = {"display_document": display_document, "display_part": display_part, "display_group" : display_group} history = models.timeline_histories(obj, from_current_timezone(date_begin + datetime.timedelta(days = 1)), date_end, done_by, list_display) ctx['form_object'] = form_object if display_document: display_document = 'on' if display_part: display_part = 'on' if display_group: display_group = 'on' ctx['display_document'] = display_document ctx['display_part'] = display_part ctx['display_group'] = display_group else: history = obj.histories history = history.filter(date__gte = date_end, date__lt = from_current_timezone(date_begin + datetime.timedelta(days = 1))) if done_by != "": if models.User.objects.filter(username= done_by).exists(): history = history.filter(user__username = done_by) else: history = history.none() messages.error(request, "This user doesn't exist") elif hasattr(obj, "revision"): # display history of all revisions ctx["show_revisions"] = True else: ctx["show_revisions"] = False history = history.select_related("plmobject", "user__profile") date_after = from_current_timezone(date_begin + datetime.timedelta(days = 1)) if date_after < from_current_timezone(datetime.datetime.today()): ctx['date_after'] = (date_begin + datetime.timedelta(days = number_days +1)).strftime('%Y-%m-%d') ctx.update({ 'date_before' : (date_begin - datetime.timedelta(days = number_days +1)).strftime('%Y-%m-%d'), 'form_date': form_date, 'date_begin_period' : date_begin.strftime('%Y-%m-%d'), 'date_end_period':date_end.strftime('%Y-%m-%d'), "number_days" : number_days, 'current_page' : 'history', 'object_history' : history, 'show_identifiers' : timeline }) return r2r(template, ctx, request)
def test_timeline(self): #Test for timeline's form date_begin = from_current_timezone(datetime.datetime.today() + datetime.timedelta(days=1)) date_end = from_current_timezone(datetime.datetime.today() - datetime.timedelta(days=30)) # document + part selected + no date specified response = self.get("/timeline/", {"part": "on", "document": "on"}) history = response.context["object_history"] self.assertEqual( list(history), list( m.History.objects.filter(date__gte=date_end, date__lt=date_begin))) # Only document selected + no date specified response = self.get("/timeline/", {"document": "on"}) history2 = response.context["object_history"] self.assertEqual( list(history2), list( m.History.objects.filter(date__gte=date_end, date__lt=date_begin, plmobject__type__in=m.document. get_all_documents().keys()))) # Only part selected + no date specified response = self.get("/timeline/", {"part": "on"}) history3 = response.context["object_history"] self.assertEqual( list(history3), list( m.History.objects.filter( date__gte=date_end, date__lt=date_begin, plmobject__type__in=m.part.get_all_parts().keys()))) # part + document selected and date specified / done_by not informed response = self.get( "/timeline/", { "part": "on", "document": "on", "date_history_begin": "2013-06-8", "number_days": "15" }) history4 = response.context["object_history"] date_begin = from_current_timezone(datetime.datetime(2013, 6, 9)) date_end = from_current_timezone(date_begin - datetime.timedelta(days=15)) self.assertEqual( list(history4), list( m.History.objects.filter(date__gte=date_end, date__lt=date_begin))) # part + document selected and date specified + done_by informed response = self.get( "/timeline/", { "part": "on", "document": "on", "date_history_begin": "2013-06-8", "number_days": "15", "done_by": "company" }) history5 = response.context["object_history"] self.assertEqual( list(history5), list( m.History.objects.filter(date__gte=date_end, date__lt=date_begin, user__username="******"))) # only group selected response = self.get( "/timeline/", { "group": "on", "date_history_begin": "2013-06-8", "number_days": "15", "done_by": "company" }) history6 = response.context["object_history"] self.assertEqual( list(history6), list( m.GroupHistory.objects.filter(date__gte=date_end, date__lt=date_begin, user__username="******")))
def display_object_history(request, obj_type="-", obj_ref="-", obj_revi="-", timeline=False, template="history.html"): """ History view. This view displays a history of the selected object and its revisions. :url: :samp:`/object/{obj_type}/{obj_ref}/{obj_revi}/history/` :url: :samp:`/user/{username}/history/` :url: :samp:`/group/{group_name}/history/` :url: :samp:`/timeline/` .. include:: views_params.txt **Template:** :file:`history.html` **Context:** ``RequestContext`` ``object_history`` list of :class:`.AbstractHistory` ``show_revisions`` True if the template should show the revision of each history row ``show_identifiers`` True if the template should show the type, reference and revision of each history row """ obj, ctx = get_generic_data(request, obj_type, obj_ref, obj_revi) form_date = forms.HistoryDateForm(request.GET if request.GET else None) if form_date.is_valid(): date_begin = form_date.cleaned_data["date_history_begin"] number_days = form_date.cleaned_data["number_days"] done_by = form_date.cleaned_data["done_by"] else: done_by = "" if 'date_history_begin' in request.GET: if len(request.GET['date_history_begin']) == 10: date_begin = request.GET['date_history_begin'] date_begin = datetime.datetime(int(date_begin[:4]), int(date_begin[5:7]), int(date_begin[8:10])) else: date_begin = datetime.datetime.today() else: date_begin = datetime.datetime.today() number_days = 30 date_begin = from_current_timezone(date_begin) if date_begin > from_current_timezone(datetime.datetime.today()): date_begin = from_current_timezone(datetime.datetime.today()) date_end = date_begin - datetime.timedelta(days=int(number_days)) date_end = from_current_timezone(date_end) if timeline: # global timeline: shows objects owned by the company and readable objects ctx["timeline"] = True ctx['object_type'] = _("Timeline") form_object = forms.HistoryObjectForm( request.GET if request.GET else None) if form_object.is_valid(): display_part = form_object.cleaned_data["part"] display_document = form_object.cleaned_data["document"] display_group = form_object.cleaned_data["group"] else: display_part = True display_document = True display_group = True list_display = { "display_document": display_document, "display_part": display_part, "display_group": display_group } history = models.timeline_histories( obj, from_current_timezone(date_begin + datetime.timedelta(days=1)), date_end, done_by, list_display) ctx['form_object'] = form_object if display_document: display_document = 'on' if display_part: display_part = 'on' if display_group: display_group = 'on' ctx['display_document'] = display_document ctx['display_part'] = display_part ctx['display_group'] = display_group else: history = obj.histories history = history.filter( date__gte=date_end, date__lt=from_current_timezone(date_begin + datetime.timedelta(days=1))) if done_by != "": if models.User.objects.filter(username=done_by).exists(): history = history.filter(user__username=done_by) else: history = history.none() messages.error(request, "This user doesn't exist") elif hasattr(obj, "revision"): # display history of all revisions ctx["show_revisions"] = True else: ctx["show_revisions"] = False history = history.select_related("plmobject", "user__profile") date_after = from_current_timezone(date_begin + datetime.timedelta(days=1)) if date_after < from_current_timezone(datetime.datetime.today()): ctx['date_after'] = ( date_begin + datetime.timedelta(days=number_days + 1)).strftime('%Y-%m-%d') ctx.update({ 'date_before': (date_begin - datetime.timedelta(days=number_days + 1)).strftime('%Y-%m-%d'), 'form_date': form_date, 'date_begin_period': date_begin.strftime('%Y-%m-%d'), 'date_end_period': date_end.strftime('%Y-%m-%d'), "number_days": number_days, 'current_page': 'history', 'object_history': history, 'show_identifiers': timeline }) return r2r(template, ctx, request)
def set_options(self, options): """ Sets which kind of edges should be inserted. Options is a dictionary(*option_name* -> boolean) The option *only_search_results* enables results filtering. If the root is a :class:`.PartController`, valid options are: ========== ====================================================== Name Description ========== ====================================================== child If True, adds recursively all children of the root parents If True, adds recursively all parents of the root doc If True, adds documents attached to the parts owner If True, adds the owner of the root signer If True, adds the signers of the root notified If True, adds the notified of the root ========== ====================================================== If the root is a :class:`.DocumentController`, valid options are: ========== ====================================================== Name Description ========== ====================================================== parts If True, adds parts attached to the root owner If True, adds the owner of the root signer If True, adds the signers of the root notified If True, adds the notified of the root ========== ====================================================== If the root is a :class:`.UserController`, valid options are: ========================== ====================================== Name Description ========================== ====================================== owned If True, adds all plmobjects owned by the root to_sign If True, adds all plmobjects signed by the root request_notification_from If True, adds all plmobjects which notifies the root ========================== ====================================== """ self.options.update(options) if self.options["prog"] == "twopi": self.graph.graph_attr["ranksep"] = "1.2" date = self.options.get("date") time = self.options.get("time") if date is not None or time is not None: if date == datetime.date.today() and time is None: self.time = None else: time = time or datetime.time() date = date or datetime.date.today() self.time = datetime.datetime.combine(date or datetime.date.today(), time) self.time = from_current_timezone(self.time) else: self.time = None
def compress(self, values): if values: untildate = from_current_timezone(datetime(values[1])) return {'byweekday':values[0],'until':untildate} return {}
def save(self, *args, **kwargs): if self.allday == True: self.startdatetime = from_current_timezone(datetime(self.startdatetime.year, self.startdatetime.month, self.startdatetime.day)) self.enddatetime = from_current_timezone(datetime(self.startdatetime.year, self.startdatetime.month, self.startdatetime.day + timedelta(days=1))) super(Event, self).save(*args, **kwargs)