def validate_field(field, supplied): value = None if not supplied: if field.required: return None, "%s is a required field" % field.name else: return supplied, '' if field.max_length and field.max_length < len(supplied): return None, "%s must be less than %s characters." % (field.name, field.max_length) if field.type == 'email' and not utils.is_valid_email(supplied): return None, "%s is not valid" % field.name if field.type in ['datetime', 'date'] and supplied: value = utils.default_time_parse(supplied) if not value: return None, "%s is invalid" % field.name value = value or supplied return value, ''
def read(self, request, namespace, collection, response, id=None): try: collection = Collection.objects.get((Q(name=collection) | Q(object_name=collection) | Q(list_name=collection)), namespace__name=namespace) except Collection.DoesNotExist: return response.send(errors='Not found', status=404) query = {} db = settings.CONN[namespace] coll = db[collection.name] if collection.login_required: if not request.user.is_authenticated(): return response.send(errors="Unauthorized", status=401) if collection.private_ownership: query['owner_id'] = request.user.id if id: query['_id'] = ObjectId(id) d = coll.find_one(query) response.set(**{collection.object_name or namespace.name: d}) if request.GET.get('since'): query['when_created'] = {'$gte': utils.default_time_parse(request.GET.get('since'))} if collection.enforce_schema: fields = CollectionField.objects.filter(collection=collection) for field in fields: if field.name in request.GET: if field.type in consts.FIELD_TYPES_REGEX: query_val = re.compile(request.GET.get(field.name), re.IGNORECASE) else: query_val = request.GET(field.name) query[field.name] = query_val else: query.update(dict((k, v) for k, v in request.GET.iteritems() if k not in keywords)) d = list(coll.find(query)) response.set(**{collection.list_name or namespace.name: d}) return response.send()