ferrosoft.apps.ferrobase.tenant package¶
Submodules¶
ferrosoft.apps.ferrobase.tenant.context module¶
Context-variable storage for the currently active tenant.
Multi-tenancy is propagated through a single ContextVar so that both
threaded and asynchronous request handling pick up the correct tenant without
any explicit argument passing. ORM helpers in
ferrosoft.apps.ferrobase.tenant.utils consult this variable to pick the
right database alias.
- ferrosoft.apps.ferrobase.tenant.context.active_tenant(tenant)[source]¶
Activate
tenantfor the duration of thewithblock.On enter the tenant’s database connection is activated (when
tenantis notNone) and the context variable is set. On exit the previous context value is restored via the token-based reset pattern, so nested activations behave correctly.
- ferrosoft.apps.ferrobase.tenant.context.get_current_tenant()[source]¶
Return the tenant active in the current execution context, or
None.
- ferrosoft.apps.ferrobase.tenant.context.set_current_tenant(tenant)[source]¶
Set the active tenant for the current execution context.
Performs no database side effects and does not restore the previous value on exit. Prefer
active_tenant()whenever the activation is scoped to a block of code.
ferrosoft.apps.ferrobase.tenant.forms module¶
- class ferrosoft.apps.ferrobase.tenant.forms.SignupForm(data=None, files=None, auto_id='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, renderer=None, bound_field_class=None)[source]¶
Bases:
FormPublic self-service signup form: applicant identity and company.
- base_fields = {'company': <django.forms.fields.CharField object>, 'email': <django.forms.fields.EmailField object>, 'first_name': <django.forms.fields.CharField object>, 'last_name': <django.forms.fields.CharField object>}¶
- declared_fields = {'company': <django.forms.fields.CharField object>, 'email': <django.forms.fields.EmailField object>, 'first_name': <django.forms.fields.CharField object>, 'last_name': <django.forms.fields.CharField object>}¶
- property media¶
Return all media required to render the widgets on this form.
- class ferrosoft.apps.ferrobase.tenant.forms.SignupUserForm(data=None, files=None, auto_id='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, renderer=None, bound_field_class=None)[source]¶
Bases:
FormAccount activation form collecting and confirming the initial password.
- base_fields = {'password': <django.forms.fields.CharField object>, 'password_confirm': <django.forms.fields.CharField object>}¶
- clean()[source]¶
Require both password fields to match.
The placeholder defaults (
"1"/"2") ensure that missing values are treated as mismatched rather than accidentally equal.
- declared_fields = {'password': <django.forms.fields.CharField object>, 'password_confirm': <django.forms.fields.CharField object>}¶
- property media¶
Return all media required to render the widgets on this form.
- class ferrosoft.apps.ferrobase.tenant.forms.UserResourcesForm(query)[source]¶
Bases:
FormRequest payload carrying the storage-location UUIDs to grant a user.
- storage_location = <ferrosoft.request.UUIDField object>¶
- class ferrosoft.apps.ferrobase.tenant.forms.UserSettingsForm(*args, **kwargs)[source]¶
Bases:
ModelFormModelForm for the user-editable subset of personal settings.
- class Meta[source]¶
Bases:
object- fields = ['first_name', 'last_name', 'email', 'language', 'timezone', 'color_theme']¶
- base_fields = {'color_theme': <django.forms.fields.TypedChoiceField object>, 'email': <django.forms.fields.EmailField object>, 'first_name': <django.forms.fields.CharField object>, 'language': <django.forms.models.ModelChoiceField object>, 'last_name': <django.forms.fields.CharField object>, 'timezone': <django.forms.models.ModelChoiceField object>}¶
- declared_fields = {}¶
- property media¶
Return all media required to render the widgets on this form.
ferrosoft.apps.ferrobase.tenant.tables module¶
- class ferrosoft.apps.ferrobase.tenant.tables.UserTable(data=None, order_by=None, orderable=None, empty_text=None, exclude=None, attrs=None, row_attrs=None, pinned_row_attrs=None, sequence=None, prefix=None, order_by_field=None, page_field=None, per_page_field=None, template_name=None, default=None, request=None, show_header=None, show_footer=True, extra_columns=None)[source]¶
Bases:
TableRead-only Bootstrap 5 listing of users with edit/delete/assign actions.
- class Meta[source]¶
Bases:
object- attrs = {'class': 'table nowrap fixed-layout'}¶
- fields = ('username', 'first_name', 'last_name', 'email', 'language')¶
- orderable = False¶
- template_name = 'ferrobase/table_bootstrap5.html'¶
- base_columns = {'assign_tenants': <ferrosoft.apps.ferrobase.tables.columns.ActionColumn object>, 'delete': <ferrosoft.apps.ferrobase.tables.columns.ActionColumn object>, 'edit': <ferrosoft.apps.ferrobase.tables.columns.ActionColumn object>, 'email': <ferrosoft.apps.ferrobase.tables.columns.Column object>, 'empty': <ferrosoft.apps.ferrobase.tables.columns.EmptyExpandColumn object>, 'first_name': <ferrosoft.apps.ferrobase.tables.columns.Column object>, 'language': <ferrosoft.apps.ferrobase.tables.columns.Column object>, 'last_name': <ferrosoft.apps.ferrobase.tables.columns.Column object>, 'username': <ferrosoft.apps.ferrobase.tables.columns.Column object>}¶