fobi package

Subpackages

Submodules

fobi.admin module

fobi.admin.base_bulk_change_plugins(PluginForm, named_url, modeladmin, request, queryset)[source]

Bulk change of plugins action additional view.

fobi.admin.bulk_change_form_element_plugins(modeladmin, request, queryset)[source]

Bulk change FormElement plugins.

fobi.admin.bulk_change_form_handler_plugins(modeladmin, request, queryset)[source]

Bulk change FormHandler plugins.

fobi.admin.bulk_change_form_wizard_handler_plugins(modeladmin, request, queryset)[source]

Bulk change FormWizardHandler plugins.

class fobi.admin.FormElementEntryInlineAdmin(parent_model, admin_site)[source]

Bases: django.contrib.admin.options.TabularInline

FormElementEntry inline admin.

extra = 0
fields = ('form_entry', 'plugin_uid', 'plugin_data', 'position')
form

alias of FormElementEntryForm

media
model

alias of FormElementEntry

class fobi.admin.FormHandlerEntryInlineAdmin(parent_model, admin_site)[source]

Bases: django.contrib.admin.options.TabularInline

FormHandlerEntry inline admin.

extra = 0
fields = ('form_entry', 'plugin_uid', 'plugin_data')
form

alias of FormHandlerEntryForm

media
model

alias of FormHandlerEntry

class fobi.admin.FormWizardFormEntryInlineAdmin(parent_model, admin_site)[source]

Bases: django.contrib.admin.options.TabularInline

FormWizardFormEntry inline admin.

extra = 0
fields = ('form_entry', 'position')
media
model

alias of FormWizardFormEntry

class fobi.admin.FormWizardHandlerEntryInlineAdmin(parent_model, admin_site)[source]

Bases: django.contrib.admin.options.TabularInline

FormWizardHandlerEntry inline admin.

extra = 0
fields = ('plugin_uid', 'plugin_data')
form

alias of FormWizardHandlerEntryForm

media
model

alias of FormWizardHandlerEntry

class fobi.admin.FormEntryAdmin(model, admin_site)[source]

Bases: django.contrib.admin.options.ModelAdmin

FormEntry admin.

class Meta[source]

Meta.

app_label = <django.utils.functional.__proxy__ object>
FormEntryAdmin.fieldsets = ((<django.utils.functional.__proxy__ object at 0x7f7534b4bb50>, {'fields': ('name', 'is_public', 'is_cloneable')}), (<django.utils.functional.__proxy__ object at 0x7f7534c05490>, {'fields': ('success_page_title', 'success_page_message', 'action'), 'classes': ('collapse',)}), (<django.utils.functional.__proxy__ object at 0x7f7534c054d0>, {'fields': ('user',), 'classes': ('collapse',)}), (<django.utils.functional.__proxy__ object at 0x7f7534c05510>, {'fields': ('slug',), 'classes': ('collapse',)}))
FormEntryAdmin.inlines = [<class 'fobi.admin.FormElementEntryInlineAdmin'>, <class 'fobi.admin.FormHandlerEntryInlineAdmin'>]
FormEntryAdmin.list_display = ('name', 'slug', 'user', 'is_public', 'created', 'updated', 'is_cloneable')
FormEntryAdmin.list_editable = ('is_public', 'is_cloneable')
FormEntryAdmin.list_filter = ('is_public', 'is_cloneable')
FormEntryAdmin.media
FormEntryAdmin.radio_fields = {'user': 2}
FormEntryAdmin.readonly_fields = ('slug',)
class fobi.admin.FormWizardEntryAdmin(model, admin_site)[source]

Bases: django.contrib.admin.options.ModelAdmin

FormWizardEntry admin.

class Meta[source]

Meta.

app_label = <django.utils.functional.__proxy__ object>
FormWizardEntryAdmin.fieldsets = ((<django.utils.functional.__proxy__ object at 0x7f7534c05650>, {'fields': ('name', 'is_public', 'is_cloneable')}), (<django.utils.functional.__proxy__ object at 0x7f7534c05690>, {'fields': ('success_page_title', 'success_page_message'), 'classes': ('collapse',)}), (<django.utils.functional.__proxy__ object at 0x7f7534c056d0>, {'fields': ('user',), 'classes': ('collapse',)}), (<django.utils.functional.__proxy__ object at 0x7f7534c05710>, {'fields': ('slug',), 'classes': ('collapse',)}))
FormWizardEntryAdmin.inlines = [<class 'fobi.admin.FormWizardFormEntryInlineAdmin'>, <class 'fobi.admin.FormWizardHandlerEntryInlineAdmin'>]
FormWizardEntryAdmin.list_display = ('name', 'slug', 'user', 'is_public', 'created', 'updated', 'is_cloneable')
FormWizardEntryAdmin.list_editable = ('is_public', 'is_cloneable')
FormWizardEntryAdmin.list_filter = ('is_public', 'is_cloneable')
FormWizardEntryAdmin.media
FormWizardEntryAdmin.radio_fields = {'user': 2}
FormWizardEntryAdmin.readonly_fields = ('slug',)
class fobi.admin.FormFieldsetEntryAdmin(model, admin_site)[source]

Bases: django.contrib.admin.options.ModelAdmin

FormEieldsetEntry admin.

class Meta[source]
app_label = <django.utils.functional.__proxy__ object>
FormFieldsetEntryAdmin.fieldsets = ((None, {'fields': ('form_entry', 'name', 'is_repeatable')}),)
FormFieldsetEntryAdmin.list_display = ('form_entry', 'name', 'is_repeatable')
FormFieldsetEntryAdmin.list_editable = ('is_repeatable',)
FormFieldsetEntryAdmin.list_filter = ('is_repeatable',)
FormFieldsetEntryAdmin.media
class fobi.admin.FormElementEntryAdmin(model, admin_site)[source]

Bases: django.contrib.admin.options.ModelAdmin

FormElementEntry admin.

class Meta[source]

Meta.

app_label = <django.utils.functional.__proxy__ object>
FormElementEntryAdmin.fieldsets = ((<django.utils.functional.__proxy__ object at 0x7f7534936a50>, {'fields': ('plugin_uid', 'plugin_data')}), (<django.utils.functional.__proxy__ object at 0x7f7534936ad0>, {'fields': ('form_entry', 'form_fieldset_entry', 'position')}))
FormElementEntryAdmin.get_queryset(request)

Internal method used in get_queryset or queryset methods.

FormElementEntryAdmin.list_display = ('plugin_uid', 'plugin_uid_code', 'plugin_data', 'position', 'form_entry')
FormElementEntryAdmin.list_editable = ('position',)
FormElementEntryAdmin.list_filter = ('form_entry', 'plugin_uid')
FormElementEntryAdmin.media
FormElementEntryAdmin.readonly_fields = ('plugin_uid_code',)
class fobi.admin.FormHandlerEntryAdmin(model, admin_site)[source]

Bases: django.contrib.admin.options.ModelAdmin

FormHandlerEntry admin.

class Meta[source]

Meta.

app_label = <django.utils.functional.__proxy__ object>
FormHandlerEntryAdmin.fieldsets = ((<django.utils.functional.__proxy__ object at 0x7f7534936c50>, {'fields': ('plugin_uid', 'plugin_data')}), (<django.utils.functional.__proxy__ object at 0x7f7534936cd0>, {'fields': ('form_entry',)}))
FormHandlerEntryAdmin.get_queryset(request)

Internal method used in get_queryset or queryset methods.

FormHandlerEntryAdmin.list_display = ('plugin_uid', 'plugin_uid_code', 'plugin_data', 'form_entry')
FormHandlerEntryAdmin.list_filter = ('form_entry', 'plugin_uid')
FormHandlerEntryAdmin.media
FormHandlerEntryAdmin.readonly_fields = ('plugin_uid_code',)
class fobi.admin.BasePluginModelAdmin(model, admin_site)[source]

Bases: django.contrib.admin.options.ModelAdmin

Base plugin admin.

class Meta[source]

Meta.

app_label = <django.utils.functional.__proxy__ object>
BasePluginModelAdmin.bulk_change_plugins(*args, **kwargs)[source]

Bulk change plugins.

This is where the data is actually processed.

BasePluginModelAdmin.fieldsets = ((None, {'fields': ('plugin_uid', 'users', 'groups')}),)
BasePluginModelAdmin.filter_horizontal = ('users', 'groups')
BasePluginModelAdmin.get_queryset(request)

Internal method used in get_queryset or queryset methods.

BasePluginModelAdmin.has_add_permission(request)[source]

Has add permissions.

We don’t want to allow to add form elements/handlers manually. It should happen using the management command fobi_sync_plugins instead.

BasePluginModelAdmin.list_display = ('plugin_uid_admin', 'users_list', 'groups_list')
BasePluginModelAdmin.media
BasePluginModelAdmin.readonly_fields = ('plugin_uid', 'plugin_uid_admin')
class fobi.admin.FormElementAdmin(model, admin_site)[source]

Bases: fobi.admin.BasePluginModelAdmin

FormElement admin.

actions = [<function bulk_change_form_element_plugins at 0x7f753493a230>]
get_urls()[source]

Get URLs.

media
class fobi.admin.FormHandlerAdmin(model, admin_site)[source]

Bases: fobi.admin.BasePluginModelAdmin

FormHandler admin.

actions = [<function bulk_change_form_handler_plugins at 0x7f753493a2a8>]
get_urls()[source]

Get URLs.

media
class fobi.admin.FormWizardHandlerAdmin(model, admin_site)[source]

Bases: fobi.admin.BasePluginModelAdmin

FormHandler admin.

actions = [<function bulk_change_form_wizard_handler_plugins at 0x7f753493a320>]
get_urls()[source]

Get URLs.

media

fobi.app module

fobi.app.app_name(path, reduce_depth_by=1)[source]

Return another path by reducing the depth by one.

Parameters:
  • path (str) – Absolute app path (from project root).
  • reduce_depth_by (int) –
Return str:
fobi.app.app_config(path, config_app_path='apps.Config')[source]

App config.

Parameters:
  • path (str) – Absolute app path (from project root).
  • config_app_path (str) – Relative config path (from app root)
Return str:

fobi.apps module

class fobi.apps.Config(app_name, app_module)[source]

Bases: django.apps.config.AppConfig

Config.

label = 'fobi'
name = 'fobi'

fobi.base module

fobi.base.assemble_form_field_widget_class(base_class, plugin)[source]

Assemble form field widget class.

Finish this or remove.

#TODO

class fobi.base.BaseDataStorage[source]

Bases: object

Base storage data.

class fobi.base.BaseFormFieldPluginForm[source]

Bases: fobi.base.BasePluginForm

Base form for form field plugins.

help_text = <django.forms.fields.CharField object>
label = <django.forms.fields.CharField object>
name = <django.forms.fields.CharField object>
plugin_data_fields = [('name', ''), ('label', ''), ('help_text', ''), ('required', False)]
required = <django.forms.fields.BooleanField object>
validate_plugin_data(form_element_entries, request=None)[source]

Validate plugin data.

Parameters:
  • form_element_entries (iterable) – Iterable of fobi.models.FormElementEntry.
  • request (django.http.HttpRequest) –
Return bool:
class fobi.base.BasePlugin(user=None)[source]

Bases: object

Base plugin.

Base form field from which every form field should inherit.

Properties:
  • uid (string): Plugin uid (obligatory). Example value: ‘dummy’,

    ‘wysiwyg’, ‘news’.

  • name (string): Plugin name (obligatory). Example value:

    ‘Dummy plugin’, ‘WYSIWYG’, ‘Latest news’.

  • description (string): Plugin decription (optional). Example

    value: ‘Dummy plugin used just for testing’.

  • help_text (string): Plugin help text (optional). This text would

    be shown in fobi.views.add_form_plugin_entry and fobi.views.edit_form_plugin_entry views.

  • form: Plugin form (optional). A subclass of django.forms.Form.

    Should be given in case plugin is configurable.

  • add_form_template (str) (optional): Add form template (optional).

    If given, overrides the

    fobi.views.add_form_handler_entry default template.

  • edit_form_template (string): Edit form template (optional). If

    given, overrides the fobi.views.edit_form_handler_entry default template.

  • html_classes (list): List of extra HTML classes for the plugin.

  • group (string): Plugin are grouped under the specified group.

    Override in your plugin if necessary.

add_form_template = None
clone_plugin_data(entry)[source]

Clone plugin data.

Used when copying entries. If any objects or files are created by plugin, they should be cloned.

Parameters:fobi.models.AbstractPluginEntry – Instance of fobi.models.AbstractPluginEntry.
Return string:JSON dumped string of the cloned plugin data. The returned value would be inserted as is into the fobi.models.AbstractPluginEntry.plugin_data field.
delete_plugin_data()[source]

