The Wizard resource is a collection of step endpoints which represent a series of ordered api requests needed to complete a single task. Once a wizard is created in can be included in your urls or registered to a resource site.
Example:
from django import forms
from hyperadmin.resources.wizard import Wizard, FormStep
class EmailForm(forms.Form):
email = forms.EmailField()
class UsernameForm(forms.Form):
username = forms.CharField()
class PasswordForm(forms.Form):
password = forms.CharField()
class GetEmail(FormStep):
form_class = EmailForm
class GetUsername(FormStep):
form_class = UsernameForm
def can_skip(self):
return True
class GetPassword(FormStep):
form_class = PasswordForm
class GetAttribute(FormStep):
form_class = AttributeForm
def can_skip(self):
return True
class SimpleWizard(Wizard):
step_definitions = [
(GetEmail, {'slug':'email'}),
(GetUsername, {'slug':'username'}),
(GetPassword, {'slug':'password'}),
]
def done(self, submissions):
return 'success'
wizard = SimpleWizard(app_name='users', resource_adaptor='make_user')
urlpatterns += patterns('', (r'^', include(wizard.urls)))
A multi-part step allows for multiple steps to be embedded in a single step.
Multi part step example:
from django import forms
from hyperadmin.resources.wizard import Wizard, FormStep, MultiPartStep
class EmailForm(forms.Form):
email = forms.EmailField()
class UsernameForm(forms.Form):
username = forms.CharField()
class PasswordForm(forms.Form):
password = forms.CharField()
class AttributeForm(forms.Form):
key = forms.CharField()
value = forms.CharField()
class GetEmail(FormStep):
form_class = EmailForm
class GetUsername(FormStep):
form_class = UsernameForm
class GetPassword(FormStep):
form_class = PasswordForm
class GetAttribute(FormStep):
form_class = AttributeForm
def can_skip(self):
return True
class GetAttributes(MultiPartStep):
step_definitions = [
(GetAttribute, {'slug':'attr1'}),
(GetAttribute, {'slug':'attr2'}),
]
class ExpandedWizard(Wizard):
step_definitions = [
(GetEmail, {'slug':'email'}),
(GetUsername, {'slug':'username'}),
(GetPassword, {'slug':'password'}),
(GetAttributes, {'slug':'attributes'}),
]
def done(self, submissions):
return 'success'