def match(self, site, stream_path, tag=None): if stream_path.startswith(self.prefix) and \ stream_path.endswith(self.suffix): param_item_id_str = stream_path[len(self.prefix):] if self.suffix: param_item_id_str = param_item_id_str[:-len(self.suffix)] param_stream = site.retrieveStream(self.paramStream, tag=site.transmitTag(tag)) try: param_item_id = \ param_stream.fields.id.convertFromString(param_item_id_str, param_stream) except ValueError: return param_item = param_stream.retrieveItem(param_item_id) if param_item is None: # no such item return params = self.streamParams.copy() params[self.paramName] = param_item if self.titleTemplate is not None: params['title'] = interpolateString(self.titleTemplate, params) return self.templateStream, params else: return
def convertFromForm(self, form, name, item=None): value = form.getfirst(name, '').strip() if not value and self.allowNull: return try: # DateTime.strptime is not available on Windows return DateTime.DateTime(*time.strptime(value, self.format)[:6]) except: message = qUtils.interpolateString(self.error_message, {'brick': self}) raise self.InvalidFieldContent(message)
def convertFromForm(self, form, name, item=None): value = form.getString(name, '').strip() if self.allowNull and not value: return None if len(value) < self.minlength or len(value) > self.maxlength: message = qUtils.interpolateString(self.length_error_message, {'brick': self}) raise self.InvalidFieldContent(message) if self.pattern and not re.match(self.pattern, value): raise self.InvalidFieldContent(self.not_match_error_message) return value
def convertFromForm(self, form, name, item): value = form.getfirst(name, '').strip() old_value = getattr(item, name) if value or not old_value: if len(value)<self.minlength: message = qUtils.interpolateString(self.too_short_message, {'brick': self}) raise self.InvalidFieldContent(message) confirm = form.getfirst(name+'-confirm', '').strip() if value!=confirm: message = qUtils.interpolateString( self.confirmation_failed_message, {'brick': self}) raise self.InvalidFieldContent(message) try: value = str(value) except UnicodeEncodeError: raise self.InvalidFieldContent(self.encoding_failed_message) return self.crypt(value) else: # leave unchanged return old_value
def convertFromForm(self, form, name, item=None): value = form.getfirst(name, '').strip() if not value: if self.allowNull: return else: value = self.getDefault(item) message = qUtils.interpolateString(self.error_message, {'brick': self}) try: value = self.type(value) except ValueError: raise self.InvalidFieldContent(message) if self.minValue<=value<=self.maxValue: return value else: raise self.InvalidFieldContent(message)
def convertFromForm(self, form, name, item=None): value = STRING.convertFromForm(self, form, name, item) if value is None: return value # NULL (if allowed) is not required to be unique from qps.qDB.qSQL import Query, Param conn = item.dbConn query = Query("%s=" % name, Param(self.convertToDB(value, item))) if item.exists(): query = conn.join([query, Query("%s !=" % item.fields.idFieldName, Param(item.id))]) row = conn.selectRow(item.stream.tableName, [name], query) if row: message = qUtils.interpolateString(self.unique_error, {'brick': self}) raise self.InvalidFieldContent(message) return value
def pattern(self): namespace = self.item.site.globalNamespace.copy() namespace.update({'brick': self.item}) return qUtils.interpolateString(self.path_template, namespace)
def getIndexLabel(self, value): count = len(value) return qUtils.interpolateString(self.countTemplate, {'count': count})
def getLabel(self, item): namespace = item.site.globalNamespace.copy() namespace.update({'brick': item}) return qUtils.interpolateString(self.labelTemplate, namespace)
def _stream_params(self, item): stream = qUtils.interpolateString( self.streamTemplate, {'item': item, 'field': self}) return (stream, item.stream.tag)
def getLabel(self, item): '''Return label for option defined by item''' namespace = item.site.globalNamespace.copy() namespace.update({'brick': item}) return qUtils.interpolateString(self.labelTemplate, namespace)
def _cookiePath(self, publisher): return qUtils.interpolateString(self.cookiePathTmpl, {'publisher': publisher})