Delete plugin data (internal method).

Used in fobi.views.delete_form_entry and fobi.views.delete_form_handler_entry. Fired automatically, when fobi.models.FormEntry object is about to be deleted. Make use of it if your plugin creates database records or files that are not monitored externally but by fobi only.

description = None
edit_form_template = None
form = None
get_cloned_plugin_data(update={})[source]

Get cloned plugin data.

Get the cloned plugin data and returns it in a JSON dumped format.

Parameters:update (dict) –
Return string:JSON dumped string of the cloned plugin data.
Example:
In the get_cloned_plugin_data method of your plugin, do as
follows:
>>> def clone_plugin_data(self, dashboard_entry):
>>>     cloned_image = clone_file(self.data.image, relative_path=True)
>>>     return self.get_cloned_plugin_data(
>>>         update={'image': cloned_image}
>>>     )
get_form()[source]

Get the plugin form class.

Override this method in your subclassed fobi.base.BasePlugin class when you need your plugin setup to vary depending on the placeholder, workspace, user or request given. By default returns the value of the form attribute defined in your plugin.

Return django.forms.Form|django.forms.ModelForm:
 Subclass of django.forms.Form or django.forms.ModelForm.
get_initialised_create_form(data=None, files=None, initial_data=None)[source]

Get initialized create form.

Used fobi.views.add_form_element_entry and fobi.views.add_form_handler_entry view to gets initialised form for object to be created.

get_initialised_create_form_or_404(data=None, files=None)[source]

Get initialized create form or page 404.

Same as get_initialised_create_form but raises django.http.Http404 on errors.

get_initialised_edit_form(data=None, files=None, auto_id='id_%s', prefix=None, initial=None, error_class=<class 'django.forms.utils.ErrorList'>, label_suffix=':', empty_permitted=False, instance=None)[source]

Get initialized edit form.

Used in fobi.views.edit_form_element_entry and fobi.views.edit_form_handler_entry views.

get_initialised_edit_form_or_404(data=None, files=None, auto_id='id_%s', prefix=None, error_class=<class 'django.forms.utils.ErrorList'>, label_suffix=':', empty_permitted=False)[source]

Get initialized edit form or page 404.

Same as get_initialised_edit_form but raises django.http.Http404 on errors.

get_instance()[source]

Get instance.

get_plugin_form_data()[source]

Get plugin form data.

Fed as initial argument to the plugin form when initialising the instance for adding or editing the plugin. Override in your plugin class if you need customisations.

get_updated_plugin_data(update={})[source]

Get updated plugin data.

Returns it in a JSON dumped format.

Parameters:update (dict) –
Return string:JSON dumped string of the cloned plugin data.
get_widget(request=None, as_instance=False)[source]

Get the plugin widget.

Parameters:
  • request (django.http.HttpRequest) –
  • as_instance (bool) –
Return mixed:

Subclass of fobi.base.BasePluginWidget or instance of subclassed fobi.base.BasePluginWidget object.

group = <django.utils.functional.__proxy__ object>
help_text = None
html_class

HTML class.

A massive work on positioning the plugin and having it to be displayed in a given width is done here. We should be getting the plugin widget for the plugin given and based on its’ properties (static!) as well as on plugin position (which we have from model), we can show the plugin with the exact class.

html_classes = []
html_id

HTML id.

load_plugin_data(plugin_data)[source]

Load plugin data.

Load the plugin data saved in fobi.models.FormElementEntry or fobi.models.FormHandlerEntry. Plugin data is saved in JSON string.

Parameters:plugin_data (string) – JSON string with plugin data.
media_css = []
media_js = []
name = None
plugin_data_repr()[source]

Plugin data repr.

Human readable representation of plugin data. A very basic way would be just:

>>> return self.data.__dict__
Return string:
post_processor()[source]

Post-processor (self).

Redefine in your subclassed plugin when necessary.

Post process plugin data here (before rendering). This method is being called after the data has been loaded into the plugin.

Note, that request (django.http.HttpRequest) is available (self.request).

pre_processor()[source]

Pre-processor (callback).

Redefine in your subclassed plugin when necessary.

Pre process plugin data (before rendering). This method is being called before the data has been loaded into the plugin.

Note, that request (django.http.HttpRequest) is available ( self.request).

process(plugin_data=None, fetch_related_data=False)[source]

Process.

Init plugin with data.

process_plugin_data(fetch_related_data=False)[source]

Processes plugin data.

render(request=None)[source]

Renders the plugin HTML.

Parameters:request (django.http.HttpRequest) –
Return string:
storage = None
uid = None
update_plugin_data(entry)[source]

Update plugin data.

Used in fobi.management.commands.fobi_update_plugin_data.

Some plugins would contain data fetched from various sources (models, remote data). Since form entries are by definition loaded extremely much, you are advised to store as much data as possible in plugin_data field of fobi.models.FormElementEntry or fobi.models.FormHandlerEntry. Some externally fetched data becomes invalid after some time and needs updating. For that purpose, in case if your plugin needs that, redefine this method in your plugin. If you need your data to be periodically updated, add a cron-job which would run fobi_update_plugin_data management command (see fobi.management.commands.fobi_update_plugin_data module).

Parameters:or fobi.models.FormHandlerEntry (fobi.models.FormElementEntry) – Instance of fobi.models.FormeHandlerEntry.
Return dict:Should return a dictionary containing data of fields to be updated.
widget = None
class fobi.base.BasePluginForm[source]

Bases: object

Not a form actually; defined for magic only.

Property iterable plugin_data_fields:
 

Fields to get when calling the get_plugin_data method. These field will be JSON serialized. All other fields, even if they are part of the form, won’t be. Make sure all fields are serializable. If some of them aren’t, override the save_plugin_data method and make them serializable there. See fobi.contrib.plugins.form_elements.fields.select.forms as a good example.

Example:
>>> plugin_data_fields = (
>>>    ('name', ''),
>>>    ('active': False)
>>> )
get_plugin_data(request=None, json_format=True)[source]

Get plugin data.

Data that would be saved in the plugin_data field of the fobi.models.FormElementEntry or ``fobi.models.FormHandlerEntry`.` subclassed model.

Parameters:request (django.http.HttpRequest) –
plugin_data_fields = None
save_plugin_data(request=None)[source]

Save plugin data.

Dummy, but necessary.

validate_plugin_data(form_element_entries, request=None)[source]

Validate plugin data.

Parameters:
  • form_element_entries (iterable) – Iterable of fobi.models.FormElementEntry.
  • request (django.http.HttpRequest) –
Return bool:
class fobi.base.BaseRegistry[source]

Bases: object

Base registry.

Registry of plugins. It’s essential, that class registered has the uid property.

If fail_on_missing_plugin is set to True, an appropriate exception (plugin_not_found_exception_cls) is raised in cases if plugin could’t be found in the registry.

Property mixed type:
 
Property bool fail_on_missing_plugin:
 
Property fobi.exceptions.DoesNotExist plugin_not_found_exception_cls:
 
Property str plugin_not_found_error_message:
 
fail_on_missing_plugin = False
get(uid, default=None)[source]

Get the given entry from the registry.

Parameters:
  • uid (string) –
  • default (mixed) –

:return mixed.

items()[source]

Shortcut to self._registry.items().

plugin_not_found_error_message = "Can't find plugin with uid `{0}` in `{1}` registry."
plugin_not_found_exception_cls

alias of DoesNotExist

register(cls, force=False)[source]

Registers the plugin in the registry.

Parameters:
  • cls (mixed) –
  • force (bool) –
registry

Shortcut to self._registry.

type = None
unregister(cls)[source]

Un-register.

class fobi.base.ClassProperty[source]

Bases: property

ClassProperty.

fobi.base.classproperty

alias of ClassProperty

fobi.base.collect_plugin_media(form_element_entries, request=None)[source]

Collect the plugin media for form element entries given.

Parameters:
  • form_element_entries (iterable) – Iterable of fobi.models.FormElementEntry instances.
  • request (django.http.HttpRequest) –
Return dict:

Returns a dict containing the ‘js’ and ‘css’ keys. Correspondent values of those keys are lists containing paths to the CSS and JS media files.

fobi.base.ensure_autodiscover()[source]

Ensure that plugins are auto-discovered.

The form callbacks registry is intentionally left out, since they will be auto-discovered in any case if other modules are discovered.

fobi.base.fire_form_callbacks(form_entry, request, form, stage=None)[source]

Fire form callbacks.

Parameters:
  • form_entry (fobi.models.FormEntry) –
  • request (django.http.HttpRequest) –
  • form (django.forms.Form) –
  • stage (string) –
Return django.forms.Form form:
 
class fobi.base.FormCallback[source]

Bases: object

Base form callback.

callback(form_entry, request, form)[source]

Callback.

Custom callback code should be implemented here.

Parameters:
  • form_entry (fobi.models.FormEntry) – Instance of fobi.models.FormEntry.
  • request (django.http.HttpRequest) –
  • form (django.forms.Form) –
stage = None
class fobi.base.FormCallbackRegistry[source]

Bases: object

Registry of callbacks.

Holds callbacks for stages listed in the fobi.constants.CALLBACK_STAGES.

get_callbacks(stage=None)[source]

Get callbacks for the stage given.

Parameters:stage (string) –
Return list:
register(cls)[source]

Registers the plugin in the registry.

Parameters:cls (mixed) –
uidfy(cls)[source]

Makes a UID string from the class given.

Parameters:cls (mixed) –
Return string:
class fobi.base.FormElementPlugin(user=None)[source]

Bases: fobi.base.BasePlugin

Base form element plugin.

Property fobi.base.FormElementPluginDataStorage storage:
 
Property bool has_value:
 If set to False, ignored (removed) from the POST when processing the form.
get_form_field_instances(request=None, form_entry=None, form_element_entries=None, **kwargs)[source]

Get the instances of form fields, that plugin contains.

Parameters:
Return list:

List of Django form field instances.

Example:
>>> from django.forms.fields import CharField, IntegerField, TextField
>>> [CharField(max_length=100), IntegerField(), TextField()]
get_origin_kwargs_update_func_results(kwargs_update_func, form_element_entry, origin, extra={}, widget_cls=None)[source]

Get origin kwargs update func results.

If kwargs_update_func is given, is callable and returns results without failures, return the result. Otherwise - return None.

get_origin_return_func_results(return_func, form_element_entry, origin)[source]

Get origin return func results.

If return_func is given, is callable and returns results without failures, return the result. Otherwise - return None.

has_value = False
is_hidden = False
storage

alias of FormElementPluginDataStorage

submit_plugin_form_data(form_entry, request, form)[source]

Submit plugin form data.

Called on form submission (when user actually posts the data to assembled form).

Parameters:
  • form_entry (fobi.models.FormEntry) – Instance of fobi.models.FormEntry.
  • request (django.http.HttpRequest) –
  • form (django.forms.Form) –
class fobi.base.FormElementPluginDataStorage[source]

Bases: fobi.base.BaseDataStorage

Storage for FormElementPlugin data.

class fobi.base.FormElementPluginRegistry[source]

Bases: fobi.base.BaseRegistry

Form element plugins registry.

fail_on_missing_plugin = True
plugin_not_found_exception_cls

alias of FormElementPluginDoesNotExist

type = (<class 'fobi.base.FormElementPlugin'>, <class 'fobi.base.FormFieldPlugin'>)
class fobi.base.FormElementPluginWidget(plugin)[source]

Bases: fobi.base.BasePluginWidget

Form element plugin widget.

storage

alias of FormElementPluginWidgetDataStorage

class fobi.base.FormElementPluginWidgetRegistry[source]

Bases: fobi.base.BasePluginWidgetRegistry

Registry of form element plugins.

type

alias of FormElementPluginWidget

class fobi.base.FormFieldPlugin(user=None)[source]

Bases: fobi.base.FormElementPlugin

Form field plugin.

has_value = True
class fobi.base.FormHandlerPlugin(user=None)[source]

Bases: fobi.base.BasePlugin

Form handler plugin.

Property fobi.base.FormHandlerPluginDataStorage storage:
 
Property bool allow_multiple:
 If set to True, plugin can be used multiple times within (per form). Otherwise - just once.
allow_multiple = True
custom_actions(form_entry, request=None)[source]

Custom actions.

Override this method in your form handler if you want to specify custom actions. Note, that expected return value of this method is an iterable with a triple, where the first item is the URL of the action and the second item is the action title and the third item is the icon class of the action.

Example:
>>>  return (
>>>      ('/add-to-favorites/',
>>>       'Add to favourites',
>>>       'glyphicon glyphicon-favourties'),
>>>  )
get_custom_actions(form_entry, request=None)[source]

Internal method to for obtaining the get_custom_actions.

run(form_entry, request, form, form_element_entries=None)[source]

Run.

Custom code should be implemented here.

