Пример #1
0
 def edit_topic_get(self):
     edit_form = Form(self.request.topic.edit_schema().bind(request=self.request), buttons=('save',))
     return {
         'page_title': 'Edit Topic',
         'username': self.request.username,
         'edit_form': edit_form.render(self.request.topic.__dict__)
     }
Пример #2
0
    def new(self):
        """ create new model object """
        schema = self.context.schema.bind(db_session=self.context.db_session)
        form = Form(schema, buttons=('add',))
        resources = form.get_widget_resources()
        js_resources = resources['js']
        css_resources = resources['css']
        js_links = [self.request.static_url(r) for r in js_resources]
        css_links = [self.request.static_url(r) for r in css_resources]
        js_tags = [literal('<script type="text/javascript" src="%s"></script>' % link)
                   for link in js_links]
        css_tags = [literal('<link rel="stylesheet" href="%s"/>' % link)
                    for link in css_links]
        resource_tags = js_tags + css_tags

        if self.request.method == 'POST':
            controls = self.request.params.items()
            try:
                params = form.validate(controls)
                item = self.context.add(params)
                del self.request.matchdict['traverse']
                location = self.request.resource_url(
                    self.context,
                    route_name=self.request.matched_route.name,
                    route_kw=self.request.matchdict)

                return HTTPFound(location=location)

            except ValidationFailure as e:
                return dict(form=e.render(), resource_tags=resource_tags)
        return dict(form=form.render(), resource_tags=resource_tags)
Пример #3
0
 def edit_question_get(self):
     edit_form = Form(self.request.question.edit_schema().bind(request=self.request), buttons=('save',))
     return {
         'page_title': 'Edit Question',
         'username': self.request.username,
         'edit_form': edit_form.render(self.request.question.__dict__),
     }
Пример #4
0
 def get_question_creation_form(self):
     try:
         schema, _ = forms.get_question_creation_schema(self.request.GET)
         action = self.request.route_path('create_question', question_set_id=self.request.GET['question_set_id'])
         form = Form(schema.bind(request=self.request), buttons=('create',), action=action)
         return Response(body=form.render())
     except Exception as _:
         return HTTPClientError()
Пример #5
0
 def register(self):
     schema = forms.RegistrationSchema().bind(request=self.request)
     form = Form(schema, buttons=('submit',))
     if self.request.method == 'POST' and 'submit' in self.request.POST:
         try:
             appstruct = form.validate(self.request.POST.items())
             user = User.create(appstruct, self.request.db)
             Session.login(self.request.session, user)
             return HTTPFound(self.request.route_url('profile'))
         except ValueError as e:
             exc = colander.Invalid(form.widget, str(e))
             form.widget.handle_error(form,exc)
             rendered_form = form.render()
         except ValidationFailure as e:
             rendered_form = e.render()
     else:
         rendered_form = form.render()
     return {'page_title':'Register', 'form':rendered_form}
Пример #6
0
    def login(self):
        schema = forms.LoginSchema().bind(request=self.request)
        form = Form(schema, buttons=('Login',))

        if self.request.method == 'POST' and 'Login' in self.request.POST:
            try:
                appstruct = form.validate(self.request.POST.items())
                user = User.login(appstruct, self.request.db)
                if user:
                    Session.login(self.request.session, user)
                    return HTTPFound(self.request.route_url('profile'))
                else:
                    exc = colander.Invalid(form.widget, 'Username or password is incorrect.')
                    form.widget.handle_error(form, exc)
                    rendered_form = form.render()
            except ValidationFailure as e:
                rendered_form = e.render()
        else:
            rendered_form = form.render()
        return {'page_title':'Login','form':rendered_form}
Пример #7
0
 def edit_topic_post(self):
     template_vars = {'page_title': 'Edit Topic', 'username': self.request.username}
     try:
         edit_form = Form(self.request.topic.edit_schema().bind(request=self.request), buttons=('save',))
         appstruct = edit_form.validate(self.request.POST.items())
         self.request.topic.edit(appstruct, self.request.db)
         return HTTPFound(self.request.route_url('profile'))
     except ValueError as e:
         exc = colander.Invalid(edit_form.widget, str(e))
         edit_form.widget.handle_error(edit_form, exc)
         template_vars['edit_form'] = edit_form.render()
     except ValidationFailure as e:
         template_vars['edit_form'] = e.render()
     return template_vars
Пример #8
0
 def setup(self):
     question_set_id = self.request.question_set.id
     set_name = self.request.question_set.description
     question_set = self.request.question_set.get_questions(self.request.db)
     try:
         template_vars = {'page_title':'Answer', 'username': self.request.username} #Need better title.
         self.request.session[Session.QUESTION_STATE] = QuestionSetState(question_set, question_set_id, set_name)
         question = self.request.session[Session.QUESTION_STATE].get_current_question()
         schema = question.answer_schema(self.request)
         question_form = Form(schema, buttons=('submit',))
         template_vars['question_form'] = question_form.render()
         return template_vars
     except ValueError as e:
         self.request.session.flash(str(e))
         return HTTPFound(self.request.route_url('profile'))
