fobi package

Subpackages

Submodules

fobi.admin module

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 0x7f816f1b3050>]
get_urls()[source]

Get URLs.

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 0x7f816f1ae910>, {'fields': ('plugin_uid', 'plugin_data')}), (<django.utils.functional.__proxy__ object at 0x7f816f1ae990>, {'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.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.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 0x7f816f415c50>, {'fields': ('name', 'is_public', 'is_cloneable')}), (<django.utils.functional.__proxy__ object at 0x7f816f3a7250>, {'fields': ('success_page_title', 'success_page_message', 'action'), 'classes': ('collapse',)}), (<django.utils.functional.__proxy__ object at 0x7f816f3a7290>, {'fields': ('user',), 'classes': ('collapse',)}), (<django.utils.functional.__proxy__ object at 0x7f816f3a72d0>, {'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.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.FormHandlerAdmin(model, admin_site)[source]

Bases: fobi.admin.BasePluginModelAdmin

FormHandler admin.

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

Get URLs.

media
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 0x7f816f1aeb10>, {'fields': ('plugin_uid', 'plugin_data')}), (<django.utils.functional.__proxy__ object at 0x7f816f1aeb90>, {'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.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

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.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

class fobi.base.BaseDataStorage[source]

Bases: object

Base storage data.

class fobi.base.FormElementPluginDataStorage[source]

Bases: fobi.base.BaseDataStorage

Storage for FormField data.

class fobi.base.FormHandlerPluginDataStorage[source]

Bases: fobi.base.BaseDataStorage

Storage for FormField data.

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.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 dash 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.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)[source]

Get the instances of form fields, that plugin contains.

Parameters:request (django.http.HttpRequest) –
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.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.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.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 cound’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) –

:return mixed.

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.

:param mixed.

type = None
unregister(cls)[source]

Un-register.

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.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.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.

:param mixed.

uidfy(cls)[source]

Makes a UID string from the class given.

Return string:
class fobi.base.ClassProperty[source]

Bases: property

ClassProperty.

fobi.base.classproperty

alias of ClassProperty

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_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_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_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.validate_form_element_plugin_uid(plugin_uid)[source]

Validate the form element plugin uid.

Parameters:plugin_uid (string) –
Return bool:
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_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.validate_form_handler_plugin_uid(plugin_uid)[source]

Validate the plugin uid.

Parameters:plugin_uid (string) –
Return bool:
fobi.base.get_registered_form_callbacks(stage=None)[source]

Get registered form callbacks for the stage given.

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:
 
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.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.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.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.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.validate_theme_uid(plugin_uid)[source]

Validate the theme uid.

Parameters:plugin_uid (string) –
Return bool:
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.FormFieldPlugin(user=None)[source]

Bases: fobi.base.FormElementPlugin

Form field plugin.

has_value = True
class fobi.base.FormElementPluginWidgetRegistry[source]

Bases: fobi.base.BasePluginWidgetRegistry

Registry of form element plugins.

type

alias of FormElementPluginWidget

class fobi.base.FormHandlerPluginWidgetRegistry[source]

Bases: fobi.base.BasePluginWidgetRegistry

Registry of form handler plugins.

type

alias of FormHandlerPluginWidget

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

Bases: fobi.base.BasePluginWidget

Form element plugin widget.

storage

alias of FormElementPluginWidgetDataStorage

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

Bases: fobi.base.BasePluginWidget

Form handler plugin widget.

storage

alias of FormHandlerPluginWidgetDataStorage

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

Assemble form field widget class.

Finish this or remove.

#TODO

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_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:
  • 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_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:
  • 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.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.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.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)[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).

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.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.FormEntryForm(*args, **kwargs)[source]

Bases: django.forms.models.ModelForm

Form for fobi.models.FormEntry model.

class Meta[source]

Meta class.

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

alias of FormEntry

FormEntryForm.base_fields = OrderedDict([('name', <django.forms.fields.CharField object at 0x7f816f3c9fd0>), ('is_public', <django.forms.fields.BooleanField object at 0x7f816f3c9ed0>), ('success_page_title', <django.forms.fields.CharField object at 0x7f816f3cb090>), ('success_page_message', <django.forms.fields.CharField object at 0x7f816f370ad0>), ('action', <django.forms.fields.CharField object at 0x7f816f370b50>)])
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 0x7f816f370e10>)])
FormFieldsetEntryForm.declared_fields = OrderedDict()
FormFieldsetEntryForm.media
fobi.forms.FormElementEntryFormSet