Parameters:
  • form_entry (fobi.models.FormEntry) – Instance of fobi.models.FormEntry.
  • request (django.http.HttpRequest) –
  • form (django.forms.Form) –
  • form_element_entries (iterable) – Iterable of fobi.models.FormElementEntry objects.
Return mixed:

May be a tuple (bool, mixed) or None

storage

alias of FormHandlerPluginDataStorage

class fobi.base.FormHandlerPluginDataStorage[source]

Bases: fobi.base.BaseDataStorage

Storage for FormHandlerPlugin data.

class fobi.base.FormHandlerPluginRegistry[source]

Bases: fobi.base.BaseRegistry

Form handler plugins registry.

fail_on_missing_plugin = True
plugin_not_found_exception_cls

alias of FormHandlerPluginDoesNotExist

type

alias of FormHandlerPlugin

class fobi.base.FormHandlerPluginWidget(plugin)[source]

Bases: fobi.base.BasePluginWidget

Form handler plugin widget.

storage

alias of FormHandlerPluginWidgetDataStorage

class fobi.base.FormHandlerPluginWidgetRegistry[source]

Bases: fobi.base.BasePluginWidgetRegistry

Registry of form handler plugins.

type

alias of FormHandlerPluginWidget

class fobi.base.FormWizardHandlerPlugin(user=None)[source]

Bases: fobi.base.BasePlugin

Form wizard handler plugin.

Property fobi.base.FormWizardHandlerPluginDataStorage storage:
 
Property bool allow_multiple:
 If set to True, plugin can be used multiple times within (per form). Otherwise - just once.

DONE

allow_multiple = True
custom_actions(form_wizard_entry, request=None)[source]

Custom actions.

Override this method in your form handler if you want to specify custom actions. Note, that expected return value of this method is an iterable with a triple, where the first item is the URL of the action and the second item is the action title and the third item is the icon class of the action.

Example:
>>>  return (
>>>      ('/add-to-favorites/',
>>>       'Add to favourites',
>>>       'glyphicon glyphicon-favourties'),
>>>  )
get_custom_actions(form_wizard_entry, request=None)[source]

Internal method to for obtaining the get_custom_actions.

run(form_wizard_entry, request, form_list, form_wizard, form_element_entries=None)[source]

Run.

Custom code should be implemented here.

Parameters:
  • form_wizard_entry (fobi.models.FormEntry) – Instance of fobi.models.FormEntry.
  • request (django.http.HttpRequest) –
  • form (django.forms.Form) –
  • form_element_entries (iterable) – Iterable of fobi.models.FormElementEntry objects.
Return mixed:

May be a tuple (bool, mixed) or None

storage

alias of FormWizardHandlerPluginDataStorage

class fobi.base.FormWizardHandlerPluginDataStorage[source]

Bases: fobi.base.BaseDataStorage

Storage for FormWizardHandlerPlugin handler data.

class fobi.base.FormWizardHandlerPluginRegistry[source]

Bases: fobi.base.BaseRegistry

Form wizard handler plugins registry.

fail_on_missing_plugin = True
plugin_not_found_exception_cls

alias of FormWizardHandlerPluginDoesNotExist

type

alias of FormWizardHandlerPlugin

class fobi.base.FormWizardHandlerPluginWidget(plugin)[source]

Bases: fobi.base.BasePluginWidget

Form wizard handler plugin widget.

storage

alias of FormWizardHandlerPluginWidgetDataStorage

class fobi.base.FormWizardHandlerPluginWidgetRegistry[source]

Bases: fobi.base.BasePluginWidgetRegistry

Registry of form wizard handler plugins.

type

alias of FormWizardHandlerPluginWidget

fobi.base.get_form_element_plugin_widget(plugin_uid, request=None, as_instance=False, theme=None)[source]

Get the form element plugin widget for the plugin_uid given.

Parameters:
  • plugin_uid (str) – UID of the plugin to get the widget for.
  • request (django.http.HttpRequest) –
  • as_instance (bool) –
  • theme (fobi.base.BaseTheme) – Subclass of.
Return BasePluginWidget:
 

Subclass of.

fobi.base.get_form_handler_plugin_widget(plugin_uid, request=None, as_instance=False, theme=None)[source]

Get the form handler plugin widget for the plugin_uid given.

Parameters:
  • plugin_uid (str) – UID of the plugin to get the widget for.
  • request (django.http.HttpRequest) –
  • as_instance (bool) –
  • theme (fobi.base.BaseTheme) – Subclass of.
Return BasePluginWidget:
 

Subclass of.

fobi.base.get_form_wizard_handler_plugin_widget(plugin_uid, request=None, as_instance=False, theme=None)[source]

Get the form wizard handler plugin widget for the plugin_uid given.

Parameters:
  • plugin_uid (str) – UID of the plugin to get the widget for.
  • request (django.http.HttpRequest) –
  • as_instance (bool) –
  • theme (fobi.base.BaseTheme) – Subclass of.
Return BasePluginWidget:
 

Subclass of.

fobi.base.get_plugin_widget(registry, plugin_uid, request=None, as_instance=False, theme=None)[source]

Get the plugin widget for the plugin_uid given.

Looks up in the registry provided.

Parameters:
  • registry (fobi.base.BasePluginWidgetRegistry) – Subclass of.
  • plugin_uid (str) – UID of the plugin to get the widget for.
  • request (django.http.HttpRequest) –
  • as_instance (bool) –
  • theme (fobi.base.BaseTheme) – Subclass of.
Return BasePluginWidget:
 

Subclass of.

fobi.base.get_processed_form_data(form, form_element_entries)[source]

Gets processed form data.

Simply fires both fobi.base.get_cleaned_data and fobi.base.get_field_name_to_label_map functions and returns the result.

Parameters:
  • form (django.forms.Form) –
  • form_element_entries (iterable) – Iterable of form element entries.
Return tuple:
fobi.base.get_processed_form_wizard_data(form_wizard, form_list, form_element_entries)[source]

Get processed form wizard data.

fobi.base.get_registered_form_callbacks(stage=None)[source]

Get registered form callbacks for the stage given.

fobi.base.get_registered_form_element_plugin_uids(flattern=True)[source]

Get registered form element plugin uids.

Gets a list of registered plugins in a form if tuple (plugin name, plugin description). If not yet auto-discovered, auto-discovers them.

Return list:
fobi.base.get_registered_form_element_plugins()[source]

Get registered form element plugins.

Gets a list of registered plugins in a form if tuple (plugin name, plugin description). If not yet autodiscovered, autodiscovers them.

Return list:
fobi.base.get_registered_form_handler_plugin_uids(flattern=True)[source]

Get registered form handler plugin uids.

Gets a list of UIDs of registered form handler plugins. If not yet auto-discovered, auto-discovers them.

Return list:
fobi.base.get_registered_form_handler_plugins(as_instances=False)[source]

Get registered form handler plugins.

Gets a list of registered plugins in a form of tuple (plugin name, plugin description). If not yet auto-discovered, auto-discovers them.

Return list:
fobi.base.get_registered_form_wizard_handler_plugin_uids(flattern=True)[source]

Get registered form handler plugin uids.

Gets a list of UIDs of registered form wizard handler plugins. If not yet auto-discovered, auto-discovers them.

Return list:
fobi.base.get_registered_form_wizard_handler_plugins(as_instances=False)[source]

Get registered form handler wizard plugins.

Gets a list of registered plugins in a form of tuple (plugin name, plugin description). If not yet auto-discovered, auto-discovers them.

Return list:
fobi.base.get_registered_plugin_uids(registry, flattern=True, sort_items=True)[source]

Get a list of registered plugin uids as a list .

If not yet auto-discovered, auto-discovers them.

The sort_items is applied only if flattern is True.

Parameters:
  • registry
  • flattern (bool) –
  • sort_items (bool) –
Return list:
fobi.base.get_registered_plugins(registry, as_instances=False, sort_items=True)[source]

Get registered plugins.

Get a list of registered plugins in a form if tuple (plugin name, plugin description). If not yet auto-discovered, auto-discovers them.

Parameters:
  • registry
  • as_instances (bool) –
  • sort_items (bool) –
Return list:
fobi.base.get_registered_theme_uids(flattern=True)[source]

Get registered theme uids.

Gets a list of registered themes in a form of tuple (plugin name, plugin description). If not yet auto-discovered, auto-discovers them.

Return list:
fobi.base.get_registered_themes()[source]

Get registered themes.

Gets a list of registered themes in form of tuple (plugin name, plugin description). If not yet auto-discovered, auto-discovers them.

Return list:
fobi.base.run_form_handlers(form_entry, request, form, form_element_entries=None)[source]

Run form handlers.

Parameters:
  • form_entry (fobi.models.FormEntry) –
  • request (django.http.HttpRequest) –
  • form (django.forms.Form) –
  • form_element_entries (iterable) –
Return tuple:

List of success responses, list of error responses

fobi.base.run_form_wizard_handlers(form_wizard_entry, request, form_list, form_wizard, form_element_entries=None)[source]

Run form wizard handlers.

Parameters:
Return tuple:

List of success responses, list of error responses

fobi.base.validate_form_element_plugin_uid(plugin_uid)[source]

Validate the form element plugin uid.

Parameters:plugin_uid (string) –
Return bool:
fobi.base.validate_form_handler_plugin_uid(plugin_uid)[source]

Validate the plugin uid.

Parameters:plugin_uid (string) –
Return bool:
fobi.base.validate_form_wizard_handler_plugin_uid(plugin_uid)[source]

Validate the plugin uid.

Parameters:plugin_uid (string) –
Return bool:
fobi.base.validate_theme_uid(plugin_uid)[source]

Validate the theme uid.

Parameters:plugin_uid (string) –
Return bool:

fobi.compat module

class fobi.compat.User(*args, **kwargs)[source]

Bases: django.contrib.auth.models.AbstractUser

Users within the Django authentication system are represented by this model.

Username, password and email are required. Other fields are optional.

exception DoesNotExist

Bases: django.core.exceptions.ObjectDoesNotExist

exception User.MultipleObjectsReturned

Bases: django.core.exceptions.MultipleObjectsReturned

User.formelement_set

Accessor to the related objects manager on the forward and reverse sides of a many-to-many relation.

In the example:

class Pizza(Model):
    toppings = ManyToManyField(Topping, related_name='pizzas')

pizza.toppings and topping.pizzas are ManyToManyDescriptor instances.

Most of the implementation is delegated to a dynamically defined manager class built by create_forward_many_to_many_manager() defined below.

User.formentry_set

Accessor to the related objects manager on the reverse side of a many-to-one relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

parent.children is a ReverseManyToOneDescriptor instance.

Most of the implementation is delegated to a dynamically defined manager class built by create_forward_many_to_many_manager() defined below.

User.formhandler_set

Accessor to the related objects manager on the forward and reverse sides of a many-to-many relation.

In the example:

class Pizza(Model):
    toppings = ManyToManyField(Topping, related_name='pizzas')

pizza.toppings and topping.pizzas are ManyToManyDescriptor instances.

Most of the implementation is delegated to a dynamically defined manager class built by create_forward_many_to_many_manager() defined below.

User.formwizardentry_set

Accessor to the related objects manager on the reverse side of a many-to-one relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

parent.children is a ReverseManyToOneDescriptor instance.

Most of the implementation is delegated to a dynamically defined manager class built by create_forward_many_to_many_manager() defined below.

User.formwizardhandler_set

Accessor to the related objects manager on the forward and reverse sides of a many-to-many relation.

In the example:

class Pizza(Model):
    toppings = ManyToManyField(Topping, related_name='pizzas')

pizza.toppings and topping.pizzas are ManyToManyDescriptor instances.

Most of the implementation is delegated to a dynamically defined manager class built by create_forward_many_to_many_manager() defined below.

User.get_next_by_date_joined(*moreargs, **morekwargs)
User.get_previous_by_date_joined(*moreargs, **morekwargs)
User.groups

Accessor to the related objects manager on the forward and reverse sides of a many-to-many relation.

In the example:

class Pizza(Model):
    toppings = ManyToManyField(Topping, related_name='pizzas')

pizza.toppings and topping.pizzas are ManyToManyDescriptor instances.

Most of the implementation is delegated to a dynamically defined manager class built by create_forward_many_to_many_manager() defined below.

User.id

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

User.logentry_set

Accessor to the related objects manager on the reverse side of a many-to-one relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

parent.children is a ReverseManyToOneDescriptor instance.

Most of the implementation is delegated to a dynamically defined manager class built by create_forward_many_to_many_manager() defined below.

User.registrationprofile

Accessor to the related object on the reverse side of a one-to-one relation.

In the example:

class Restaurant(Model):
    place = OneToOneField(Place, related_name='restaurant')