Пример #9
0
 def render_results_view(self):
     strDisp = ""
     if self.data is not None:
         for field in self.data:
             #Allows for concatenation for display
             title = field['title']
             description = field['description']
             field_type = field['field_type']
             
             #concatenating the data
             strDisp = strDisp.concatenate(' %s %s %s ' % (title, description, field_type))
         
     #temporary schema to see if the results are being transferred
     schism = TextSchema().bind(type = ['turtle','peacock'])        
     form = Form(schism,button=('save',))
     #return HTTPFound(strDisp)
     return {'form':form.render(),'form_resources':form.get_widget_resources(None)}
Пример #10
0
    def edit_question_post(self):
        template_vars = {'page_title': 'Edit Question', 'username': self.request.username}
        if 'save' in self.request.POST:
            edit_form = Form(self.request.question.edit_schema().bind(request=self.request), buttons=('save',))
            try:
                appstruct = edit_form.validate(self.request.POST.items())
                self.request.question.edit(appstruct, self.request.db)
                #Temporary, need to redirect to question set page
                return HTTPFound(self.request.route_url('profile'))
            except ValueError as e:
                exc = colander.Invalid(edit_form.widget, str(e))
                edit_form.widget.handle_error(edit_form,exc)
                template_vars['edit_form'] = edit_form.render()
            except ValidationFailure as e:
                template_vars['edit_form'] = e.render()
        else:
            return HTTPFound(self.request.route_url('profile'))

        return template_vars
Пример #11
0
    def __call__(self):
        schema = self.context.schema.bind(db_session=self.context.db_session)
        form = Form(schema, buttons=('save',))
        resources = form.get_widget_resources()
        js_resources = resources['js']
        css_resources = resources['css']
        js_links = [self.request.static_url(r) for r in js_resources]
        css_links = [self.request.static_url(r) for r in css_resources]
        js_tags = [literal('<script type="text/javascript" src="%s"></script>' % link)
                   for link in js_links]
        css_tags = [literal('<link rel="stylesheet" href="%s"/>' % link)
                    for link in css_links]
        resource_tags = js_tags + css_tags

        if self.request.method == 'POST':
            controls = self.request.params.items()
            try:
                params = form.validate(controls)
            except ValidationFailure as e:
                return dict(form=e.render(), resource_tags=resource_tags)
        return dict(form=form.render(self.context.appstruct),
                    resource_tags=resource_tags)
Пример #12
0
 def create_question(self):
     template_vars = {
         'page_title': 'Create Question',
         'username': self.request.username,
         'question_choices': forms.get_question_select_options(self.request.route_url('question_creation_form')),
     }
     if self.request.method == 'POST':
         try:
             schema, question_type = forms.get_question_creation_schema(self.request.POST)
             action = self.request.route_path('create_question', question_set_id=self.request.question_set.id)
             form = Form(schema.bind(request=self.request), buttons=('create',), action=action)
             appstruct = form.validate(self.request.POST.items())
             question_set_id = self.request.matchdict['question_set_id']
             Question.create(question_set_id, appstruct, self.request.db)
             return HTTPFound(self.request.route_url('profile'))
         except ValueError as e:
             exc = colander.Invalid(form.widget, str(e))
             form.widget.handle_error(form,exc)
             template_vars['form'] = (question_type, form.render())
         except ValidationFailure as e:
             template_vars['form'] = (question_type, e.render())
     return template_vars
Пример #13
0
    def answer(self):
        if 'submit' in self.request.POST and Session.QUESTION_STATE in self.request.session:
            template_vars = {'page_title':'Answer', 'username': self.request.username}
            try:
                #Store the previous question's answer.
                question = self.request.session[Session.QUESTION_STATE].get_current_question()
                schema = question.answer_schema(self.request)
                question_form = Form(schema)
                appstruct = question_form.validate(self.request.POST.items())
                self.request.session[Session.QUESTION_STATE].record_answer(appstruct['answer'])

                #Present the next question.
                question = self.request.session[Session.QUESTION_STATE].get_next_question()
                if question:
                    schema = question.answer_schema(self.request)
                    question_form = Form(schema, buttons=('submit',))
                    template_vars['question_form'] = question_form.render()
                else:
                    return HTTPFound(self.request.route_url('report'))
            except ValidationFailure as e:
                template_vars['question_form'] = e.render()
            return template_vars
        else:
            return HTTPFound(self.request.route_url('profile'))
def get_method_schema_preview(method_schema_id):
    """
    Create and render the method schema identified by method_schema_id as HTML.

    :param method_schema_id: ID of the MethodSchema to preview.
    :return: Deform rendered HTML form for the identified MethodSchema (Note: The <form> element is removed).
    """
    method_schema = DBSession.query(MethodSchema).filter_by(id=method_schema_id).first()
    if method_schema is None:
        return "<p>Please create your data mapping using the standardised and custom fields.</p>"

    model_schema = DataTypeSchema(method_schema)

    # Create a dummy request object to make file upload widgets display properly for preview purposes.
    settings = {'workflows.files': "./"}
    Registry = namedtuple('registry', 'settings')
    Request = namedtuple('registry', ['registry', 'session'])
    dummy_request = Request(registry=Registry(settings=settings), session=DummySession())

    model_schema._bind({'request': dummy_request})   # Use _bind instead of bind so the schema isn't cloned
    form = Form(model_schema, action="")
    display = form.render({})
    display = display[display.index(">")+1:].replace("</form>", "").strip()
    return display