alias of FormElementEntryFormFormSet

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 0x7f816f1ae0d0>), ('groups_action', <django.forms.fields.ChoiceField object at 0x7f816f1a3b10>), ('users', <django.forms.models.ModelMultipleChoiceField object at 0x7f816f1a3e90>), ('users_action', <django.forms.fields.ChoiceField object at 0x7f816f1a3a10>), ('selected_plugins', <django.forms.fields.CharField object at 0x7f816f1a38d0>)])
BulkChangeFormElementPluginsForm.declared_fields = OrderedDict([('selected_plugins', <django.forms.fields.CharField object at 0x7f816f1a38d0>), ('users_action', <django.forms.fields.ChoiceField object at 0x7f816f1a3a10>), ('groups_action', <django.forms.fields.ChoiceField object at 0x7f816f1a3b10>)])
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 0x7f816f1ae590>), ('groups_action', <django.forms.fields.ChoiceField object at 0x7f816f1a3b10>), ('users', <django.forms.models.ModelMultipleChoiceField object at 0x7f816f1ae390>), ('users_action', <django.forms.fields.ChoiceField object at 0x7f816f1a3a10>), ('selected_plugins', <django.forms.fields.CharField object at 0x7f816f1a38d0>)])
BulkChangeFormHandlerPluginsForm.declared_fields = OrderedDict([('selected_plugins', <django.forms.fields.CharField object at 0x7f816f1a38d0>), ('users_action', <django.forms.fields.ChoiceField object at 0x7f816f1a3a10>), ('groups_action', <django.forms.fields.ChoiceField object at 0x7f816f1a3b10>)])
BulkChangeFormHandlerPluginsForm.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 0x7f816f1ae750>)])
declared_fields = OrderedDict([('file', <django.forms.fields.FileField object at 0x7f816f1ae750>)])
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 0x7f816f1a30d0>), ('groups', <django.forms.models.ModelMultipleChoiceField object at 0x7f816f1a32d0>)])
FormHandlerForm.declared_fields = OrderedDict()
FormHandlerForm.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 0x7f816f1a3610>), ('plugin_data', <django.forms.fields.CharField object at 0x7f816f1a3810>), ('plugin_uid', <django.forms.fields.ChoiceField object at 0x7f816f1a3090>)])
FormHandlerEntryForm.declared_fields = OrderedDict([('plugin_uid', <django.forms.fields.ChoiceField object at 0x7f816f1a3090>)])
FormHandlerEntryForm.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.do_slugify(s)[source]

Slugify.

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

Check whether lists overlap.

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:
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.clean_dict(source, keys=[], values=[])[source]

Removes given keys and values from dictionary.

Parameters:
  • source (dict) –
  • keys (iterable) –
  • values (iterable) –
Return dict:
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.ensure_unique_filename(destination)[source]

Makes sure filenames are never overwritten.

Parameters:destination (string) –
Return 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.delete_file(image_file)[source]

Delete file from disc.

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.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.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.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.safe_text(text)[source]

Safe text (encode).

Return str:
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.update_plugin_data(entry, request=None)[source]

Update plugin data.

Update plugin data of a given entry.

fobi.helpers.get_select_field_choices(raw_choices_data)[source]

Get select field choices.

Used in radio, select and other choice based fields.

Parameters:raw_choices_data (str) –
Return list:
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:plugin_form (fobi.base.BaseFormFieldPluginForm) –
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:plugin_form (fobi.base.BaseFormFieldPluginForm) –
fobi.helpers.validate_submit_value_as(value)[source]

Validates the SUBMIT_AS_VALUE.

Parameters:value (str) –
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
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.

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.JSONDataExporter(data, filename)[source]

Bases: object

Exporting the data into JSON.

export()[source]

Export.

export_to_json()[source]

Export data to JSON.

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.AbstractPluginEntry(*args, **kwargs)[source]

Bases: django.db.models.base.Model

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.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.

AbstractPluginEntry.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.
AbstractPluginEntry.get_registered_plugins()[source]

Get registered plugins.

AbstractPluginEntry.get_registry()[source]

Get registry.

AbstractPluginEntry.plugin_data

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

AbstractPluginEntry.plugin_name()[source]

Plugin name.

AbstractPluginEntry.plugin_uid_code()[source]

Plugin uid code.

Mainly used in admin.

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.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.

FormWizardEntry.get_absolute_url()[source]

Get absolute URL.

Absolute URL, which goes to the dashboard workspace page.

Return string:
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.slug

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.

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.
  • wizard (str): Form wizard to which the form entry belongs to.
  • name (str): Form name.
  • slug (str): Form slug.
  • description (str): Form description.
  • is_public (bool): If set to True, is visible to public.
  • is_clonable (bool): If set to True, is clonable.
  • 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.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.

FormEntry.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.

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.get_absolute_url()[source]

Get absolute URL.

Absolute URL, which goes to the dashboard workspace 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.position

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

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.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 field 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.

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.
  • 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 and fobi.models.FormHandlerPluginModel.

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_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_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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.import_form_entry(request, *args, **kwargs)[source]

Import form entry.

Parameters:
  • request (django.http.HttpRequest) –
  • 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.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

Module contents