place.restaurant is a ReverseOneToOneDescriptor instance.

User.savedformdataentry_set

Accessor to the related objects manager on the reverse side of a many-to-one relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

parent.children is a ReverseManyToOneDescriptor instance.

Most of the implementation is delegated to a dynamically defined manager class built by create_forward_many_to_many_manager() defined below.

User.savedformwizarddataentry_set

Accessor to the related objects manager on the reverse side of a many-to-one relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

parent.children is a ReverseManyToOneDescriptor instance.

Most of the implementation is delegated to a dynamically defined manager class built by create_forward_many_to_many_manager() defined below.

User.user_permissions

Accessor to the related objects manager on the forward and reverse sides of a many-to-many relation.

In the example:

class Pizza(Model):
    toppings = ManyToManyField(Topping, related_name='pizzas')

pizza.toppings and topping.pizzas are ManyToManyDescriptor instances.

Most of the implementation is delegated to a dynamically defined manager class built by create_forward_many_to_many_manager() defined below.

fobi.conf module

fobi.conf.get_setting(setting, override=None)[source]

Get setting.

Get a setting from fobi conf module, falling back to the default.

If override is not None, it will be used instead of the setting.

Parameters:
  • setting – String with setting name
  • override – Value to use when no setting is available. Defaults to None.
Returns:

Setting value.

fobi.constants module

fobi.context_processors module

fobi.context_processors.dynamic_values(request)[source]

Dynamic values exposed to public forms.

fobi.context_processors.form_importers(request)[source]

Form importers.

fobi.context_processors.theme(request)[source]

Get active theme.

Parameters:request (django.http.HttpRequest) –
Return fobi.base.BaseTheme:
 Instance of fobi.base.BaseTheme.

fobi.data_structures module

class fobi.data_structures.SortableDict(data=None)[source]

Bases: dict

SortableDict.

A dictionary that keeps its keys in the order in which they’re inserted. Very similar to (and partly based on) SortedDict of the Django, but has several additional methods implemented, such as: insert_before_key and insert_after_key.

clear()[source]

Clear.

copy()[source]

Returns a copy of this object.

insert(index, key, value)[source]

Inserts the key, value pair before the item with the given index.

insert_after_key(target_key, key, value, fail_silently=True)[source]

Insert the {key: value} after the target_key.

Parameters:
  • target_key (immutable) –
  • key (immutable) –
  • value (mutable) –
  • fail_silently (boolean) –
  • offset (int) –
Return bool:
insert_before_key(target_key, key, value, fail_silently=True, offset=0)[source]

Insert the {key: value} before the target_key.

Parameters:
  • target_key (immutable) –
  • key (immutable) –
  • value (mutable) –
  • fail_silently (boolean) –
  • offset (int) –
Return bool:
items()[source]
iteritems()

Iter items (internal method).

iterkeys()
itervalues()

Iter values (internal method).

keys()[source]
move_after_key(source_key, target_key, fail_silently=True)[source]

Move the {key: value} after the given source_key.

Parameters:
  • source_key (immutable) –
  • target_key (immutable) –
  • fail_silently (boolean) –
Return bool:
move_before_key(source_key, target_key, fail_silently=True, offset=0)[source]

Move the {key: value} before the given source_key.

Parameters:
  • source_key (immutable) –
  • target_key (immutable) –
  • fail_silently (boolean) –
  • offset (int) –
Return bool:
pop(k, *args)[source]

Pop.

popitem()[source]

Pop item.

setdefault(key, default)[source]

Set default.

update(dict_)[source]

Update.

value_for_index(index)[source]

Returns the value of the item at the given zero-based index.

values()[source]

fobi.decorators module

fobi.decorators.permissions_required(perms, satisfy='all', login_url=None, raise_exception=False)[source]

Check for the permissions given based on the strategy chosen.

Parameters:
  • perms (iterable) –
  • satisfy (string) – Allowed values are “all” and “any”.
  • login_url (string) –
  • raise_exception (bool) – If set to True, the PermissionDenied exception is raised on failures.
Return bool:
Example:
>>> @login_required
>>> @permissions_required(satisfy='any', perms=[
>>>     'fobi.add_formentry',
>>>     'fobi.change_formentry',
>>>     'fobi.delete_formentry',
>>>     'fobi.add_formelemententry',
>>>     'fobi.change_formelemententry',
>>>     'fobi.delete_formelemententry',
>>> ])
>>> def edit_dashboard(request):
>>>     # your code
fobi.decorators.all_permissions_required(perms, login_url=None, raise_exception=False)[source]

Check for the permissions given based on SATISFY_ALL strategy chosen.

Example:
>>> @login_required
>>> @all_permissions_required([
>>>     'fobi.add_formentry',
>>>     'fobi.change_formentry',
>>>     'fobi.delete_formentry',
>>>     'fobi.add_formelemententry',
>>>     'fobi.change_formelemententry',
>>>     'fobi.delete_formelemententry',
>>> ])
>>> def edit_dashboard(request):
>>>     # your code
fobi.decorators.any_permission_required(perms, login_url=None, raise_exception=False)[source]

Check for the permissions given based on SATISFY_ANY strategy chosen.

Example:
>>> @login_required
>>> @any_permission_required([
>>>     'fobi.add_formentry',
>>>     'fobi.change_formentry',
>>>     'fobi.delete_formentry',
>>>     'fobi.add_formelemententry',
>>>     'fobi.change_formelemententry',
>>>     'fobi.delete_formelemententry',
>>> ])
>>> def edit_dashboard(request):
>>>     # your code

fobi.defaults module

fobi.discover module

fobi.discover.autodiscover()[source]

Auto-discovers files that should be found by fobi.

fobi.dynamic module

fobi.dynamic.assemble_form_class(form_entry, base_class=<class 'django.forms.forms.BaseForm'>, request=None, origin=None, origin_kwargs_update_func=None, origin_return_func=None, form_element_entries=None, get_form_field_instances_kwargs={})[source]

Assemble a form class by given entry.

Parameters:
  • form_entry
  • base_class
  • request (django.http.HttpRequest) –
  • origin (string) –
  • origin_kwargs_update_func (callable) –
  • origin_return_func (callable) –
  • form_element_entries (iterable) – If given, used instead of form_entry.formelemententry_set.all (no additional database hit).
  • get_form_field_instances_kwargs (dict) – To be passed as **kwargs to the :method:`get_form_field_instances_kwargs`.
fobi.dynamic.assemble_form_wizard_class(form_wizard_entry, base_class=<class 'formtools.wizard.views.SessionWizardView'>, request=None, origin=None, origin_kwargs_update_func=None, origin_return_func=None, form_wizard_form_entries=None, template_name=None)[source]

Assemble form wizard class.

fobi.exceptions module

exception fobi.exceptions.BaseException[source]

Bases: exceptions.Exception

Base exception.

exception fobi.exceptions.ImproperlyConfigured[source]

Bases: fobi.exceptions.BaseException

Improperly configured.

Exception raised when developer didn’t configure/write the code properly.

exception fobi.exceptions.InvalidRegistryItemType[source]

Bases: exceptions.ValueError, fobi.exceptions.BaseException

Invalid registry item type.

Raised when an attempt is made to register an item in the registry which does not have a proper type.

exception fobi.exceptions.DoesNotExist[source]

Bases: fobi.exceptions.BaseException

Raised when something does not exist.

exception fobi.exceptions.ThemeDoesNotExist[source]

Bases: fobi.exceptions.DoesNotExist

Raised when no theme with given uid can be found.

exception fobi.exceptions.PluginDoesNotExist[source]

Bases: fobi.exceptions.DoesNotExist

Raised when no plugin with given uid can be found.

exception fobi.exceptions.FormElementPluginDoesNotExist[source]

Bases: fobi.exceptions.PluginDoesNotExist

Raised when no form element plugin with given uid can be found.

exception fobi.exceptions.FormHandlerPluginDoesNotExist[source]

Bases: fobi.exceptions.PluginDoesNotExist

Raised when no form handler plugin with given uid can be found.

exception fobi.exceptions.FormWizardHandlerPluginDoesNotExist[source]

Bases: fobi.exceptions.PluginDoesNotExist

FormWizardHandlerPlugin does not exist.

Raised when no form wizard handler plugin with given uid can be found.

exception fobi.exceptions.NoDefaultThemeSet[source]

Bases: fobi.exceptions.ImproperlyConfigured

Raised when no active theme is chosen.

exception fobi.exceptions.FormPluginError[source]

Bases: fobi.exceptions.BaseException

Base error for form elements and handlers.

exception fobi.exceptions.FormElementPluginError[source]

Bases: fobi.exceptions.FormPluginError

Raised when form element plugin error occurs.

exception fobi.exceptions.FormHandlerPluginError[source]

Bases: fobi.exceptions.FormPluginError

Raised when form handler plugin error occurs.

exception fobi.exceptions.FormCallbackError[source]

Bases: fobi.exceptions.FormPluginError

Raised when form callback error occurs.

fobi.form_importers module

class fobi.form_importers.BaseFormImporter(form_entry_cls, form_element_entry_cls, form_properties=None, form_data=None)[source]

Bases: object

Base importer.

description = None
extract_field_properties(field_data)[source]

Extract field properties.

field_properties_mapping = None
field_type_prop_name = None
fields_mapping = None
get_form_data()[source]

Get form data.

get_template_names()[source]

Get template names.

get_wizard(request, *args, **kwargs)[source]

Get wizard.

import_data(form_properties, form_data)[source]

Import data.

name = None
position_prop_name = None
templates = None
uid = None
wizard = None
class fobi.form_importers.FormImporterPluginRegistry[source]

Bases: fobi.base.BaseRegistry

Form importer plugins registry.

type

alias of BaseFormImporter

fobi.form_importers.ensure_autodiscover()[source]

Ensure that form importer plugins are auto-discovered.

fobi.form_importers.get_form_importer_plugin_uids()[source]

Get form importer plugin uids.

fobi.form_importers.get_form_impoter_plugin_urls()[source]

Gets the form importer plugin URLs as a list of tuples.

fobi.form_utils module

class fobi.form_utils.ErrorDict[source]

Bases: django.forms.utils.ErrorDict

A better ErrorDict.

as_text()[source]

As text.

class fobi.form_utils.ErrorList(initlist=None, error_class=None)[source]

Bases: django.forms.utils.ErrorList

A better ErrorList.

as_text()[source]

As text.

fobi.forms module

class fobi.forms.BulkChangeFormElementPluginsForm(*args, **kwargs)[source]

Bases: fobi.forms.BaseBulkChangePluginsForm

Bulk change form element plugins form.

class Meta[source]

Meta class.

fields = ['groups', 'groups_action', 'users', 'users_action']
model

alias of FormElement

BulkChangeFormElementPluginsForm.base_fields = OrderedDict([('groups', <django.forms.models.ModelMultipleChoiceField object at 0x7f7534929a10>), ('groups_action', <django.forms.fields.ChoiceField object at 0x7f7534929490>), ('users', <django.forms.models.ModelMultipleChoiceField object at 0x7f7534929810>), ('users_action', <django.forms.fields.ChoiceField object at 0x7f7534929390>), ('selected_plugins', <django.forms.fields.CharField object at 0x7f7534929250>)])
BulkChangeFormElementPluginsForm.declared_fields = OrderedDict([('selected_plugins', <django.forms.fields.CharField object at 0x7f7534929250>), ('users_action', <django.forms.fields.ChoiceField object at 0x7f7534929390>), ('groups_action', <django.forms.fields.ChoiceField object at 0x7f7534929490>)])
BulkChangeFormElementPluginsForm.media
class fobi.forms.BulkChangeFormHandlerPluginsForm(*args, **kwargs)[source]

Bases: fobi.forms.BaseBulkChangePluginsForm

Bulk change form handler plugins form.

class Meta[source]

Meta class.

fields = ['groups', 'groups_action', 'users', 'users_action']
model

alias of FormHandler

BulkChangeFormHandlerPluginsForm.base_fields = OrderedDict([('groups', <django.forms.models.ModelMultipleChoiceField object at 0x7f7534929ed0>), ('groups_action', <django.forms.fields.ChoiceField object at 0x7f7534929490>), ('users', <django.forms.models.ModelMultipleChoiceField object at 0x7f7534929cd0>), ('users_action', <django.forms.fields.ChoiceField object at 0x7f7534929390>), ('selected_plugins', <django.forms.fields.CharField object at 0x7f7534929250>)])
BulkChangeFormHandlerPluginsForm.declared_fields = OrderedDict([('selected_plugins', <django.forms.fields.CharField object at 0x7f7534929250>), ('users_action', <django.forms.fields.ChoiceField object at 0x7f7534929390>), ('groups_action', <django.forms.fields.ChoiceField object at 0x7f7534929490>)])
BulkChangeFormHandlerPluginsForm.media
class fobi.forms.BulkChangeFormWizardHandlerPluginsForm(*args, **kwargs)[source]