Пример #15
0
def gamedep_add_binary(context, request):
    check_owner(context, request)
    gamedeptype = request.matchdict.get('type')
    g = GameDepLib(gamedeptype)
    page_id = request.matchdict.get('page_id')
    binary_id = request.matchdict.get('binary_id')
    revision = request.matchdict.get('revision')
    edittype = request.matchdict.get('edittype')

    try:
        bin_obj = g.show_binary(binary_id)
    except GameDepNotFound:
        bin_obj = None

    if binary_id and edittype:
        pass

    # Initialise form library
    if not binary_id and not edittype:
        schema = AddBinarySchema()
    elif binary_id and edittype == "1":
        schema = EditBinarySchema()
    elif binary_id and edittype == "2":
        schema = EditOSArchSchema()
    else:
        request.session.flash(s.show_setting("ERROR_INVALID_BINARY_ID"), ERROR)
        return redirect(request, "gamedep_item", page_id=page_id,
                        type=gamedeptype)

    schema = schema.bind(gamedep_type=gamedeptype, bin_obj=bin_obj,
                         req_file_folder=["%s/" % page_id])
    myform = Form(schema, buttons=['submit'])
    reqts = myform.get_widget_resources()

    if 'submit' in request.POST:
        controls = request.POST.items()
        try:
            deserialized = myform.validate(controls)
        except ValidationFailure as e:
            # Failed validation
            return {'page_id': page_id, 'form': e.render(),
                    'js_links': reqts['js']}

        # Form submitted, all validated!
        binary = deserialized.get("binary")
        operatingsystem = deserialized.get("operatingsystem")
        architecture = deserialized.get("architecture")
        if not binary_id and not edittype:
            g.create_binary(page_id, revision, operatingsystem, architecture,
                            binary['fp'], binary['mimetype'],
                            binary['filename'], request)
            request.session.flash(s.show_setting("INFO_BINARY_ADDED")
                                  % binary['filename'], INFO)
        else:
            g.update_binary(page_id, revision, binary_id, operatingsystem,
                            architecture, binary, request)
            request.session.flash(s.show_setting("INFO_BINARY_UPDATED")
                                  % binary['filename'], INFO)
        return redirect(request, "gamedep_item", page_id=page_id,
                        type=gamedeptype)
    # Display default form
    return {'page_id': page_id, 'form': myform.render(),
            'js_links': reqts['js']}
Пример #16
0
def gamedep_add_binary(context, request):
    check_owner(context, request)
    gamedeptype = request.matchdict.get('type')
    g = GameDepLib(gamedeptype)
    page_id = request.matchdict.get('page_id')
    binary_id = request.matchdict.get('binary_id')
    revision = request.matchdict.get('revision')
    edittype = request.matchdict.get('edittype')

    try:
        bin_obj = g.show_binary(binary_id)
    except GameDepNotFound:
        bin_obj = None

    if binary_id and edittype:
        pass

    # Initialise form library
    if not binary_id and not edittype:
        schema = AddBinarySchema()
    elif binary_id and edittype == "1":
        schema = EditBinarySchema()
    elif binary_id and edittype == "2":
        schema = EditOSArchSchema()
    else:
        request.session.flash(s.show_setting("ERROR_INVALID_BINARY_ID"), ERROR)
        return redirect(request,
                        "gamedep_item",
                        page_id=page_id,
                        type=gamedeptype)

    schema = schema.bind(gamedep_type=gamedeptype,
                         bin_obj=bin_obj,
                         req_file_folder=["%s/" % page_id])
    myform = Form(schema, buttons=['submit'])
    reqts = myform.get_widget_resources()

    if 'submit' in request.POST:
        controls = request.POST.items()
        try:
            deserialized = myform.validate(controls)
        except ValidationFailure as e:
            # Failed validation
            return {
                'page_id': page_id,
                'form': e.render(),
                'js_links': reqts['js']
            }

        # Form submitted, all validated!
        binary = deserialized.get("binary")
        operatingsystem = deserialized.get("operatingsystem")
        architecture = deserialized.get("architecture")
        if not binary_id and not edittype:
            g.create_binary(page_id, revision, operatingsystem, architecture,
                            binary['fp'], binary['mimetype'],
                            binary['filename'], request)
            request.session.flash(
                s.show_setting("INFO_BINARY_ADDED") % binary['filename'], INFO)
        else:
            g.update_binary(page_id, revision, binary_id, operatingsystem,
                            architecture, binary, request)
            request.session.flash(
                s.show_setting("INFO_BINARY_UPDATED") % binary['filename'],
                INFO)
        return redirect(request,
                        "gamedep_item",
                        page_id=page_id,
                        type=gamedeptype)
    # Display default form
    return {
        'page_id': page_id,
        'form': myform.render(),
        'js_links': reqts['js']
    }