form.collection

Module Contents

Classes

FormCollection

Manages a collection of forms and form-submissions.

FormDefinitionCollection

Manages a collection of forms.

FormSubmissionCollection

Manages a collection of submissions.

FormRegistrationWindowCollection

Abstract base class for generic types.

Attributes

SubmissionHandler

form.collection.SubmissionHandler: typing_extensions.TypeAlias[source]
class form.collection.FormCollection(session: sqlalchemy.orm.Session)[source]

Manages a collection of forms and form-submissions.

property definitions: FormDefinitionCollection[source]
property submissions: FormSubmissionCollection[source]
property registration_windows: FormRegistrationWindowCollection[source]
scoped_submissions(name: str, ensure_existance: Literal[False]) FormSubmissionCollection[source]
scoped_submissions(name: str, ensure_existance: bool = True) FormSubmissionCollection | None
get_definitions_with_submission_count() Iterator[FormDefinition][source]

Returns all form definitions and the number of submissions belonging to those definitions, in a single query.

The number of submissions is stored on the form definition under the submissions_count attribute.

Only submissions which are ‘complete’ are considered.

class form.collection.FormDefinitionCollection(session: sqlalchemy.orm.Session)[source]

Manages a collection of forms.

query() Query[FormDefinition][source]
add(title: str, definition: str, type: str = 'generic', meta: dict[str, Any] | None = None, content: dict[str, Any] | None = None, name: str | None = None, payment_method: onegov.pay.types.PaymentMethod = 'manual', pick_up: str | None = None) onegov.form.models.FormDefinition[source]

Add the given form to the database.

delete(name: str, with_submissions: bool = False, with_registration_windows: bool = False, handle_submissions: SubmissionHandler | None = None, handle_registration_windows: RegistrationWindowHandler | None = None) None[source]

Delete the given form. Only possible if there are no submissions associated with it, or if with_submissions is True.

Note that pending submissions are removed automatically, only complete submissions have a bearing on with_submissions.

Pass two callbacks to handle additional logic before deleting the objects.

by_name(name: str) onegov.form.models.FormDefinition | None[source]

Returns the given form by name or None.

class form.collection.FormSubmissionCollection(session: sqlalchemy.orm.Session, name: str | None = None)[source]

Manages a collection of submissions.

query() Query[FormSubmission][source]
add(name: str | None, form: onegov.form.Form, state: onegov.form.types.SubmissionState, id: uuid.UUID | None = None, payment_method: PaymentMethod | None = None, minimum_price_total: float | None = None, meta: dict[str, Any] | None = None, email: str | None = None, spots: int | None = None) onegov.form.models.FormSubmission[source]

Takes a filled-out form instance and stores the submission in the database. The form instance is expected to have a _source parameter, which contains the source used to build the form (as only forms with this source may be stored).

This method expects the name of the form definition stored in the database. Use add_external() to add a submissions whose definition is not stored in the form_definitions table.

add_external(form: onegov.form.Form, state: onegov.form.types.SubmissionState, id: uuid.UUID | None = None, payment_method: PaymentMethod | None = None, minimum_price_total: float | None = None, meta: dict[str, Any] | None = None, email: str | None = None) onegov.form.models.FormSubmission[source]

Takes a filled-out form instance and stores the submission in the database. The form instance is expected to have a _source parameter, which contains the source used to build the form (as only forms with this source may be stored).

In contrast to add(), this method is meant for submissions whose definition is not stored in the form_definitions table.

complete_submission(submission: onegov.form.models.FormSubmission) None[source]

Changes the state to ‘complete’, if the data is valid.

update(submission: onegov.form.models.FormSubmission, form: onegov.form.Form, exclude: Collection[str] | None = None) None[source]

Takes a submission and a form and updates the submission data as well as the files stored in a separate table.

remove_old_pending_submissions(older_than: datetime.datetime, include_external: bool = False) None[source]

Removes all pending submissions older than the given date. The date is expected to be in UTC!

by_state(state: onegov.form.types.SubmissionState) Query[FormSubmission][source]
by_name(name: str) list[onegov.form.models.FormSubmission][source]

Return all submissions for the given form-name.

by_id(id: uuid.UUID, state: SubmissionState | None = None, current_only: bool = False) onegov.form.models.FormSubmission | None[source]

Return the submission by id.

State:

Only if the submission matches the given state.

Current_only:

Only if the submission is not older than one hour.

delete(submission: onegov.form.models.FormSubmission) None[source]

Deletes the given submission and all the files belonging to it.

class form.collection.FormRegistrationWindowCollection(session: sqlalchemy.orm.Session, name: str | None = None)[source]

Bases: onegov.core.collection.GenericCollection[onegov.form.models.FormRegistrationWindow]

Abstract base class for generic types.

A generic type is typically declared by inheriting from this class parameterized with one or more type variables. For example, a generic mapping type might be defined as:

class Mapping(Generic[KT, VT]):
    def __getitem__(self, key: KT) -> VT:
        ...
    # Etc.

This class can then be used as follows:

def lookup_name(mapping: Mapping[KT, VT], key: KT, default: VT) -> VT:
    try:
        return mapping[key]
    except KeyError:
        return default
property model_class: type[onegov.form.models.FormRegistrationWindow][source]
query() Query[FormRegistrationWindow][source]