Bases: fobi.forms.BaseBulkChangePluginsForm

Bulk change form wizard handler plugins form.

class Meta[source]

Meta class.

fields = ['groups', 'groups_action', 'users', 'users_action']
model

alias of FormWizardHandler

BulkChangeFormWizardHandlerPluginsForm.base_fields = OrderedDict([('groups', <django.forms.models.ModelMultipleChoiceField object at 0x7f75349363d0>), ('groups_action', <django.forms.fields.ChoiceField object at 0x7f7534929490>), ('users', <django.forms.models.ModelMultipleChoiceField object at 0x7f75349361d0>), ('users_action', <django.forms.fields.ChoiceField object at 0x7f7534929390>), ('selected_plugins', <django.forms.fields.CharField object at 0x7f7534929250>)])
BulkChangeFormWizardHandlerPluginsForm.declared_fields = OrderedDict([('selected_plugins', <django.forms.fields.CharField object at 0x7f7534929250>), ('users_action', <django.forms.fields.ChoiceField object at 0x7f7534929390>), ('groups_action', <django.forms.fields.ChoiceField object at 0x7f7534929490>)])
BulkChangeFormWizardHandlerPluginsForm.media
fobi.forms.FormElementEntryFormSet

alias of FormElementEntryFormFormSet

class fobi.forms.FormEntryForm(*args, **kwargs)[source]

Bases: django.forms.models.ModelForm

Form for fobi.models.FormEntry model.

class Meta[source]

Meta class.

fields = ('name', 'title', 'is_public', 'success_page_title', 'success_page_message', 'action')
model

alias of FormEntry

FormEntryForm.base_fields = OrderedDict([('name', <django.forms.fields.CharField object at 0x7f7534bf7450>), ('title', <django.forms.fields.CharField object at 0x7f7534bf7310>), ('is_public', <django.forms.fields.BooleanField object at 0x7f7534bf7410>), ('success_page_title', <django.forms.fields.CharField object at 0x7f7534b23050>), ('success_page_message', <django.forms.fields.CharField object at 0x7f7534b23290>), ('action', <django.forms.fields.CharField object at 0x7f7534b23310>)])
FormEntryForm.clean_action()[source]

Validate the action (URL).

Checks if URL exists.

FormEntryForm.declared_fields = OrderedDict()
FormEntryForm.media
class fobi.forms.FormFieldsetEntryForm(*args, **kwargs)[source]

Bases: django.forms.models.ModelForm

Form for fobi.models.FormFieldsetEntry model.

class Meta[source]

Meta class.

fields = ('name',)
model

alias of FormFieldsetEntry

FormFieldsetEntryForm.base_fields = OrderedDict([('name', <django.forms.fields.CharField object at 0x7f7534b23490>)])
FormFieldsetEntryForm.declared_fields = OrderedDict()
FormFieldsetEntryForm.media
class fobi.forms.FormHandlerEntryForm(data=None, files=None, auto_id=u'id_%s', prefix=None, initial=None, error_class=<class 'django.forms.utils.ErrorList'>, label_suffix=None, empty_permitted=False, instance=None, use_required_attribute=None)[source]

Bases: django.forms.models.ModelForm

FormHandlerEntry form.

class Meta[source]

Meta class.

fields = ('form_entry', 'plugin_data', 'plugin_uid')
model

alias of FormHandlerEntry

FormHandlerEntryForm.base_fields = OrderedDict([('form_entry', <django.forms.models.ModelChoiceField object at 0x7f7534911910>), ('plugin_data', <django.forms.fields.CharField object at 0x7f7534911890>), ('plugin_uid', <django.forms.fields.ChoiceField object at 0x7f75349112d0>)])
FormHandlerEntryForm.declared_fields = OrderedDict([('plugin_uid', <django.forms.fields.ChoiceField object at 0x7f75349112d0>)])
FormHandlerEntryForm.media
class fobi.forms.FormHandlerForm(data=None, files=None, auto_id=u'id_%s', prefix=None, initial=None, error_class=<class 'django.forms.utils.ErrorList'>, label_suffix=None, empty_permitted=False, instance=None, use_required_attribute=None)[source]

Bases: django.forms.models.ModelForm

FormHandler form.

class Meta[source]

Meta class.

fields = ('users', 'groups')
model

alias of FormHandler

FormHandlerForm.base_fields = OrderedDict([('users', <django.forms.models.ModelMultipleChoiceField object at 0x7f7534911350>), ('groups', <django.forms.models.ModelMultipleChoiceField object at 0x7f7534911550>)])
FormHandlerForm.declared_fields = OrderedDict()
FormHandlerForm.media
class fobi.forms.FormWizardEntryForm(*args, **kwargs)[source]

Bases: django.forms.models.ModelForm

Form for fobi.models.FormWizardEntry model.

class Meta[source]

Meta class.

fields = ('name', 'title', 'is_public', 'success_page_title', 'success_page_message', 'show_all_navigation_buttons')
model

alias of FormWizardEntry

FormWizardEntryForm.base_fields = OrderedDict([('name', <django.forms.fields.CharField object at 0x7f753491e690>), ('title', <django.forms.fields.CharField object at 0x7f753491e790>), ('is_public', <django.forms.fields.BooleanField object at 0x7f753491e910>), ('success_page_title', <django.forms.fields.CharField object at 0x7f753491e990>), ('success_page_message', <django.forms.fields.CharField object at 0x7f753491eb90>), ('show_all_navigation_buttons', <django.forms.fields.BooleanField object at 0x7f753491ec10>)])
FormWizardEntryForm.declared_fields = OrderedDict()
FormWizardEntryForm.media
class fobi.forms.FormWizardFormEntryForm(data=None, files=None, auto_id=u'id_%s', prefix=None, initial=None, error_class=<class 'django.forms.utils.ErrorList'>, label_suffix=None, empty_permitted=False, instance=None, use_required_attribute=None)[source]

Bases: django.forms.models.ModelForm

FormWizardFormEntryForm form.

class Meta[source]

Meta class.

fields = ('form_wizard_entry', 'form_entry')
model

alias of FormWizardFormEntry

FormWizardFormEntryForm.base_fields = OrderedDict([('form_wizard_entry', <django.forms.models.ModelChoiceField object at 0x7f7534911cd0>), ('form_entry', <django.forms.models.ModelChoiceField object at 0x7f7534911e90>)])
FormWizardFormEntryForm.declared_fields = OrderedDict()
FormWizardFormEntryForm.media
fobi.forms.FormWizardFormEntryFormSet

alias of FormWizardFormEntryFormFormSet

class fobi.forms.FormWizardHandlerEntryForm(data=None, files=None, auto_id=u'id_%s', prefix=None, initial=None, error_class=<class 'django.forms.utils.ErrorList'>, label_suffix=None, empty_permitted=False, instance=None, use_required_attribute=None)[source]

Bases: django.forms.models.ModelForm

FormWizardHandlerEntry form.

class Meta[source]

Meta class.

fields = ('form_wizard_entry', 'plugin_data', 'plugin_uid')
model

alias of FormWizardHandlerEntry

FormWizardHandlerEntryForm.base_fields = OrderedDict([('form_wizard_entry', <django.forms.models.ModelChoiceField object at 0x7f7534929050>), ('plugin_data', <django.forms.fields.CharField object at 0x7f753491ef50>), ('plugin_uid', <django.forms.fields.ChoiceField object at 0x7f753491ed90>)])
FormWizardHandlerEntryForm.declared_fields = OrderedDict([('plugin_uid', <django.forms.fields.ChoiceField object at 0x7f753491ed90>)])
FormWizardHandlerEntryForm.media
class fobi.forms.ImportFormEntryForm(data=None, files=None, auto_id=u'id_%s', prefix=None, initial=None, error_class=<class 'django.forms.utils.ErrorList'>, label_suffix=None, empty_permitted=False, field_order=None, use_required_attribute=None)[source]

Bases: django.forms.forms.Form

Import form entry form.

base_fields = OrderedDict([('file', <django.forms.fields.FileField object at 0x7f7534936590>)])
declared_fields = OrderedDict([('file', <django.forms.fields.FileField object at 0x7f7534936590>)])
media
class fobi.forms.ImportFormWizardEntryForm(data=None, files=None, auto_id=u'id_%s', prefix=None, initial=None, error_class=<class 'django.forms.utils.ErrorList'>, label_suffix=None, empty_permitted=False, field_order=None, use_required_attribute=None)[source]

Bases: fobi.forms.ImportFormEntryForm

Import form entry wizard form.

base_fields = OrderedDict([('file', <django.forms.fields.FileField object at 0x7f7534936590>)])
declared_fields = OrderedDict([('file', <django.forms.fields.FileField object at 0x7f7534936590>)])
media

fobi.helpers module

Helpers module. This module can be safely imported from any fobi (sub)module, since it never imports from any of the fobi (sub)modules (except for the fobi.constants and fobi.exceptions modules).

fobi.helpers.admin_change_url(app_label, module_name, object_id, extra_path='', url_title=None)[source]

Gets an admin change URL for the object given.

Parameters:
  • app_label (str) –
  • module_name (str) –
  • object_id (int) –
  • extra_path (str) –
  • url_title (str) – If given, an HTML a tag is returned with url_title as the tag title. If left to None just the URL string is returned.
Return str:
fobi.helpers.clean_dict(source, keys=[], values=[])[source]

Removes given keys and values from dictionary.

Parameters:
  • source (dict) –
  • keys (iterable) –
  • values (iterable) –
Return dict:
fobi.helpers.clone_file(upload_dir, source_filename, relative_path=True)[source]

Clones the file.

Parameters:source_filename (string) – Source filename.
Return string:Filename of the cloned file.
fobi.helpers.combine_dicts(headers, data)[source]

Combine dicts.

Takes two dictionaries, assuming one contains a mapping keys to titles and another keys to data. Joins as string and returns a result dict.

fobi.helpers.delete_file(image_file)[source]

Delete file from disc.

fobi.helpers.do_slugify(s)[source]

Slugify.

fobi.helpers.ensure_unique_filename(destination)[source]

Makes sure filenames are never overwritten.

Parameters:destination (string) –
Return string:
fobi.helpers.flatatt_inverse_quotes(attrs)[source]

Convert a dictionary of attributes to a single string.

The returned string will contain a leading space followed by key=”value”, XML-style pairs. In the case of a boolean value, the key will appear without a value. It is assumed that the keys do not need to be XML-escaped. If the passed dictionary is empty, then return an empty string.

The result is passed through ‘mark_safe’ (by way of ‘format_html_join’).

fobi.helpers.get_app_label_and_model_name(path)[source]

Gets app_label and model_name from the path given.

