def test_basic(self): "just some very basic test to make sure it doesn't break on start :)" class Person(Document): structure = {'name': unicode, 'age': int} validators = {'name':[required()]} john = Person() PersonForm = document_form_factory(Person) form = PersonForm(name=u'John Doe', age=123) form.populate_obj(john) assert john.name == u'John Doe' assert john.age == 123
def object_detail(request, namespace, model_name, pk=None): db = default_storage() model = _get_model(namespace, model_name) if pk: try: obj = db.get(model, pk) except doqu.validators.ValidationError: # Whoops, the data doesn't fit the schema. Let's try converting. obj = db.get(Document, pk) obj = obj.convert_to(model) creating = False else: obj = model() creating = True if not creating and request.form.get('DELETE'): # TODO: confirmation screen. # List related objects, ask what to do with them (cascade/ignore/..) obj.delete() return redirect_to('tool.ext.admin.views.object_list', namespace=namespace, model_name=model_name) DocumentForm = document_form_factory(model, db) if not model.meta.structure: for k in obj: setattr(DocumentForm, k, wtforms.fields.TextField(k.title().replace('_',' '))) form = DocumentForm(request.form, obj) for name in _get_excluded_names(model): del form[name] message = None if request.method == 'POST' and form.validate(): form.populate_obj(obj) #assert 0==1, 'DEBUG' #if not __debug__: obj.save(db) # storage can be omitted if not creating obj # TODO: move this to request.session['messages'] or smth like that message = u'%s has been saved.' % obj.__class__.__name__ #if creating: # redirect to the same view but change URL # from ".../my_model/add/" to # to the editing URL ".../my_model/123/" # ...hmm, we *should* redirect even after editing an existing item return redirect_to('tool.ext.admin.views.object_detail', namespace=namespace, model_name=model_name, pk=obj.pk) obj_url = _get_url_for_object(obj) # objects of other models that are known to reference this one references = {} for model, attrs in model.meta.referenced_by.iteritems(): for attr in attrs: qs = model.objects(db).where(**{attr: obj.pk}) if qs.count(): references.setdefault(model, {})[attr] = qs return { 'namespace': namespace, 'object': obj, 'object_url': obj_url, 'form': form, 'message': message, 'references': references, 'other_doc_types': env('registered_models'), }