def data_generator(self, request, data): """Modify the standard data generation method so that links to date archive are generated""" request = djp.request prefix = djp.prefix wrapper = djp.wrapper date = None render = loader.render Context = loader.context_class for obj in data: content = self.object_content(djp, obj) dt = getattr(obj, self.date_code) ddate = dt.date() if self.split_days and (not date or date != ddate): urlargs = djp.kwargs.copy() urlargs.pop("year", None) urlargs.pop("month", None) urlargs.pop("day", None) content["year"] = {"url": self.yearurl(request, dt.year, **urlargs), "value": dt.year} content["month"] = { "url": self.monthurl(request, dt.year, dt.month, **urlargs), "value": to_string(MONTHS[dt.month]), } content["day"] = {"url": self.dayurl(request, dt.year, dt.month, dt.day, **urlargs), "value": dt.day} content["wday"] = to_string(WEEKDAYS_ABBR[dt.weekday()]) date = ddate yield render(self.get_item_template(obj, wrapper), Context(content))
def _unwind(self): '''unwind the form by building bound fields and validating if it is bound.''' if hasattr(self,'_data'): return self._data = data = {} self._cleaned_data = cleaned = {} self._errors = errors = {} rawdata = self.additional_data() if rawdata: rawdata.update(self.rawdata) else: rawdata = self.rawdata files = self._files self._fields = fields = [] self._fields_dict = dfields = {} prefix = self.prefix self.initial = initial = self.initial is_bound = self.is_bound form_message = self.form_message # Loop over form fields for name, field in iteritems(self.base_fields): bfield = BoundField(self, field, name, self.prefix) key = bfield.html_name fields.append(bfield) dfields[name] = bfield field_value = None if is_bound: rawvalue = field_value = field.value_from_datadict( rawdata, files, key) if rawvalue not in NOTHING: self.changed = True data[name] = rawvalue try: value = bfield.clean(rawvalue) func_name = 'clean_' + name if hasattr(self, func_name): value = getattr(self, func_name)(value) cleaned[name] = value except ValidationError as e: form_message(errors, name, to_string(e)) elif name in initial: data[name] = field_value = initial[name] bfield.value = field_value if is_bound and not errors: # Invoke the form clean method. Usefull for last minute # checking or cross field checking try: self.clean() except ValidationError as e: form_message(errors, '__all__', to_string(e)) del self._cleaned_data else: del self._cleaned_data
def _unwind(self): '''unwind the form by building bound fields and validating if it is bound.''' if hasattr(self, '_data'): return self._data = data = {} self._cleaned_data = cleaned = {} self._errors = errors = {} rawdata = self.additional_data() if rawdata: rawdata.update(self.rawdata) else: rawdata = self.rawdata files = self._files self._fields = fields = [] self._fields_dict = dfields = {} prefix = self.prefix self.initial = initial = self.initial is_bound = self.is_bound form_message = self.form_message # Loop over form fields for name, field in iteritems(self.base_fields): bfield = BoundField(self, field, name, self.prefix) key = bfield.html_name fields.append(bfield) dfields[name] = bfield field_value = None if is_bound: rawvalue = field_value = field.value_from_datadict( rawdata, files, key) if rawvalue not in NOTHING: self.changed = True data[name] = rawvalue try: value = bfield.clean(rawvalue) func_name = 'clean_' + name if hasattr(self, func_name): value = getattr(self, func_name)(value) cleaned[name] = value except ValidationError as e: form_message(errors, name, to_string(e)) elif name in initial: data[name] = field_value = initial[name] bfield.value = field_value if is_bound and not errors: # Invoke the form clean method. Usefull for last minute # checking or cross field checking try: self.clean() except ValidationError as e: form_message(errors, '__all__', to_string(e)) del self._cleaned_data else: del self._cleaned_data
def nicerepr(val, nd=None, none_value=NONE_VALUE, dateformat=None, timeformat=None, settings=None, **kwargs): '''Prettify a value to be displayed in html. :parameter val: value to prettify. :parameter nd: numerical accuracy for floating point numbers. ''' if val is None: return NONE_VALUE elif is_safe(val): return val elif isinstance(val, date): return smart_time(val, dateformat, timeformat, settings) elif isinstance(val, bool): if val: return with_icon('true') else: return with_icon('false') elif hasattr(val, '_meta'): return val._meta.name else: val = to_string(val) try: return significant_format(val, n=nd) except ValueError: if val.startswith('http://') or val.startswith('https://'): val = mark_safe('<a href="{0}">{0}</a>'.format(val)) return val
def on_submit(self, commit): if commit: text = self.cleaned_data.get('text') if text: user = self.request.user msg = json.dumps({'user': to_string(user), 'message': text}) self.request.appmodel.publish('chat', msg) return True
def values(self, bfield): '''Generator of values in select''' for o in self.all(bfield): if isinstance(o, Widget): v = o.attr('value') else: v = to_string(o[0]) yield v
def __init__(self, offset): if isinstance(offset, timedelta): self.__offset = offset offset = self.__offset.seconds // 60 else: self.__offset = timedelta(minutes=offset) sign = offset < 0 and "-" or "+" self.__name = to_string("%s%02d%02d" % (sign, abs(offset) / 60.0, abs(offset) % 60))
def _all_choices(self, bfield, selected): if bfield: choices = bfield.field.choices for opt in choices.all(bfield, html=True): if not isinstance(opt, Widget): opt = Widget('option', opt[1], value=to_string(opt[0])) if opt.attr('value') in selected: opt.addAttr('selected', 'selected') yield opt
def tohtml(self, text): if not text: return '' mkp = markups.get(self.markup) if mkp: handler = mkp.get('handler') text = handler(text) text = loader.mark_safe(to_string(text)) return text
def render(self, request, content=None, **kwargs): instance = self.get_object(request, content) if instance: request = request.for_model(instance=instance, name=self.view) if request: return request.render(**kwargs) else: return to_string(instance) else: return ''
def __init__(self, offset): if isinstance(offset, timedelta): self.__offset = offset offset = self.__offset.seconds // 60 else: self.__offset = timedelta(minutes=offset) sign = offset < 0 and '-' or '+' self.__name = to_string("%s%02d%02d" % (sign, abs(offset) / 60., abs(offset) % 60))
def _clean_simple(self, value, bfield): '''Invoked by :meth:`clean` if :attr:`model` is not defined.''' ch = set(self.values(bfield)) values = value if self.multiple else (value, ) if not isinstance(values, (list, tuple)): raise ValidationError('Critical error. {0} is not a list'\ .format(values)) for v in values: v = to_string(v) if v not in ch: raise ValidationError('%s is not a valid choice' % v) return value
def _clean_simple(self, value, bfield): '''Invoked by :meth:`clean` if :attr:`model` is not defined.''' ch = set(self.values(bfield)) values = value if self.multiple else (value,) if not isinstance(values, (list, tuple)): raise ValidationError('Critical error. {0} is not a list'\ .format(values)) for v in values: v = to_string(v) if v not in ch: raise ValidationError('%s is not a valid choice' % v) return value
def data_generator(self, request, data): '''Modify the standard data generation method so that links to date archive are generated''' request = djp.request prefix = djp.prefix wrapper = djp.wrapper date = None render = loader.render Context = loader.context_class for obj in data: content = self.object_content(djp, obj) dt = getattr(obj, self.date_code) ddate = dt.date() if self.split_days and (not date or date != ddate): urlargs = djp.kwargs.copy() urlargs.pop('year', None) urlargs.pop('month', None) urlargs.pop('day', None) content['year'] = { 'url': self.yearurl(request, dt.year, **urlargs), 'value': dt.year } content['month'] = { 'url': self.monthurl(request, dt.year, dt.month, **urlargs), 'value': to_string(MONTHS[dt.month]) } content['day'] = { 'url': self.dayurl(request, dt.year, dt.month, dt.day, **urlargs), 'value': dt.day } content['wday'] = to_string(WEEKDAYS_ABBR[dt.weekday()]) date = ddate yield render(self.get_item_template(obj, wrapper), Context(content))
def set_value(self, val, widget): # Set the value. We use the widget bound field to do that bfield = widget.internal.get('bfield', None) if bfield: val = bfield.field.choices.html_value(val) multiple = bool(widget.attr('multiple')) if val: if not multiple: val = (val,) selected = tuple((to_string(v) for v in val)) else: selected = () if selected and multiple: widget.add(self._all_ordered_choices(bfield, selected)) else: widget.add(self._all_choices(bfield, selected))
def set_value(self, val, widget): # Set the value. We use the widget bound field to do that bfield = widget.internal.get('bfield', None) if bfield: val = bfield.field.choices.html_value(val) multiple = bool(widget.attr('multiple')) if val: if not multiple: val = (val, ) selected = tuple((to_string(v) for v in val)) else: selected = () if selected and multiple: widget.add(self._all_ordered_choices(bfield, selected)) else: widget.add(self._all_choices(bfield, selected))
def _clean(self, value, bfield): try: value = to_string(value) except: raise ValidationError() if self.toslug: value = slugify(value, self.toslug) if self.char_transform: if self.char_transform == 'u': value = value.upper() else: value = value.lower() if self.required and not value: raise ValidationError( self.validation_error.format(bfield.name,value)) return value
def _clean(self, value, bfield): try: value = to_string(value) except: raise ValidationError() if self.toslug: value = slugify(value, self.toslug) if self.char_transform: if self.char_transform == 'u': value = value.upper() else: value = value.lower() if self.required and not value: raise ValidationError( self.validation_error.format(bfield.name, value)) return value
def _unwind(self): if hasattr(self,'_forms'): return related_form = self.related_form if related_form is None: raise ValueError('Related form not specified') self.prefix = '{0}_{1}_'.format(related_form.prefix or '', self.name) errors = self._errors = {} forms = self._forms = [] is_bound = self.is_bound nf = '{0}{1}'.format(self.prefix, self.NUMBER_OF_FORMS_CODE) instances = [] if is_bound: if nf not in related_form.rawdata: raise ValidationError(\ 'Could not find number of "{0}" forms'.format(self.name)) num_forms = int(related_form.rawdata[nf]) else: related = related_form.instance num_forms = 0 if related is not None and related.id: if self.instances_from_related: instances = self.instances_from_related(related) else: instances = self.mapper.filter(\ **{self.related_name:related}) instances = list(instances) num_forms = self.extra_length + len(instances) num_forms = max(num_forms, self.initial_length) self.num_forms = HiddenInput(name=nf, value=num_forms) for idx,instance in zip_longest(range(num_forms),instances): f = self.get_form(self.prefix, idx, instance) if f is not None: forms.append(f) errors.update(f.errors) if is_bound and not errors and self.clean: try: self.clean(self) except ValidationError as e: self.form.add_error(to_string(e))
def _unwind(self): if hasattr(self, "_forms"): return related_form = self.related_form if related_form is None: raise ValueError("Related form not specified") self.prefix = "{0}_{1}_".format(related_form.prefix or "", self.name) errors = self._errors = {} forms = self._forms = [] is_bound = self.is_bound nf = "{0}{1}".format(self.prefix, self.NUMBER_OF_FORMS_CODE) instances = [] if is_bound: if nf not in related_form.rawdata: raise ValidationError('Could not find number of "{0}" forms'.format(self.name)) num_forms = int(related_form.rawdata[nf]) else: related = related_form.instance num_forms = 0 if related is not None and related.id: if self.instances_from_related: instances = self.instances_from_related(related) else: instances = self.mapper.filter(**{self.related_name: related}) instances = list(instances) num_forms = self.extra_length + len(instances) num_forms = max(num_forms, self.initial_length) self.num_forms = HiddenInput(name=nf, value=num_forms) for idx, instance in zip_longest(range(num_forms), instances): f = self.get_form(self.prefix, idx, instance) if f is not None: forms.append(f) errors.update(f.errors) if is_bound and not errors and self.clean: try: self.clean(self) except ValidationError as e: self.form.add_error(to_string(e))
def __unicode__(self): return to_string(self.__class__.__name__)
def __lt__(self, other): if isinstance(other,self.__class__): return to_string(self) < to_string(other) else: raise TypeError('Cannot compare {0} with {1}'.format(self,other))
def __unicode__(self): return to_string(self.tocss())
def tzname(self, dt): try: return to_string(time.tzname[self._isdst(dt)], DEFAULT_LOCALE_ENCODING) except UnicodeDecodeError: return None
def __repr__(self): return to_string(self._tzname)
def title(self, request): m = request.urlargs["month"] m = self.appmodel.get_month_number(m) return to_string(MONTHS[m])
def test_force_str(self): ts = b'test string' self.assertEqual(to_string(ts), 'test string')
def get_month_value(self, month): return to_string(MONTHS_3.get(month))
def title(self, request): m = request.urlargs['month'] m = self.appmodel.get_month_number(m) return to_string(MONTHS[m])
def format(value, format_string): "Convenience function" df = DateFormat(value) return to_string(df.format(format_string))
def pieces(self, formatstr): for i, piece in enumerate(re_formatchars.split(to_string(formatstr))): if i % 2: yield to_string(getattr(self, piece)()) elif piece: yield re_escaped.sub(r'\1', piece)
def __lt__(self, other): if isinstance(other, self.__class__): return to_string(self) < to_string(other) else: raise TypeError("Cannot compare {0} with {1}".format(self, other))