Parameters:path (str) – Dotted path to the model (without ”.model”, as stored in the Django ContentType model.
Return tuple:app_label, model_name
fobi.helpers.get_form_element_entries_for_form_wizard_entry(form_wizard_entry)[source]

Get form element entries for the form wizard entry.

fobi.helpers.get_model_name_for_object(obj)[source]

Get model name for object.

Django version agnostic.

fobi.helpers.get_registered_models(ignore=[])[source]

Gets registered models as list.

Parameters:ignore (iterable) – Ignore the following content types (should be in app_label.model format (example auth.User).
Return list:
fobi.helpers.get_select_field_choices(raw_choices_data, key_type=None, value_type=None, fail_silently=True)[source]

Get select field choices.

Used in radio, select and other choice based fields.

Parameters:
  • raw_choices_data (str) –
  • key_type (type) –
  • value_type (type) –
  • fail_silently (bool) –
Return list:
fobi.helpers.get_wizard_form_field_value_from_post(request, wizard_view_name, form_key, field_name, fail_silently=True)[source]

Get wizard form field value from POST.

This is what we could have:

>>> request.POST
>>> {
>>>     'csrfmiddlewaretoken': ['kEprTL218a8HNcC02QefNNnF'],
>>>     'slider-form-test_slider': ['14'],
>>>     'form_wizard_view-current_step': ['slider-form'],
>>>     'slider-form-test_email': ['user@example.com']
>>> }

Note, that we know nothing about the types here, type conversion should be done manually. The values returned are strings always.

Parameters:
  • request (django.http.HttpRequest) –
  • wizard_view_name (str) –
  • form_key (str) – Typically, this would be the step name (form slug).
  • field_name (str) – Field name.
  • fail_silently (bool) – If set to True, no errors raised.
Return str:

Since everything in session is stored as string.

fobi.helpers.get_wizard_form_field_value_from_request(request, wizard_view_name, form_key, field_name, fail_silently=True, session_priority=False)[source]

Get wizard form field value from request.

Note, that we know nothing about the types here, type conversion should be done manually. The values returned are strings always.

Parameters:
  • request (django.http.HttpRequest) –
  • wizard_view_name (str) –
  • form_key (str) – Typically, this would be the step name (form slug).
  • field_name (str) – Field name.
  • fail_silently (bool) – If set to True, no errors raised.
  • session_priority (bool) – If set to True, first try to read from session.
Return str:

Since everything in session is stored as string.

fobi.helpers.get_wizard_form_field_value_from_session(request, wizard_view_name, form_key, field_name, fail_silently=True)[source]

Get wizard form field value from session.

This is what we could have:

>>> request.session['wizard_form_wizard_view']['step_data']
>>> {
>>>     'slider-form': {
>>>         'csrfmiddlewaretoken': ['DhINThGTgQ50e2lDnGG4nYrG0a'],
>>>         'slider-form-test_slider': ['14'],
>>>         'form_wizard_view-current_step': ['slider-form'],
>>>         'slider-form-test_email': ['user@example.com']
>>>     }
>>> }

Note, that we know nothing about the types here, type conversion should be done manually. The values returned are strings always.

Parameters:
  • request (django.http.HttpRequest) –
  • wizard_view_name (str) –
  • form_key (str) – Typically, this would be the step name (form slug).
  • field_name (str) – Field name.
  • fail_silently (bool) – If set to True, no errors raised.
Return str:

Since everything in session is stored as string.

fobi.helpers.handle_uploaded_file(upload_dir, image_file)[source]

Handle uploaded files.

Parameters:image_file (django.core.files.uploadedfile.InMemoryUploadedFile) –
Return string:Path to the image (relative).
fobi.helpers.iterable_to_dict(items, key_attr_name)[source]

Converts iterable of certain objects to dict.

Parameters:
  • items (iterable) –
  • key_attr_name (string) – Attribute to use as a dictionary key.
Return dict:
class fobi.helpers.JSONDataExporter(data, filename)[source]

Bases: object

Exporting the data into JSON.

export()[source]

Export.

export_to_json()[source]

Export data to JSON.

fobi.helpers.lists_overlap(sub, main)[source]

Check whether lists overlap.

fobi.helpers.map_field_name_to_label(form)[source]

Takes a form and creates label to field name map.

Parameters:form (django.forms.Form) – Instance of django.forms.Form.
Return dict:
fobi.helpers.safe_text(text)[source]

Safe text (encode).

Return str:
class fobi.helpers.StrippedRequest(request)[source]

Bases: object

Stripped request object.

META

Request meta stripped down.

A standard Python dictionary containing all available HTTP headers. Available headers depend on the client and server, but here are some examples:

  • HTTP_ACCEPT_ENCODING: Acceptable encodings for the response.
  • HTTP_ACCEPT_LANGUAGE: Acceptable languages for the response.
  • HTTP_HOST: The HTTP Host header sent by the client.
  • HTTP_REFERER: The referring page, if any.
  • HTTP_USER_AGENT: The clients user-agent string.
  • QUERY_STRING: The query string, as a single (unparsed) string.
  • REMOTE_ADDR: The IP address of the client.
get_full_path()[source]

Returns the path, plus an appended query string, if applicable.

is_ajax()[source]

Is ajax?

Returns True if the request was made via an XMLHttpRequest, by checking the HTTP_X_REQUESTED_WITH header for the string ‘XMLHttpRequest’.

is_secure()[source]

Is secure.

Returns True if the request is secure; that is, if it was made with HTTPS.

path

Path.

A string representing the full path to the requested page, not including the scheme or domain.

class fobi.helpers.StrippedUser(user)[source]

Bases: object

Stripped user object.

email

Email.

get_full_name()[source]

Get full name.

get_short_name()[source]

Get short name.

get_username()[source]

Get username.

is_anonymous()[source]

Is anonymous.

fobi.helpers.two_dicts_to_string(headers, data, html_element='p')[source]

Two dicts to string.

Takes two dictionaries, assuming one contains a mapping keys to titles and another keys to data. Joins as string and returns wrapped into HTML “p” tag.

fobi.helpers.uniquify_sequence(sequence)[source]

Uniqify sequence.

Makes sure items in the given sequence are unique, having the original order preserved.

Parameters:sequence (iterable) –
Return list:
fobi.helpers.update_plugin_data(entry, request=None)[source]

Update plugin data.

Update plugin data of a given entry.

fobi.helpers.validate_initial_for_choices(plugin_form, field_name_choices='choices', field_name_initial='initial')[source]

Validate init for choices. Validates the initial value for the choices given.

Parameters:
Return str:
fobi.helpers.validate_initial_for_multiple_choices(plugin_form, field_name_choices='choices', field_name_initial='initial')[source]

Validates the initial value for the multiple choices given.

Parameters:
Return str:
fobi.helpers.validate_submit_value_as(value)[source]

Validates the SUBMIT_AS_VALUE.

Parameters:value (str) –

fobi.models module

class fobi.models.AbstractPluginModel(*args, **kwargs)[source]

Bases: django.db.models.base.Model

Abstract plugin model.

Used when fobi.settings.RESTRICT_PLUGIN_ACCESS is set to True.

Properties:
  • plugin_uid (str): Plugin UID.
  • users (django.contrib.auth.models.User): White list of the users allowed to use the plugin.
  • groups (django.contrib.auth.models.Group): White list of the user groups allowed to use the plugin.
class Meta[source]

Meta class.

abstract = False
AbstractPluginModel.get_registered_plugins()[source]

Get registered plugins.

AbstractPluginModel.groups

Accessor to the related objects manager on the forward and reverse sides of a many-to-many relation.

In the example:

class Pizza(Model):
    toppings = ManyToManyField(Topping, related_name='pizzas')

pizza.toppings and topping.pizzas are ManyToManyDescriptor instances.

Most of the implementation is delegated to a dynamically defined manager class built by create_forward_many_to_many_manager() defined below.

AbstractPluginModel.groups_list()[source]

Groups list.

Flat list (comma separated string) of groups allowed to use the plugin. Used in Django admin.

Return string:
AbstractPluginModel.plugin_uid_admin()[source]

Plugin uid admin.

Mainly used in admin.

AbstractPluginModel.plugin_uid_code()[source]

Plugin uid code.

Mainly used in admin.

AbstractPluginModel.users

Accessor to the related objects manager on the forward and reverse sides of a many-to-many relation.

In the example:

class Pizza(Model):
    toppings = ManyToManyField(Topping, related_name='pizzas')

pizza.toppings and topping.pizzas are ManyToManyDescriptor instances.

Most of the implementation is delegated to a dynamically defined manager class built by create_forward_many_to_many_manager() defined below.

AbstractPluginModel.users_list()[source]

Users list.

Flat list (comma separated string) of users allowed to use the plugin. Used in Django admin.

Return string:
class fobi.models.FormElement(*args, **kwargs)[source]

Bases: fobi.models.AbstractPluginModel

Form element.

Form field plugin. Used when fobi.settings.RESTRICT_PLUGIN_ACCESS is set to True.

Properties:
  • plugin_uid (str): Plugin UID.
  • users (django.contrib.auth.models.User): White list of the users allowed to use the form element plugin.
  • groups (django.contrib.auth.models.Group): White list of the user groups allowed to use the form element plugin.
exception DoesNotExist

Bases: django.core.exceptions.ObjectDoesNotExist

exception FormElement.MultipleObjectsReturned

Bases: django.core.exceptions.MultipleObjectsReturned

FormElement.get_registered_plugins()[source]

Add choices.

FormElement.groups

Accessor to the related objects manager on the forward and reverse sides of a many-to-many relation.

In the example:

class Pizza(Model):
    toppings = ManyToManyField(Topping, related_name='pizzas')

pizza.toppings and topping.pizzas are ManyToManyDescriptor instances.

Most of the implementation is delegated to a dynamically defined manager class built by create_forward_many_to_many_manager() defined below.

FormElement.id

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

FormElement.objects = <django.db.models.manager.Manager object>
FormElement.plugin_uid

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

FormElement.users

Accessor to the related objects manager on the forward and reverse sides of a many-to-many relation.

In the example:

class Pizza(Model):
    toppings = ManyToManyField(Topping, related_name='pizzas')

pizza.toppings and topping.pizzas are ManyToManyDescriptor instances.

Most of the implementation is delegated to a dynamically defined manager class built by create_forward_many_to_many_manager() defined below.

class fobi.models.FormHandler(*args, **kwargs)[source]

Bases: fobi.models.AbstractPluginModel

Form handler plugin. Used when fobi.settings.RESTRICT_PLUGIN_ACCESS is set to True.

Properties:
  • plugin_uid (str): Plugin UID.
  • users (django.contrib.auth.models.User): White list of the users allowed to use the form handler plugin.
  • groups (django.contrib.auth.models.Group): White list of the user groups allowed to use the form handler plugin.
exception DoesNotExist

Bases: django.core.exceptions.ObjectDoesNotExist

exception FormHandler.MultipleObjectsReturned

Bases: django.core.exceptions.MultipleObjectsReturned

FormHandler.get_registered_plugins()[source]

Add choices.

FormHandler.groups

Accessor to the related objects manager on the forward and reverse sides of a many-to-many relation.

In the example:

class Pizza(Model):
    toppings = ManyToManyField(Topping, related_name='pizzas')

pizza.toppings and topping.pizzas are ManyToManyDescriptor instances.

Most of the implementation is delegated to a dynamically defined manager class built by create_forward_many_to_many_manager() defined below.

FormHandler.id

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

FormHandler.objects = <django.db.models.manager.Manager object>
FormHandler.plugin_uid

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

FormHandler.users

Accessor to the related objects manager on the forward and reverse sides of a many-to-many relation.

In the example:

class Pizza(Model):
    toppings = ManyToManyField(Topping, related_name='pizzas')

pizza.toppings and topping.pizzas are ManyToManyDescriptor instances.

Most of the implementation is delegated to a dynamically defined manager class built by create_forward_many_to_many_manager() defined below.

class fobi.models.FormWizardHandler(*args, **kwargs)[source]

Bases: fobi.models.AbstractPluginModel

Form wizard handler plugin. Used when fobi.settings.RESTRICT_PLUGIN_ACCESS is set to True.

Properties:
  • plugin_uid (str): Plugin UID.
  • users (django.contrib.auth.models.User): White list of the users allowed to use the form handler plugin.
  • groups (django.contrib.auth.models.Group): White list of the user groups allowed to use the form handler plugin.
exception DoesNotExist

Bases: django.core.exceptions.ObjectDoesNotExist

exception FormWizardHandler.MultipleObjectsReturned

Bases: django.core.exceptions.MultipleObjectsReturned

FormWizardHandler.get_registered_plugins()[source]

Add choices.

FormWizardHandler.groups

Accessor to the related objects manager on the forward and reverse sides of a many-to-many relation.

In the example:

class Pizza(Model):
    toppings = ManyToManyField(Topping, related_name='pizzas')

pizza.toppings and topping.pizzas are ManyToManyDescriptor instances.

Most of the implementation is delegated to a dynamically defined manager class built by create_forward_many_to_many_manager() defined below.

FormWizardHandler.id

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

FormWizardHandler.objects = <django.db.models.manager.Manager object>
FormWizardHandler.plugin_uid

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

FormWizardHandler.users

Accessor to the related objects manager on the forward and reverse sides of a many-to-many relation.

In the example:

class Pizza(Model):
    toppings = ManyToManyField(Topping, related_name='pizzas')

pizza.toppings and topping.pizzas are ManyToManyDescriptor instances.

Most of the implementation is delegated to a dynamically defined manager class built by create_forward_many_to_many_manager() defined below.

class fobi.models.BaseAbstractPluginEntry(*args, **kwargs)[source]

Bases: django.db.models.base.Model

Base for AbstractPluginEntry.

Properties:
  • plugin_data (str): JSON formatted string with plugin data.
class Meta[source]

Meta class.

abstract = False
BaseAbstractPluginEntry.entry_user

Get user from the parent container.

BaseAbstractPluginEntry.get_plugin(fetch_related_data=False, request=None)[source]

Get plugin.

Gets the plugin class (by plugin_uid property), makes an instance of it, serves the data stored in plugin_data field (if available). Once all is done, plugin is ready to be rendered.

Parameters:fetch_related_data (bool) – When set to True, plugin is told to re-fetch all related data (stored in models or other sources).
Return fobi.base.BasePlugin:
 Subclass of fobi.base.BasePlugin.
BaseAbstractPluginEntry.get_registered_plugins()[source]

Get registered plugins.

BaseAbstractPluginEntry.get_registry()[source]

Get registry.

BaseAbstractPluginEntry.plugin_data

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

BaseAbstractPluginEntry.plugin_name()[source]

Plugin name.

BaseAbstractPluginEntry.plugin_uid_code()[source]

Plugin uid code.

Mainly used in admin.

class fobi.models.AbstractPluginEntry(*args, **kwargs)[source]

Bases: fobi.models.BaseAbstractPluginEntry

Abstract plugin entry.

Properties:
  • form_entry (fobi.models.FormEntry): Form to which the field plugin belongs to.
  • plugin_uid (str): Plugin UID.
  • plugin_data (str): JSON formatted string with plugin data.
class Meta[source]

Meta class.

abstract = False
AbstractPluginEntry.entry_user

Get user.

AbstractPluginEntry.form_entry

Accessor to the related object on the forward side of a many-to-one or one-to-one relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

child.parent is a ForwardManyToOneDescriptor instance.

AbstractPluginEntry.form_entry_id

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

class fobi.models.FormWizardEntry(*args, **kwargs)[source]

Bases: django.db.models.base.Model

Form wizard entry.

exception DoesNotExist

Bases: django.core.exceptions.ObjectDoesNotExist

exception FormWizardEntry.MultipleObjectsReturned

Bases: django.core.exceptions.MultipleObjectsReturned

FormWizardEntry.created

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

FormWizardEntry.formwizardformentry_set

Accessor to the related objects manager on the reverse side of a many-to-one relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

parent.children is a ReverseManyToOneDescriptor instance.

Most of the implementation is delegated to a dynamically defined manager class built by create_forward_many_to_many_manager() defined below.

FormWizardEntry.formwizardhandlerentry_set

Accessor to the related objects manager on the reverse side of a many-to-one relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

parent.children is a ReverseManyToOneDescriptor instance.

Most of the implementation is delegated to a dynamically defined manager class built by create_forward_many_to_many_manager() defined below.

FormWizardEntry.get_absolute_url()[source]

Get absolute URL.

Absolute URL, which goes to the form-wizard view view.

Return string:
FormWizardEntry.get_wizard_type_display(*moreargs, **morekwargs)
FormWizardEntry.id

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

FormWizardEntry.is_cloneable

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

FormWizardEntry.is_public

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

FormWizardEntry.name

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

FormWizardEntry.objects = <django.db.models.manager.Manager object>
FormWizardEntry.savedformwizarddataentry_set

Accessor to the related objects manager on the reverse side of a many-to-one relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

parent.children is a ReverseManyToOneDescriptor instance.

Most of the implementation is delegated to a dynamically defined manager class built by create_forward_many_to_many_manager() defined below.

FormWizardEntry.show_all_navigation_buttons

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

FormWizardEntry.slug

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

FormWizardEntry.success_page_message

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

FormWizardEntry.success_page_title

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

FormWizardEntry.title

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

FormWizardEntry.updated

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

FormWizardEntry.user

Accessor to the related object on the forward side of a many-to-one or one-to-one relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

child.parent is a ForwardManyToOneDescriptor instance.

FormWizardEntry.user_id

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

FormWizardEntry.wizard_type

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

class fobi.models.FormEntry(*args, **kwargs)[source]

Bases: django.db.models.base.Model

Form entry.

Properties:
  • user (django.contrib.auth.models.User: User owning the plugin.
  • name (str): Form name.
  • title (str): Form title - used in templates.
  • slug (str): Form slug.
  • description (str): Form description.
  • is_public (bool): If set to True, is visible to public.
  • is_cloneable (bool): If set to True, is cloneable.
  • position (int): Ordering position in the wizard.
exception DoesNotExist

Bases: django.core.exceptions.ObjectDoesNotExist

exception FormEntry.MultipleObjectsReturned

Bases: django.core.exceptions.MultipleObjectsReturned

FormEntry.action

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

FormEntry.created

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

FormEntry.formelemententry_set

Accessor to the related objects manager on the reverse side of a many-to-one relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

parent.children is a ReverseManyToOneDescriptor instance.

Most of the implementation is delegated to a dynamically defined manager class built by create_forward_many_to_many_manager() defined below.

FormEntry.formfieldsetentry_set

Accessor to the related objects manager on the reverse side of a many-to-one relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

parent.children is a ReverseManyToOneDescriptor instance.

Most of the implementation is delegated to a dynamically defined manager class built by create_forward_many_to_many_manager() defined below.

FormEntry.formhandlerentry_set

Accessor to the related objects manager on the reverse side of a many-to-one relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

parent.children is a ReverseManyToOneDescriptor instance.

Most of the implementation is delegated to a dynamically defined manager class built by create_forward_many_to_many_manager() defined below.

FormEntry.formwizardformentry_set

Accessor to the related objects manager on the reverse side of a many-to-one relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

parent.children is a ReverseManyToOneDescriptor instance.

Most of the implementation is delegated to a dynamically defined manager class built by create_forward_many_to_many_manager() defined below.

FormEntry.get_absolute_url()[source]

Get absolute URL.

Absolute URL, which goes to the form-entry view view page.

Return string:
FormEntry.id

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

FormEntry.is_cloneable

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

FormEntry.is_public

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

FormEntry.name

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

FormEntry.objects = <django.db.models.manager.Manager object>
FormEntry.savedformdataentry_set

Accessor to the related objects manager on the reverse side of a many-to-one relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

parent.children is a ReverseManyToOneDescriptor instance.

Most of the implementation is delegated to a dynamically defined manager class built by create_forward_many_to_many_manager() defined below.

FormEntry.slug

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

FormEntry.success_page_message

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

FormEntry.success_page_title

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

FormEntry.title

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

FormEntry.updated

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

FormEntry.user

Accessor to the related object on the forward side of a many-to-one or one-to-one relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

child.parent is a ForwardManyToOneDescriptor instance.

FormEntry.user_id

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

class fobi.models.FormElementEntry(*args, **kwargs)[source]

Bases: fobi.models.AbstractPluginEntry

Form field entry.

Properties:
  • form (fobi.models.FormEntry): Form to which the field plugin belongs to.
  • plugin_uid (str): Plugin UID.
  • plugin_data (str): JSON formatted string with plugin data.
  • form_fieldset_entry: Fieldset.
  • position (int): Entry position.
exception DoesNotExist

Bases: django.core.exceptions.ObjectDoesNotExist

exception FormElementEntry.MultipleObjectsReturned

Bases: django.core.exceptions.MultipleObjectsReturned

FormElementEntry.form_entry

Accessor to the related object on the forward side of a many-to-one or one-to-one relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

child.parent is a ForwardManyToOneDescriptor instance.

FormElementEntry.form_fieldset_entry

Accessor to the related object on the forward side of a many-to-one or one-to-one relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

child.parent is a ForwardManyToOneDescriptor instance.

FormElementEntry.form_fieldset_entry_id

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

FormElementEntry.get_registered_plugins()[source]

Gets registered plugins.

FormElementEntry.get_registry()[source]

Get registry.

FormElementEntry.id

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

FormElementEntry.objects = <django.db.models.manager.Manager object>
FormElementEntry.plugin_uid

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

FormElementEntry.position

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

class fobi.models.FormFieldsetEntry(*args, **kwargs)[source]

Bases: django.db.models.base.Model

Form fieldset entry.

exception DoesNotExist

Bases: django.core.exceptions.ObjectDoesNotExist

exception FormFieldsetEntry.MultipleObjectsReturned

Bases: django.core.exceptions.MultipleObjectsReturned

FormFieldsetEntry.form_entry

Accessor to the related object on the forward side of a many-to-one or one-to-one relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

child.parent is a ForwardManyToOneDescriptor instance.

FormFieldsetEntry.form_entry_id

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

FormFieldsetEntry.formelemententry_set

Accessor to the related objects manager on the reverse side of a many-to-one relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

parent.children is a ReverseManyToOneDescriptor instance.

Most of the implementation is delegated to a dynamically defined manager class built by create_forward_many_to_many_manager() defined below.

FormFieldsetEntry.id

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

FormFieldsetEntry.is_repeatable

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

FormFieldsetEntry.name

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

FormFieldsetEntry.objects = <django.db.models.manager.Manager object>
class fobi.models.FormHandlerEntry(*args, **kwargs)[source]

Bases: fobi.models.AbstractPluginEntry

Form handler entry.

Properties:
  • form_entry (fobi.models.FormEntry): Form to which the handler plugin belongs to.
  • plugin_uid (str): Plugin UID.
  • plugin_data (str): JSON formatted string with plugin data.
exception DoesNotExist

Bases: django.core.exceptions.ObjectDoesNotExist

exception FormHandlerEntry.MultipleObjectsReturned

Bases: django.core.exceptions.MultipleObjectsReturned

FormHandlerEntry.form_entry

Accessor to the related object on the forward side of a many-to-one or one-to-one relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

child.parent is a ForwardManyToOneDescriptor instance.

FormHandlerEntry.get_registered_plugins()[source]

Gets registered plugins.

FormHandlerEntry.get_registry()[source]

Get registry.

FormHandlerEntry.id

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

FormHandlerEntry.objects = <django.db.models.manager.Manager object>
FormHandlerEntry.plugin_uid

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

class fobi.models.AbstractFormWizardPluginEntry(*args, **kwargs)[source]

Bases: fobi.models.BaseAbstractPluginEntry

Abstract form wizard plugin entry.

Properties:
  • form_entry (fobi.models.FormWizardEntry): FormWizard to which the plugin belongs to.
  • plugin_uid (str): Plugin UID.
  • plugin_data (str): JSON formatted string with plugin data.
class Meta[source]

Meta class.

abstract = False
AbstractFormWizardPluginEntry.entry_user

Get user.

AbstractFormWizardPluginEntry.form_wizard_entry

Accessor to the related object on the forward side of a many-to-one or one-to-one relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

child.parent is a ForwardManyToOneDescriptor instance.

AbstractFormWizardPluginEntry.form_wizard_entry_id

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

class fobi.models.FormWizardHandlerEntry(*args, **kwargs)[source]

Bases: fobi.models.AbstractFormWizardPluginEntry

Form wizard handler entry.

Properties:
  • form_wizard_entry (fobi.models.FormWizardEntry): FormWizard to which the handler plugin belongs to.
  • plugin_uid (str): Plugin UID.
  • plugin_data (str): JSON formatted string with plugin data.
exception DoesNotExist

Bases: django.core.exceptions.ObjectDoesNotExist

exception FormWizardHandlerEntry.MultipleObjectsReturned

Bases: django.core.exceptions.MultipleObjectsReturned

FormWizardHandlerEntry.form_wizard_entry

Accessor to the related object on the forward side of a many-to-one or one-to-one relation.

In the example:

class Child(Model):
    parent = ForeignKey(Parent, related_name='children')

child.parent is a ForwardManyToOneDescriptor instance.

FormWizardHandlerEntry.get_registered_plugins()[source]

Gets registered plugins.

FormWizardHandlerEntry.get_registry()[source]

Get registry.

FormWizardHandlerEntry.id

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

FormWizardHandlerEntry.objects = <django.db.models.manager.Manager object>
FormWizardHandlerEntry.plugin_uid

A wrapper for a deferred-loading field. When the value is read from this object the first time, the query is executed.

fobi.settings module

  • RESTRICT_PLUGIN_ACCESS (bool): If set to True, (Django) permission system for fobi plugins is enabled.
  • FORM_ELEMENT_PLUGINS_MODULE_NAME (str): Name of the module to placed in the (external) apps in which the fobi form element plugin code should be implemented and registered.
  • FORM_HANDLER_PLUGINS_MODULE_NAME (str): Name of the module to placed in the (external) apps in which the fobi form handler plugin code should be implemented and registered.
  • FORM_CALLBACKS_MODULE_NAME (str): Name of the module to placed in the (external) apps in which the fobi form callback code should be implemented and registered.
  • FORM_HANDLER_PLUGINS_EXECUTION_ORDER (tuple): Order in which the form handler plugins are to be executed.
  • FORM_WIZARD_HANDLER_PLUGINS_EXECUTION_ORDER (tuple): Order in which the form handler plugins are to be executed.
  • DEBUG

fobi.test module

fobi.utils module

Another helper module. This module can NOT be safely imported from any fobi (sub)module - thus should be imported carefully.

fobi.utils.get_allowed_plugin_uids(PluginModel, user)[source]

Get allowed plugins uids for user given.

Parameters:
Return list:
fobi.utils.get_user_plugins(get_allowed_plugin_uids_func, get_registered_plugins_func, registry, user)[source]

Get user plugins.

Gets a list of user plugins in a form if tuple (plugin name, plugin description). If not yet autodiscovered, autodiscovers them.

Parameters:
  • get_allowed_plugin_uids_func (callable) –
  • get_registered_plugins_func (callable) –
  • registry (fobi.base.BaseRegistry) – Subclass of fobi.base.BaseRegistry instance.
  • user (django.contrib.auth.models.User) –
Return list:
fobi.utils.get_user_plugin_uids(get_allowed_plugin_uids_func, get_registered_plugin_uids_func, registry, user)[source]

Gets a list of user plugin uids as a list.

If not yet auto-discovered, auto-discovers them.

Parameters:
  • get_allowed_plugin_uids_func (callable) –
  • get_registered_plugin_uids_func (callable) –
  • registry (fobi.base.BaseRegistry) – Subclass of fobi.base.BaseRegistry instance.
  • user (django.contrib.auth.models.User) –
Return list:
fobi.utils.sync_plugins()[source]

Sync registered plugins.

Syncs the registered plugin list with data in fobi.models.FormFieldPluginModel, fobi.models.FormHandlerPluginModel and fobi.models.FormWizardHandlerPluginModel.

fobi.utils.get_allowed_form_element_plugin_uids(user)[source]

Get allowed form element plugin uids.

fobi.utils.get_user_form_element_plugins(user)[source]

Get user form element plugins.

fobi.utils.get_allowed_form_handler_plugin_uids(user)[source]

Get allowed form handler plugin uids.

fobi.utils.get_allowed_form_wizard_handler_plugin_uids(user)[source]

Get allowed form wizard handler plugin uids.

fobi.utils.get_user_form_handler_plugins(user, exclude_used_singles=False, used_form_handler_plugin_uids=[])[source]

Get list of plugins allowed for user.

Parameters:
  • user (django.contrib.auth.models.User) –
  • exclude_used_singles (bool) –
  • used_form_handler_plugin_uids (list) –
Return list:
fobi.utils.get_user_form_wizard_handler_plugins(user, exclude_used_singles=False, used_form_wizard_handler_plugin_uids=[])[source]

Get list of plugins allowed for user.

Parameters:
  • user (django.contrib.auth.models.User) –
  • exclude_used_singles (bool) –
  • used_form_wizard_handler_plugin_uids (list) –
Return list:
fobi.utils.get_user_form_handler_plugin_uids(user)[source]

Get user form handler plugin uids.

fobi.utils.get_user_form_wizard_handler_plugin_uids(user)[source]

Get user form handler plugin uids.

fobi.utils.get_user_plugins_grouped(get_allowed_plugin_uids_func, get_registered_plugins_grouped_func, registry, user, sort_items=True)[source]

Get user plugins grouped.

Parameters:
  • get_allowed_plugin_uids_func (callable) –
  • get_registered_plugins_grouped_func (callable) –
  • registry (fobi.base.BaseRegistry) – Subclass of fobi.base.BaseRegistry instance.
  • user (django.contrib.auth.models.User) –
  • sort_items (bool) –
Return dict:
fobi.utils.get_user_form_element_plugins_grouped(user)[source]

Get user form element plugins grouped.

fobi.utils.get_user_form_handler_plugins_grouped(user)[source]

Get user form handler plugins grouped.

fobi.utils.get_user_form_wizard_handler_plugins_grouped(user)[source]

Get user form wizard handler plugins grouped.

fobi.utils.prepare_form_entry_export_data(form_entry, form_element_entries=None, form_handler_entries=None)[source]

Prepare form entry export data.

Parameters:
  • form_entry (fobi.modes.FormEntry) – Instance of.
  • form_element_entries (django.db.models.QuerySet) – QuerySet of FormElementEntry instances.
  • form_handler_entries (django.db.models.QuerySet) – QuerySet of FormHandlerEntry instances.
Return str:
fobi.utils.perform_form_entry_import(request, form_data)[source]

Perform form entry import.

Parameters:
  • request (django.http.HttpRequest) –
  • form_data (dict) –

:return :class:`fobi.modes.FormEntry: Instance of.

fobi.validators module

fobi.validators.url_exists(url, local=False)[source]

Check if URL exists.

Parameters:
  • url (str) –
  • local (bool) –
Return bool:

fobi.views module

Views.

fobi.views.add_form_element_entry(request, *args, **kwargs)[source]

Add form element entry.

Parameters:
  • request (django.http.HttpRequest) –
  • form_entry_id (int) –
  • form_element_plugin_uid (int) –
  • theme (fobi.base.BaseTheme) – Theme instance.
  • template_name (string) –
Return django.http.HttpResponse:
 
fobi.views.add_form_handler_entry(request, *args, **kwargs)[source]

Add form handler entry.

Parameters:
  • request (django.http.HttpRequest) –
  • form_entry_id (int) –
  • form_handler_plugin_uid (int) –
  • theme (fobi.base.BaseTheme) – Theme instance.
  • template_name (string) –
Return django.http.HttpResponse:
 
fobi.views.add_form_wizard_form_entry(request, *args, **kwargs)[source]

Add form wizard form entry.

Parameters:
  • request (django.http.HttpRequest) –
  • form_wizard_entry_id (int) –
  • form_entry_id (int) –
  • theme (fobi.base.BaseTheme) – Theme instance.
  • template_name (string) –
Return django.http.HttpResponse:
 
fobi.views.add_form_wizard_handler_entry(request, *args, **kwargs)[source]

Add form handler entry.

Parameters:
  • request (django.http.HttpRequest) –
  • form_entry_id (int) –
  • form_handler_plugin_uid (int) –
  • theme (fobi.base.BaseTheme) – Theme instance.
  • template_name (string) –
Return django.http.HttpResponse:
 
fobi.views.create_form_entry(request, *args, **kwargs)[source]

Create form entry.

Parameters:
  • request (django.http.HttpRequest) –
  • theme (fobi.base.BaseTheme) – Theme instance.
  • template_name (str) –
Return django.http.HttpResponse:
 
fobi.views.create_form_wizard_entry(request, *args, **kwargs)[source]

Create form wizard entry.

Parameters:
  • request (django.http.HttpRequest) –
  • theme (fobi.base.BaseTheme) – Theme instance.
  • template_name (str) –
Return django.http.HttpResponse:
 
fobi.views.dashboard(request, *args, **kwargs)[source]

Dashboard.

Parameters:
  • request (django.http.HttpRequest) –
  • theme (fobi.base.BaseTheme) – Theme instance.
  • template_name (string) –
Return django.http.HttpResponse:
 
fobi.views.delete_form_element_entry(request, *args, **kwargs)[source]

Delete form element entry.

Parameters:
  • request (django.http.HttpRequest) –
  • form_element_entry_id (int) –
Return django.http.HttpResponse:
 
fobi.views.delete_form_entry(request, *args, **kwargs)[source]

Delete form entry.

Parameters:
  • request (django.http.HttpRequest) –
  • form_entry_id (int) –
  • template_name (string) –
Return django.http.HttpResponse:
 
fobi.views.delete_form_handler_entry(request, *args, **kwargs)[source]

Delete form handler entry.

Parameters:
  • request (django.http.HttpRequest) –
  • form_handler_entry_id (int) –
Return django.http.HttpResponse:
 
fobi.views.delete_form_wizard_entry(request, *args, **kwargs)[source]

Delete form wizard entry.

Parameters:
  • request (django.http.HttpRequest) –
  • form_wizard_entry_id (int) –
  • template_name (string) –
Return django.http.HttpResponse:
 
fobi.views.delete_form_wizard_form_entry(request, *args, **kwargs)[source]

Delete form wizard form entry.

Parameters:
  • request (django.http.HttpRequest) –
  • form_wizard_form_entry_id (int) –
Return django.http.HttpResponse:
 
fobi.views.edit_form_element_entry(request, *args, **kwargs)[source]

Edit form element entry.

Parameters:
  • request (django.http.HttpRequest) –
  • form_element_entry_id (int) –
  • fobi.base.BaseTheme – Theme instance.
  • template_name (string) –
Return django.http.HttpResponse:
 
fobi.views.edit_form_entry(request, *args, **kwargs)[source]

Edit form entry.

Parameters:
  • request (django.http.HttpRequest) –
  • form_entry_id (int) –
  • theme (fobi.base.BaseTheme) – Theme instance.
  • template_name (str) –
Return django.http.HttpResponse:
 
fobi.views.edit_form_handler_entry(request, *args, **kwargs)[source]

Edit form handler entry.

Parameters:
  • request (django.http.HttpRequest) –
  • form_handler_entry_id (int) –
  • theme (fobi.base.BaseTheme) – Theme instance.
  • template_name (string) –
Return django.http.HttpResponse:
 
fobi.views.edit_form_wizard_handler_entry(request, *args, **kwargs)[source]

Edit form handler entry.

Parameters:
  • request (django.http.HttpRequest) –
  • form_handler_entry_id (int) –
  • theme (fobi.base.BaseTheme) – Theme instance.
  • template_name (string) –
Return django.http.HttpResponse:
 
fobi.views.export_form_entry(request, *args, **kwargs)[source]

Export form entry to JSON.

Parameters:
  • request (django.http.HttpRequest) –
  • form_entry_id (int) –
  • template_name (string) –
Return django.http.HttpResponse:
 
fobi.views.form_entry_submitted(request, form_entry_slug=None, template_name=None)[source]

Form entry submitted.

Parameters:
  • request (django.http.HttpRequest) –
  • form_entry_slug (string) –
  • template_name (string) –
Return django.http.HttpResponse:
 
fobi.views.form_importer(request, *args, **kwargs)[source]

Form importer.

Parameters:
  • request (django.http.HttpRequest) –
  • form_importer_plugin_uid (str) –
  • template_name (str) –
fobi.views.form_wizard_entry_submitted(request, form_wizard_entry_slug=None, template_name=None)[source]

Form wizard entry submitted.

Parameters:
  • request (django.http.HttpRequest) –
  • form_wizard_entry_slug (string) –
  • template_name (string) –
Return django.http.HttpResponse:
 
fobi.views.form_wizards_dashboard(request, *args, **kwargs)[source]

Dashboard for form wizards.

Parameters:
  • request (django.http.HttpRequest) –
  • theme (fobi.base.BaseTheme) – Theme instance.
  • template_name (string) –
Return django.http.HttpResponse:
 
class fobi.views.FormWizardView(**kwargs)[source]

Bases: fobi.wizard.views.dynamic.DynamicSessionWizardView

Dynamic form wizard.

done(form_list, **kwargs)[source]

Done.

file_storage = <django.core.files.storage.FileSystemStorage object>
get_context_data(form, **kwargs)[source]

Get context data.

get_form_entry_for_step(step)[source]

Get form entry title for step.

get_initial_wizard_data(request, *args, **kwargs)[source]

Get initial wizard data.

post(*args, **kwargs)[source]

POST requests.

This method handles POST requests.

The wizard will render either the current step (if form validation wasn’t successful), the next step (if the current step was stored successful) or the done view (if no more steps are available)

render_done(form, **kwargs)[source]

Render done.

This method gets called when all forms passed. The method should also re-validate all steps to prevent manipulation. If any form fails to validate, render_revalidation_failure should get called. If everything is fine call done.

fobi.views.import_form_entry(request, *args, **kwargs)[source]

Import form entry.

Parameters:
  • request (django.http.HttpRequest) –
  • template_name (string) –
Return django.http.HttpResponse:
 
fobi.views.import_form_wizard_entry(request, *args, **kwargs)[source]

Import form wizard entry.

Parameters:
  • request (django.http.HttpRequest) –
  • template_name (string) –
Return django.http.HttpResponse:
 
fobi.views.view_form_entry(request, form_entry_slug, theme=None, template_name=None)[source]

View created form.

Parameters:
  • request (django.http.HttpRequest) –
  • form_entry_slug (string) –
  • theme (fobi.base.BaseTheme) – Theme instance.
  • template_name (string) –
Return django.http.HttpResponse:
 

fobi.widgets module

class fobi.widgets.NumberInput(attrs=None)[source]

Bases: django.forms.widgets.TextInput

input_type = u'number'
media
class fobi.widgets.BooleanRadioSelect(*args, **kwargs)[source]

Bases: django.forms.widgets.RadioSelect

Boolean radio select for Django.

Example:
>>> class DummyForm(forms.Form):
>>>     agree = forms.BooleanField(label=_("Agree?"),
>>>                                required=False,
>>>                                widget=BooleanRadioSelect)
media
class fobi.widgets.RichSelect(attrs=None, choices=(), prepend_html=None, append_html=None, override_name=None)[source]

Bases: django.forms.widgets.Select

Rich select widget with some rich enhancements.

Based on original Select widget and intended to be a drop-off replacement.

media
render(name, value, attrs=None)[source]

Renders the element, having prepended and appended extra parts.

class fobi.widgets.RichSelectInverseQuotes(attrs=None, choices=(), prepend_html=None, append_html=None, override_name=None)[source]

Bases: fobi.widgets.RichSelect

Almost same as original, but uses alternative flatatt function.

Uses inverse quotes.

media
render(name, value, attrs=None)[source]

Module contents