The filter, sort key, and sort reverse options for table to
allow the presented table to be filtered and sorted.
Changed
Upgraded Python dependencies. Note that if you are using third-party
Python packages, you may encounter dependency conflicts. It is
possible that your interviews will need to be updated.
Upgraded Font Awesome, CodeMirror, and Socket.IO.
Fixed
The Share button in the Playground provided a relative URL instead
of an absolute URL.
The address autocomplete will now populate the .sublocality
field with sublocality, sublocality_level_1,
sublocality_level_2, whichever is first available.
URL parameters utm_source, utm_medium, utm_campaign,
utm_term, and utm_content will be preserved when analytics is
configured and the /run endpoint is used.
Upgraded Pandoc to version 3.5.11 (system upgrade required).
Different appearance when a document is reduced to a thumbnail
image.
Fixed
When a new Playground is initialized, the name of the YAML file was
missing in the sidebar dropdown and the share link.
When a “flash” message with the Bootstap color “success” was shown
at the top of the screen, the timeout for removing the message
could remove messages that the user had not yet had the opportunity
to read.
In a review screen, error messages about invalid variable names
were not shown in all cases where the variable name was invalid.
Migrated the text editor in the Playground and the Configuration
from CodeMirror 5 to CodeMirror 6. Searching is now accomplished
with Ctrl-f. Dark mode support is improved. The mixed-mode syntax
highlighting of Python code in code blocks is no longer
available. (CodeMirror 6 is a complete rewrite.) Pressing F11 for
full-screen mode and Ctrl-space for autocomplete are still
available.
The GoogleAPI class can now be used with ARM processors.
The “Share” button in the Playground now copies the hyperlink to the
clipboard when you click it.
Fixed
The floating label labels are now visible on comboboxes.
Upgraded Python dependencies. Note that if you are using third-party
Python packages, you may encounter dependency conflicts. Although
these version upgrades did not require any changes to
docassemble core code, it is possible that your interviews will
need to be updated.
Upgraded Font Awesome.
If ask_object_type is used and object_type is also set, the
object_type will be ignored.
When converting PDF to PNG, the resolution will be what it would be
if the long edge of each page was scaled to 11 inches.
The exit link can be set to exit_logout in order to log the user
out in addition to deleting the user’s session.
Fixed
The Jinja2 safe filter can be used to insert content that contains
Jinja2 templating features.
Issue with keyboard navigation where the focus-visible indication
was not appearing on radio buttons and checkboxes.
On machines with a large number of CPU cores but limited memory, so
many celery workers could be spawned that the system’s memory
could be exhausted, unless the Configuration sets a lower number of
celery processes. Now, the number of celery workers spawned by
default will not be greater than the number of gigabytes of total
memory divided by two. This limit can be overridden by setting max
celery processes to a different limit, or by setting celery
processes to a specific number of workers.
The default value of a non-required multiple-choice text field is
now '' instead of 'None'. The default value when the field is
not filled out is based on its datatype, e.g., 0 for datatype:
integer. The default data type is text.
Fixed
The rendering font feature had been inadvertently disabled.
Commas entered into numeric fields were causing the field not to
validate; now any invalid characters are removed.
The standard .gitignore can be customized with the Configuration
directive default gitignore.
When using _use_jinja2=False, the DOCX file is still processed for
images and other global elements.
Fixed
Missing method .age_in_months().
The get_user_info() function returned None if the user was not
logged in, even if anonymous users are given the permission to
access user information.
Text analysis algorithm received insufficient information when the
question is represented as data.
The modtime of entries created or modified by
store_variables_snapshot() was inconsistent because initial
entries used the default PostgreSQL datetime, and entries that were
changed used datetime.datetime.utcnow().
An exception could arise in rare circumstances due to
interview-specific settings being accessed by a function that was
called outside of the context of a particular interview.
The manual feature of attachment, which allows a DAFile to be
attached to an attachment.
The privileges and permissions attributes of the user_info()
function.
The request_url attribute of current_context(). This returns a
dictionary containing the elements of the URL of the currently
executing request. Note that this URL does not always match the URL
that the user sees in the navigation bar in the browser, because
many requests are Ajax requests. The dictionary keys are args,
base_url, full_path, path, scheme, url, url_root.
A __config__ variable is now available when using # use jinja in
interview YAML files so that items in the Configuration are
accessible.
Changed
The validate(), transform(), and default_for() methods of a
CustomDataType are now called with a third positional parameter
that is a dictionary containing the data attributes for the given
field. This change is backwards-compatible, so if your method does
not expect the additional positional parameter, it is not called
with the additional positional parameter.
Fixed
In the Playground, variables representing errors defined by except
statements showed up as undefined variables.
If # use jinja is enabled and there were Jinja2 errors in the
template, the Playground page could not load.
The validate(), transform(), and default_for() methods of a
CustomDataType are now called with an additional positional
parameter that is the name of the variable as a string. This change
is backwards-compatible, so if your method does not expect the
additional positional parameter, it is not called with the
additional positional parameter.
When using a datatype that references a CustomDataType, data
attributes will be added to the <input> element containing the
values of field modifiers minlength, maxlength, min, max,
step, scale, currency symbol, and field metadata, if those
modifiers are present. The field metadata are available as a JSON
string in the field-metadata data attribute.
Fixed
Bug that prevented the Configuration directive initial dict from
functioning.
Added aria-required and moved role="radiogroup" for
accessibility compliance.
The pdftk option under attachment and features for filling in
pdf template file attachments using pdftk instead of pikepdf.
Changed
During the Docker image build process, pandoc will run once, so
that the first user to assemble a document with pandoc will not
experience slowness due to LaTeX needing to generate files.
Appearance streams will be generated when using pdf template file.
Error messages related to problems in the source code will no longer
be displayed to the user unless the user is an administrator or
developer. If you want these error messages to appear to all users,
set debug: True and development site is protected: True in the
Configuration. The error messages will be available in
docassemble.log.
Fixed
Fixed security issue identified by Riyush Ghimire, affecting
versions 1.4.53 to 1.4.96, that could cause contents of files in the
filesystem to be revealed. This is a high severity issue and
upgrading as soon as possible is recommended.
Fixed security issue identified by Riyush Ghimire, affecting
versions up to 1.4.96, that allowed an open redirect URL to be formed.
Fixed security issue identified by Riyush Ghimire, affecting
versions up to 1.4.96, that would allow HTML or JavaScript
injection.
The raw html special field type under fields and review. This
is similar to html but allows modification of the structure of the
HTML in the list as a whole.
The current_context() function, which is the new function to use
in place of user_info() for attributes that are not related to the
logged in user. The object returned by current_context() also has
a new attribute, inside_of, which can be used to detect whether
the Python code that is currently executing is executing inside of a
particular type of document assembly process.
Changed
The user_info() function had previously provided much of the
information that the current_context() function now
provides. However, the name user_info() was not suitable for that
information. A deprecation warning will be logged if code accesses
the attributes of user_info() that do not relate to the logged-in
user. In a future version, accessing these attributes will raise an
exception.
The behavior of the object returned from user_info() is different,
which might be a breaking change if you used user_info() in a
certain way. Previously, user_info() returned an object with
static attributes. Now, the attributes of the object returned by
user_info() are dynamic attributes (using the @property
decorator). If you set u = user_info() and u becomes a variable
in the interview answers, u.id will always return the user id of
the current logged-in user, not necessarily the user who was logged
in when u was defined.
The new function current_context() works the same way. If you set
c = current_context() then c.current_section will be the current
section at the time the attribute was accessed, not the time that
c was defined.
Another difference in the way that user_info() operates is that if
the user is not logged in, the attributes other than first_name
and last_name will exist, but will be None. Previously, those
attributes did not exist, and accessing them would raise an
AttributeError. If you want to test whether the user is logged in,
use user_logged_in().
Fixed
A non-required boolean field value that was not filled out was set
to False instead of None as the documentation specified. The
default value is now None.
The words directive was unable to load translations from
Playground packages.
When min or max is used with a datatype: date or datatype:
datetime, the minimum and/or maximum are now indicated in the HTML
so that browser widgets know what they are.
When the browser uses dark mode, the red asterisk is less bright.
When grid is used, items are aligned to the bottom of the row.
Fixed
Bug in /api/playground_install.
Fixed formatting in grid mode when label is empty.
When browsing other users’ playgrounds, the Download and GitHub
buttons in the Packages folder did not work as intended.
Set a specific maximum number of open file descriptors (1048576) to
avoid problems with ulimit -n being too high on some kernels
(system update required).
The run oauthlib on http Configuration directive. You may need to
set this to True if you use the oauthlib library on a server
that uses http:// instead of https://.
Fixed
If integration with GitHub goes wrong, the user could continue to
see errors after correcting the configuration.
The default rendering font Configuration directive. This allows
you to specify a system-wide font that should be used for rendering
form fields when using an attachment with pdf template file and
editable: False.
Changed
The feature from 1.4.79, described below as “pdftk will render
form fields to text using the msttcorefonts version of Arial,
which has better support for Unicode characters,” has been removed
because with this font, pdftk rendered text too small when the
font size in the field was “Auto.” To reenable this feature, specify
a default rendering font in your Configuration, or specify a
rendering font with each attachment.
Fixed
Error when non-str values are used as datatype: checkboxes
values.
The css class of a question persisted after the Continue button
was pressed.
Users whose accounts are made inactive will be immediately logged
out.
When a relative file reference is given to bootstrap theme in
features, the reference will be resolved using the package in
which the immediate YAML file is located, rather than the package of
the main interview file.
The docassemble.webapp package now depends on certbot,
certbot-apache, certbot-nginx, and acme, even though it does
not use these packages. This is because upgrades to
docassemble.webapp may upgrade dependencies of certbot and cause
certbot to fail.
Fixed
The web server that responds while docassemble is starting up no
longer returns 404 errors (system upgrade required).
Incorrect input validation of email field when editing profile of a
user who uses the phone-based login method.
Added error message if more than one of show if, hide if,
disable if, or enable if is used on the same field. The only
situation in which these can be combined on a single field is if one
is using the code form and the other is not.
Fixed
Inefficient JavaScript for handling nested show if field
modifiers.
The input validation error message for entering a non-number did not
appear if the validation failed on the regular expression pattern.
The file css class field modifier for datatype: file and
datatype: files fields. This can be set to None to disable the
Bootstrap File Input plugin for the file upload input element.
Fixed
Errors with the Apache web server option (system upgrade required).
Error with js show if when used in conjunction with grid.
The gotenberg url Configuration directive, which allows for the
use of an external Gotenberg server for DOCX to PDF
conversion.
The Docker environment variable SUPERVISORLOGLEVEL, which can be
set to debug so that application log messages can be viewed with
docker logs (system upgrade required).
Changed
Additional fonts are installed in the operating system to support
a greater variety of languages (system upgrade required).
Upgraded pdftk and Pandoc (system upgrade required).
Disabled autocomplete on login and register pages.
The DAFileList is now initialized with the complete_attribute
set to initialized and the object_type of DAFile.
Fixed
Issue with JSON representation of the question when fields were
generated by code.
When using Keycloak, logging out resulted in an error message due to
a change in the Keycloak code.
The pseudo-fields favorite_fruit[nota] and favorite_fruit[aota]
referring to the “None of the above” and “All of the above”
checkboxes in a datatype: checkboxes field can now be used in a
boolean show if.
The val(), getField(), and setField() JavaScript functions can
references pseudo-fields favorite_fruit[nota] and
favorite_fruit[aota] to refer to the “None of the above” and “All
of the above” checkboxes in a datatype: checkboxes field.
When installing a package with a GitHub URL, the
#egg=mypackagename feature of GitHub URLs is now respected, and
the name of the package will be extracted from #egg instead of
from the GitHub repository name.
Grouped the initialize, postgres, and redis Supervisor
processes into a group called main so that they shut down
simultaneously rather than sequentially.
Fixed
The js show if feature did not work correctly when an expression
reference two different fields.
The auto terms and terms features interfered with each other
when the same term was referenced in each.
Bug in locale-setting code.
The system for forcing the admin user to change their password when
the password is password introduced unnecessary delay on page
loads.
The “Please wait while docassemble starts . . .” page would refresh
into an error rather than refresh into the default interview under
some conditions.
The val() JavaScript function erroneously returned encoded values
for datatype: object and datatype: object_radio fields. The
function has been modified so that it returns the instanceName of
the selected object.
The combobox HTML did not set an aria-label.
Markdown-to-HTML conversion in popover help text was not
full-featured.
The ldap login feature now supports TLS and anonymous binding.
Fixed
Error with exporting tables to Excel, caused by the upgrade of the
Pandas dependency.
The way that locale-related functions actually worked did not match
the way they were documented; they have been fixed so that they
match the way they are documented. The update_locale() function is
also now imported by default.
Bug with handling of non-required object fields that are not
answered.
Upgraded dependencies. Packages that might require code changes
include selenium (now at version 4) and matplotlib (see the
“Generating a graph and inserting it into a document” recipe). Due
to incompatibilities with the latest version of markdown, the
mdx_smartypants extension is no longer being used. Instead the
standard smarty extension is used. There are some differences
between the two extensions, such as the transformation of ellipses.
Fixed
Adapted code so no error will be raised if docassemble tries to
create a directory where one already exists. A race condition of
some sort seemed to be causing such errors for some users.
If a NameError exception arises out of code in a module file,
docassemble will raise an exception instead of treating the
exception as a reference to an undefined variable.
Fixed
Issue with using default admin account to set a default API key if
an external Redis server is not being used (requires system
upgrade).
The optional keyword argument evaluate of force_ask().
Changed
The CSS of signature screens was changed so that the compact mode
only takes effect if the screen is small and has a landscape
orientation.
Fixed
The value() function (which is used by reconsider() and the
reconsider modifier) did not raise the correct undefined variable
exceptions when the variable name included variable aliases. The
code was fixed so that the exceptions raised correspond with the
exceptions that would be raised if the expression was evaluated by
Python. It is possible that interview logic in existing interviews
may rely upon the quirks of the previous version of the code, so it
is important (as it always is) to test interviews before deploying
this version in production.
The JSON representation of a question did not show fields that
were generated by code.
Error with the rtf to docx file type.
The instanceName of a DAFileCollection object generated by an
attachment or attachments block was set to the literal variable
name without interpolation of variables.
The administrative interviews Configuration directive now accepts
items that add custom URLs to the menu.
force_ask() or reconsider() will now attempt to act on the
intrinsic name of the referenced variable rather than the literal
string passed to the function.
The functions format_date(), format_datetime(), format_time(),
month_of(), year_of(), day_of(), dow_of(), qr_code() are
now available as Jinja2 filters.
The JavaScript functions var(), getField(), setField(), and
getFields() were modified to work better with multiple choice
fields. getField() now returns the <fieldset> parent element
rather than the first input element. val() will return an array of
answers for a checkbox or multiselect. Object-based fields use
instance names as values.
Fixed
Items under administrative interviews will now appear for users
who are not logged in if the permissions allow anonymous users to
see the item.
When a datatype: checkboxes field has required: False, the “None
of the above” selection does not need to be selected.
Names for keys in the dictionary returned by
all_variables(special='title') now correspond with the names used
to set the values (with backward compatibility).
Preserve capitalization when conjugating verbs.
Upgrade reportlab, docxtpl, and pikepdf dependencies.
Fixed
Issue with file inputs not enabling and disabling.
Bug that caused wrong exception to be raised if DOCX to PDF
conversion failed.
Replaced description-file with description_file in setup.cfg.
Error with /restart_session endpoint when user not logged in.
The check in feature now sends two additional action arguments,
_changed and _initial. These arguments are not reported by
action_arguments() but can be retrieved with action_argument().
The defined(), value(), and showifdef() functions now accept a
keyword argument prior which can be set to True in order to
correctly handle situations where the user has just clicked the Back
button and it is necessary to know the value that a variable had
prior to the user pressing the Back button. If prior is True,
the set of interview answers that was just discarded will be
accessed first, and then the current interview answers will be
accessed. In situations where the user has not just pressed the Back
button, setting prior to True has no effect.
The countries_list() and states_list() functions now return
alphabetically sorted results. states_list() returns an empty
dictionary when the country_code is invalid.
When the second argument of background_response() is 'fields',
and the first argument is a dictionary of variable names and values,
the value of a dropdown field can be set to a dictionary with keys
value and choices. The choices will replace the options in the
dropdown for that field.
Fixed
Upgraded pikepdf and fixed issue with way it is called.
Added support for using min and max with datatype: time and
datatype: datetime.
The data and data from code blocks can be used with an objects:
objects modifier, which will cause the data structure to be
interpreted in the manner of objects_from_file(). A gathered
modifier is also supported.
continue button field can now be used with buttons where one of
the items under buttons is continue.
The Configuration directive mail now accepts a list of
configurations, and send_mail() now accepts a config keyword
parameter.
Fixed
Removed code that transformed \\_ into __ in Markdown.
Ensured that dropdown options are free of HTML.
Default values of object-based fields did not appear in all
circumstances.
The editable: False option for pdf template file now shows
better formatting of fields.
The all of the above and check others modifiers for checkbox
fields.
The celery modules Configuration directive.
Recipe for calling background tasks from Flask endpoints.
Changed
When setting up two factor authentication with the authenticator
app, a code is shown in addition to a QR code.
The way that objects from file works has changed; it is no longer
treated as a mandatory block, but instead acts like an objects
block that is called upon when a variable is needed.
The screen parts continue button color, resume button color,
help button color, and back button color.
The question modifiers continue button color and resume button
color.
Additional options labelauty and labelauty nota under the
button colors Configuration directive.
Changed
Items in multiple choice lists, when expressed as a dictionary, can
now include keys css class and color. The HTML element for the
item will have the css class as a CSS class. The color is
expected to be a Bootstrap color name. This will change the
background color of the HTML element, unless the element is an
<option> element. The css class and color keys have no effect
on combobox items.
Buttons in action buttons can be modified with a css class.
The include_internal option of store_variables_snapshot(),
variables_as_json(), and all_variables() now controls whether
the nav variable is included in the output.
The authorized registration domains Configuration directive now
applies to social login methods as well as username/password login.
Increased accessibility of the datatype: combobox interface.
The voice keyword parameter of the set_language() function.
The auto login Configuration directive.
The output_to keyword parameter of the .convert_to() method of DAFile.
The output_to keyword parameter of the .export() method of
DALazyTableTemplate.
The output_to keyword parameter of pdf_concatenate(),
docx_concatenate(), zip_file(), overlay_pdf().
The extract_pages() method of DAFile.
Changed
If an attempt is made to access the contents of a DAFile that is
not yet initialized, the .initialized attribute will be
sought. The .initialize() method sets .initialized to
True. Thus, if you have a code block that calls .initialize()
on a DAFile called myfile, you can attach sets:
myfile.initialized to the code block and it will be called upon
if the interview logic requires the contents of myfile.
When an attachment that has a name creates a DAFileCollection
object, the DAFile attributes will have their alt_text set to
the name followed by the file type in parentheses.
Fixed
Adjusted the Dockerfile so that the server can start up even if
the internet is not available.
The floating labels feature and the floating label field
modifier.
The root owned Configuration directive.
Support in the Kubernetes implementation for using a read-only file
system where all Configuration changes and package updates take
place using Docker images and the only directories on the server
that are writable are directories for storing runtime information
(e.g. PID files) or log files.
The ip address ban enabled Configuration directive.
The old_password parameter for set_user_info() and the API
endpoints for changing user information, so that the user’s
encrypted data can be migrated.
The transform_json_variables() function.
Support for server-side encryption when using S3.
Changed
In the Docker container, the operating system is upgraded to Ubuntu
22.04 LTS and Python is upgraded to 3.10.
aloe is no longer a required package. It has a dependency, nose,
that is not compatible with Python 3.10. Instead, behave is now a
required package.
Switched to the Azure CLI for managing files in Azure Blob Storage
from shell scripts.
A restart (e.g., saving the Configuration, installing a package)
will erase any IP address bans caused by failed login attempts.
The API endpoints for changing information about existing users now
work with PATCH as well as POST.
Fixed
Links in dropdown navigation menu for mobile devices were not
clickable.
The session parameter of /api/resume_url was not working (it was
expecting session_id.
Optimized interview_list for cases where action='delete_all' and
query are used together.
Unnecessary transmittal of background task result to web browser
when the refresh option of background_action() is used.
Migration of encrypted DAStore objects when password is changed.
The set_parts() function did not support all of the screen parts.
Example interviews relating to inserting graphs and cards.
Changed
Changed the name of the explanation() function to
logic_explanation(). NOTE THAT THIS IS A BREAKING CHANGE. However,
you are most likely not using the explanation() function, so this
probably will not matter.
Fixed
Cleared spurious syslog-ng error message.
Error getting the data format of a question when debug is false.
The allow log viewing (DAALLOWLOGVIEWING) Configuration
directive.
The forget_prior keyword parameter for force_ask() and
force_gather().
The _forget_prior keyword parameter for url_action() and
interview_url_action().
The forgetPrior parameter for the JavaScript functions
url_action(), action_call(), and action_perform().
The logoutpage Configuration directive.
The allow changing password directive.
Changed
Upgraded to Bootstrap 5.2.
The interview_url() and url_of('interview') functions now accept
unqualified i parameters, which will be interpreted as references
to interview files in the current package.
Fixed
The HTML version of the error notification e-mail lacked some of the
information in the plain text version.
The next parameter of url_of() was not functional for leave,
logout, exit, and exit_logout.
The pip index url (PIPINDEXURL) and pip extra index urls
(PIPEXTRAINDEXURLS) Configuration directives.
The allow configuration editing (DAALLOWCONFIGURATIONEDITING)
Configuration directive.
Docker environment variables DADEBUG (corresponding to debug)
and DAENABLEPLAYGROUND (corresponding to enable playground).
The insertion_order option for .true_values() and
.false_values().
Changed
API keys can now be passed in a header using the format
Authorization: Bearer H3PLMKJKIVATLDPWHJH3AGWEJPFU5GRT.
Removed pathlib as a dependency.
If allow updates is set to false, the /api/package endpoint
cannot be used to install or uninstall packages.
If enable playground is set to false, the Playground-related APIs
are disabled.
Fixed
When a yesnoradio or yesnomaybe field is not required and is
not answered, the variable will now be set to None instead of
False. THIS MAY BE A BREAKING CHANGE FOR YOU if you relied on
variables being set to False when the user did not provide a value
for a yesnoradio or yesnomaybe field. The documentation for
required has always stated that the variable will be set to None
if the user does not provide a value, so this change brings the code
into line with the documentation.
Error when target_number is not an int and an .add_action() is
triggered.
docassemble.base.legal did not import all of
docassemble.base.util’s names.
set and follow up were not recognized in all valid review
block syntax forms.
The to parameter of send_email() and send_sms() did not
process a DAList the same way as a list.
Under some circumstances, the navigation bar showed already-visited
sections as not visited.
error actions resulted in unnecessary contention for access to the
interview answers.
The option for using Google Cloud Vision when using ocr_file() and
ocr_file_in_background().
Changed
When new template markdown behavior: True is set in the
Configuration (which is now part of the default initial
configuration), template variables do not have the markdown
filter automatically applied when they are used in a DOCX template
file. It is recommended that you add this to your Configuration,
and then modify your docx template file templates that use
template variables, adding ` | markdown` if necessary.
Fixed
Improved efficiency of system shutdown. (Requires a system upgrade.)
Problem with Let’s Encrypt certificates not renewing. (Requires a
system upgrade.)
The single_worker.log file was missing from log rotation.
Erroneous exceptions could be raised if a DAObject attribute name
began with _. Attributes can begin with _ but they cannot begin
with __.
The DBSSLMODE, DBSSLCERT, DBSSLKEY, and DBSSLROOTCERT
variables were not affected by ENVIRONMENT_TAKES_PRECEDENCE.
In the Playground, pressing buttons is disabled during Ajax
requests.
The Playground “Pull” process now uses SSH to clone repositories
when GitHub integration is enabled, unless a personal access token
is embedded in the URL.
Fixed
CSS error resulting in certain validation errors being invisible on
administrative pages.
The /api/playground_pull endpoint for pulling a package into a
Playground.
The /api/config PATCH endpoint for updating specific Configuration
directives.
The /api/restart endpoint for triggering a server restart.
The /api/restart_status endpoint for monitoring the status of a
server restart.
Changed
The /api/config API endpoint now returns status code 200 on
success, not 204. The response contains a code that can be passed to
/api/restart_status to check on the status of the restart.
The /api/playground POST and DELETE endpoints will now return
status code 200 instead of 204 if the server needs to restart. The
response contains a code that can be passed to /api/restart_status
to check on the status of the restart.
Fixed
NGINX configuration syntax.
Better error message if Celery is used inside of Celery.
Gave the single Celery process a unique name.
Adjust for situation where Ajax request fails without a response.
Fixed JavaScript errors in some Playground pages.
Fixed issue where GitHub SSH only worked during a Playground pull if
there was an active package.
Miscellaneous undefined variables in rarely-run code.
Upgraded pip from 20.1.1 to 21.1. Previously, pip had been
deliberately downgraded because the new resolver caused pip to
hang. Hopefully that issue does not appear again.
The docassemble-os Docker repository, which is a dependency of
this Docker repository, is now based on Ubuntu 21.10 rather than
Debian testing.
Fixed
Bug related to deleting Playground “projects” when S3 or Azure blob
storage is enabled.
Improved method for detecting variable names in Jinja2 files.
Increased threshold for detecting whether a server has become
unresponsive during the restart process.
Upgraded from Bootstrap 4 to Bootstrap 5. This changes the HTML and
CSS significantly, so you may need to adjust your customizations and
testing scripts. Bootstrap 5 is not necessarily more “attractive”
than Bootstrap 4, but it has better accessibility.
The Source tab is now represented by a “code” icon.
The administrative UI was adjusted for consistency.
The button colors Configuration directive for customizing the
Bootstrap colors of buttons.
The label above field modifer that puts the label above the field
for a specific field, which is preferable to using no label in
combination with a note.
The login link style Configuration directive for enabling
separate “Sign up” and “Sign in” buttons in the upper right corner
instead of “Sign in or sign up to save answers.”
Changed
Changed the default color of review screen edit buttons and the
“add another” button from Bootstrap success (green) to secondary
(grey).
Added the Font Awesome pencil icon to review screen edit buttons.
Substituted a different Font Awesome icon for the selected radio
button option so that it is not the same as the icon for a selected
checkbox option.
Changed the left arrow icon in the “back to question” button so that
it matches the left arrow icon of “Back.”
Added a light grey background color behind review screen button
items to help differentiate the sections of a review screen.
When question help button is used, the question-related help now
appears below the buttons, and the navigation bar help only
displays the interview help (if present).
The skip undefined option now works with docx template file.
Fixed
Inactive sections in the sections sidebar are no longer <a>
elements that screen readers may describe as clickable.
Additional bracket expressions now valid with Jinja2 markdown
filter.
The blockquote Markdown format now indented on right and
single-spaced when used the the Jinja2 markdown filter.
Filename security in the Playground now allows reading existing
Playground files with names that contain spaces, although the
filename will be changed.
Added a check during startup to see if PostgreSQL primary key
sequences have been reset and if so set their values to the maximum
value id in the table.
Fixed
Error getting JSON version of question involving list collect.
The on_success and on_failure parameters of DAWeb methods can
be set to content, text, or status_code in order to return the
undecoded response, decoded response, or status code of the HTTP
request.
Fixed
The pdf_concatenate() function will no longer try to guess an
appropriate instanceName for the returned DAFile object.
The backup file storage Configuration directive (requires system
upgrade).
Changed
When using docx template file in combination with fields or
field code, the interview answers will be used for any variables
not defined in the fields or field code.
Fixed
Issue with exceptions being triggered because keycloak OAuth
information not defined in the Configuration.
Non-string values in field code raised exceptions.
When specifying multiple choices using code containing dictionary
items, you can use the keys label and value in a dictionary to
represent the label that appears on the screen and the value to
which the variable should be set.
Widths in percentage format (e.g., 50%) are now valid when
inserting images into PDF files assembled from Markdown.
Upgraded various dependencies, including docxtpl,
the new version of which allows images to be inserted into headers
and footers of DOCX files.
DO NOT ATTEMPT TO INSTALL 1.2.68 WITHOUT DOWNGRADING PIP FIRST. The
latest versions of pip will stall indefinitely or use up all of
the memory in your system because of the way that pip’s new
dependency resolution system works. To downgrade pip, go to
Package Management, enter pip==20.1.1 into the “Package on PyPI”
field, then click “Update.” Only then should you attempt to click
“Upgrade” to upgrade docassemble to 1.2.68.
Fixed
Issue with interview_url() and related functions when style is
used.
Possible fix to issue with /interviews page and interview_list()
(this turned out to have been caused by a third-party package that
some people were using).
A very serious security vulnerability was patched. Everyone should
upgrade to this version AS SOON AS POSSIBLE (upgrade to 1.2.66,
actually). Upgrade by going to Package Management and clicking
Upgrade. If you are on the 1.1.x series, you can upgrade to 1.1.113
with the Upgrade button or by entering docassemble.webapp==1.1.113
into the PyPI field. If you are using the stable branch, you can
upgrade to 1.0.15.
Added validation error on the edit user profile page when changing
e-mail address to an address that is a case-insensitive match to an
e-mail address that already exists.
The authorize() method of DAOAuth, which adds OAuth2
authorization headers to a DAWeb object.
Changed
The .geolocate() method has been renamed to .geocode() and other
associated attributes have also been renamed. Backwards
compatibility will be maintained until the next minor version
update.
Fixed
The attachment code specifier now accepts DAList objects.
Interference between help and operation of show if.
The optional second positional parameter of noun_plural() and
noun_singular() can now be a list, dictionary, set, or tuple, in
which case the length is used.
Elements with aria-hidden="true" or CSS class sr-exclude will
be ignored by the VoiceRSS screen reader.
force_ask(), force_gather(), undefine(), forget_result_of(),
and reconsider() now accept generators as positional parameters.
When given Person objects, send_email() will include names in
To, Cc, and Bcc if the names are defined.
Fixed
A fields question with no variable-setting fields or a continue
button field did not get marked as answered.
Expanded the information available in the data view of a question.
Unicode passed in URL arguments is no longer escaped.
Fixed
The next parameter now contains the session ID upon attempting to
access a session in an interview with require login.
depends on and on change now can be used with generic object
and/or index variables even when the fields being changed do not
literally match the variable name specified in depends on or on
change.
Problem with show if when there are two fields with the same name
visible on the screen at the same time.
The user can request developer account Configuration directive.
Fixed
User information that non-privileged users are not allowed to edit
in Profile but that was set with code was overwritten when user
edited their user profile.
The setup.py file created by the Playground now sets the minimum
version of dependencies to the latest version on PyPI that is not
more recent than the version installed on the server.
Upgraded Python to version 3.8 and upgraded dependencies. These
changes require a system upgrade. See
https://docassemble.org/docs/docker.html#upgrading for instructions
on how to perform a system upgrade. Because Python changed between
version 3.6 and and 3.8, you should test your code carefully to make
sure it still works in Python 3.8.
Among other upgrades, Bootstrap has been upgraded to version 4.5.3.
If you are using Bootstrap themes, you may wish to upgrade your
Bootstrap theme.
Recent installations (since June 25, 2020, possibly) contained a
Debian security update that disabled ImageMagick’s ability to inject
signature images onto PDFs. Running docker stop and docker
start is required to enable the PDF signature image feature.
The small screen navigation option under features.
The email template, email subject, email body, and email
address default options for customizing the functionality of the
attachment/attachment code interface.
Changed
The horizontal section interface is no longer hidden on small
screens.
The vertical section interface becomes the horizontal section
interface on small screens.
The default body of the e-mail that the user can send from an
attachment/attachment code interface is now translated using the
phrases Your document, %s, is attached. and Your documents, %s, are
attached..
The /start/ path for starting an interview now transforms into
/run instead of /interview. It also has a second form for
referring to the package name and filename (without using
dispatch).
Fixed
The Playground “Share” link did not update correctly based on the
interview being run.
The interview_list() function, when called without an action,
now uses pagination and returns a tuple instead of a list. Note
that this change is not backwards-compatible, so you will need to
change any code that you have that calls interview_list().
The get_user_list() function now uses pagination and returns a
tuple instead of a list. Note that this change is not
backwards-compatible, so you will need to change any code that you
have that calls interview_list().
The /api/interviews, /api/user/interviews,
/api/user/<user_id>/interviews, and /api/user_list GET endpoints
of the API now use pagination and return a dictionary, not a list.
Note that this change is not backwards-compatible, so you will need
to change any code that you have that uses these APIs.
Removed the PY2, string_types, and text_type names from
docassemble.base.util. Note that if you have used any of these,
this change may break your code.
Added
The persistent optional keyword parameter for
mark_task_as_performed() and related functions.
The task_persistent optional keyword parameter for send_email(),
send_sms(), and the DAWeb methods.
Fixed
Issue with encryption in functions launched during the loading of
the first page of an interview session.
Issue with multi-server configurations and the order in which
container software is updated that can result in some containers
unable to start.
The complete_elements() method now returns a DAList. Note that
this may break existing code that uses complete_elements(). To
get a plain list of the complete elements, use
complete_elements().elements.
The .all_false() and related DADict methods reflect Python
notions of true and false values rather than literal equivalence of
the values to True or False.
Sessions that were created using the API will now appear immediately
in My Interviews.
The if_started keyword parameter for the number_gathered()
method.
Changed
If ask_number on a DAList or DADict is True and
target_number is defined, removing an item using the table editing
interface will decrease target_number by one.
A question with fields that contains a single multiple choice
field where the choices are empty is not skipped if the question
has a continue button field.
The branch and commit are shown in the Packages page of the
Playground when GitHub integration is enabled and the package has a
known presence on GitHub.
Upgraded Font Awesome to 5.13.0.
Fixed
Infinite loop when a list is gathered and object_type is set to a
class for which the textual representation or complete_element is
pre-defined and a set number of items are to be gathered.
The GitHub button on the Playground Packages page will now respect
the GitHub repository that was pulled and will make an initial
commit when the repository exists on GitHub but is empty.
Ability to download files by specifying a filename parameter to
GET requests to /api/playground.
The use_word keyword argument to ordinal().
The always include editable files specifier for omitting the
checkbox in the attachment UI.
The nginx ssl protocols Configuration directive.
Changed
If use https or behind https load balancer are enabled, a
Strict-Transport-Security header is returned.
If allow embedding is not set to True, the X-Frame-Options and
Content-Security-Policy will block iframes. If allow embedding
is set to True and cross site domains is set, the list of
domains will be used for the Content-Security-Policy header.
More than one address autocomplete can now be used on a screen.
Fixed
Disconnecting from GitHub integration failed if the existing
integration no longer functioned.
The show_country keyword parameter for the .on_one_line() and
.block() methods of the Address class.
The international keyword parameter for the .block() method of
the Address class.
The assemble_docx() function.
Changed
Switched to a different versioning system. The stable branch on
GitHub will be version 1.0. Patch versions within version 1.0
(1.0.1, 1.0.2, etc.) will be for bug fixes and security upgrades
only. The master branch on GitHub will be version 1.1. Patch
versions within version 1.1 will include bug fixes as well as
feature enhancements.
The omit_default_country parameter of the .on_one_line() method
of the Address class is deprecated.
Fixed
Bug with restrict input variables and attachment e-mailing and
downloading.
pip show inefficiency unnecessarily slowed down initial start up
time.
If the database is PostgreSQL, the Alembic table alteration
introduced in 0.5.97 for MySQL compatibility purposes is no longer
applied by default because it might take too much time on a server
with a large SQL database. The discrepancy between the SQLAlchemy
column type specification (varchar) and the actual PostgreSQL column
types (text) is harmless. If your SQL database is not large, you
can set force text to varchar upgrade: True in your Configuration
before upgrading to force the column type alteration to take place
during the upgrade. After upgrading to 0.5.105+, you can remove
force text to varchar upgrade from the Configuration. This is
only applicable if upgrading from 0.5.96 or before; if you already
upgraded to 0.5.97 - 0.5.104, then the alteration has already taken
place.
The response_code option for response() and json_response().
The sendgrid api key Configuration directive for sending e-mail
using the SendGrid API.
Changed
A question with a Continue button that sets a variable to True,
or a review screen with a Continue button instead of a Resume
button, can be indicated with continue button field instead of
field.
Modules included in YAML files with relative references were loading
from the main YAML file’s package, not in the package of the YAML
file containing the modules or imports block.
The external keyword parameter for the .url_for() method.
Changed
Access to files is now granted to users across sessions, whether the
session was active in the browser’s session or not. Previously,
access was restricted based on sessions that had been active in the
browser’s session.
The .url_for() method when used with temporary=True now implies
external=True, which means that the URL returned includes the
protocol and hostname. Use external=False to preserve the old
behavior.
A superscripted question mark icon is now shown in the green text
when help is added to a field.
When committing to GitHub from the Playground Packages screen, you
can choose to also publish on PyPI and install the package on the
server.
When publishing to PyPI from the Playground Packages screen, you can
choose to also install the package on the server.
The url_action_perform() and url_action_call() JavaScript
functions are renamed to action_perform() and action_call().
Aliases are in place for backwards-compatibility.
Widths of images inserted into DOCX files now support centimeters
and twips as units.
The continue button field can now be used with other types of
questions that set variables, rather than just fields.
Fixed
Unpickling errors in user_interviews() not trapped.
The __version__ variable is now defined in packages generated from
the Playground packages folder.
UTM parameters are retained if an analytics id is defined under
google in the Configuration, or a segment id directive is
defined in the Configuration.
The Playground packages folder GitHub commit process now uses git
merge to merge changes, which means it might fail if a commit would
overwrite changes.
The Playground packages folder now allows for committing to a new
remote branch.
Fixed
Incorrect behavior during initial visit to /interview when
interview uses unique sessions.
Interview advanced a step despite validation code raising an
exception.
The behavior of the label option of list collect no longer
prints text before 1., 2., etc. Now the label supplies the
whole label for the item, and it can include the number by way of
the index variable.
Fixed
The list collect feature raised an exception when the field
definition included Mako substitution.
Non-required upload fields were creating zero-byte files on some
servers.
The administrative interviews Configuration directive
The sessions are unique, required privileges for listing, and
hidden specifiers under metadata.
Changed
The words system no longer uses code names like pdf_message and
save_as_multiple.
The required privileges specifier under metadata now prevents
users without a valid privilege from starting the interview. The
required privileges for listing now controls whether the interview
is listed under /list.
Fixed
Passing an asterisk in a list to Flask-CORS resulted in a regular
expression error.
Not all Flask packages accept integers as the
PERMANENT_SESSION_LIFETIME.
Options in the user profile for controlling which repositories will
be considered when the Playground packages folder looks for and
commits to GitHub repositories.
Configuration directives session lifetime seconds, babel dates
map, admin can delete account, user can delete account, and
delete account deletes shared.
Changed
In tables, ordered dictionaries will use their built-in order.
Base64 padding removed from field names.
Fixed
Poppler upgrade interfered with width of images in popups.
Changes manually made to /etc/apache2/sites-available files while
the container is running will now be backed up upon shutdown and
restored upon startup.
Fixed
Fatal error when invalid global javascript file referenced in
Configuration.
The get_pdf_fields() method of DAFile and other file objects.
The playground examples directive in the Configuration.
The new markdown to docx directive in the Configuration.
Changed
Style of chat messages updated; content of message from the monitor
is now contained in the notification received by the end user while
looking at a question.
Fixed
Python 3.5 error in utility function for Azure Blob Storage.
The allow non-idempotent questions specifier in metadata was
removed and replaced with a Configuration directive.
The allow non-idempotent questions Configuration directive is set
to False by default in the default Configuration. This will
affect new servers but not existing servers.
The API validation Referer constraint checks against the Origin if
there is no Referer.
Additional information added to data representation of question.
HTML more standards-compliant for accessibility.
Fixed
Package update process was not detecting missing packages.
The watchdog’s process terminations were causing unnecessary
internal server errors under high system load, mistaking a busy
Apache process for an out-of-control Apache process. The threshold
has been adjusted. The change will only take effect after a docker
stop and docker start. Alternatively, docker exec into the
container and run supervisorctl restart watchdog.
The exclude_privileges keyword parameter of the
last_access_time() function and related functions.
Changed
The /api/user_list API method and the get_user_list() function
now return a user’s privileges under a dictionary key called
privileges. Previously the key roles was used.
Fixed
The update() and has_key() methods of DADict did not work.
Multiple templates on a screen using iterators did not work
correctly.
Browser back button sometimes required two clicks to go back one
step.
Unhelpful error when uploading invalid file type to Wizard.
Using table with a DADict now sets row_index to the key and
row_item to the value, and DADicts can be edited using tables.
No delete buttons on a table when deletion would cause the number
of items to fall below minimum_number.
The edit option on a table can now use reference indices as well
as attributes.
The default message for the add_action() method on a group is
“Add an item” if the group is empty.
Clicking on a navigable section header empties the action queue,
ensuring that clicking “Resume” puts the user back in the interview,
rather than the screen they saw before they clicked the header.
Added
The delete buttons option when using edit on a table.
The only_if_empty option on the reset_gathered() method.
The slice method of the DADict class.
The re_gather attribute of groups to basic-questions.yml.
The follow up option in a review block fields.
The reconsider() function.
The preloaded modules configuration directive.
The action_button_html() function.
Fixed
URL for restarting interview session conflicted with another URL
when user logged in.
tables could not appear inside of review blocks because they
were always undefined.
Navigable section headers not styled correctly.
One of two processes simultaneously loading the playground modules at
same time could encounter an empty directory.
Screen loads through url_action_perform() did not show the
spinner.
Some thread variables were not reset between requests.
The OCR background function did not work, so rolled back celery and
kombu to 4.1.0.
When a variable is force-asked or the goal of an action and a
question is not found, no error will be raised. This facilitates
the use of optional follow-up questions in a review block.
Upgraded OS from Debian stretch from Debian jessie. Upgraded pandoc
to version 2.3. LibreOffice upgraded to version in
stretch-backports. A system upgrade is required to realize these
changes.
Setting a minlength on a datatype: checkboxes field turns off the
“None of the above” item.
The .copy_into() method of DAFile now accepts DAFile,
DAStaticFile, DAFileList, and DAFileCollection objects as
the argument, as well as the direct file path of the other file.
Fixed
Problem with converting to PDF after update references for some
tables of contents.
The .copy_into() and .from_url() methods now update PDF and
image information after the file contents change.
The redact() function and redact option on attachments.
Changed
The template and table blocks now become DALazyTemplate
objects rather than DATemplate objects. Their contents are
evaluated at the time they are reduced to text, not at the time they
are created.
Fixed
Problem with currency() and other functions when used from a docx
template file where undefined variables did not raise exceptions.
The create_new_interview() function caused unnecessary 4 second delay.
Users with user privileges could not access API key management.
The interview_url() function was returning a URL based on how the
current request was made, rather than the actual URL for getting to
an interview.
Interviews are now served from /interview rather than /. This
change is backward-compatible.
Error notification e-mails will no longer include the interview
variables as a JSON file unless error notification variables is
set to true in the Configuration.
Non-mandatory blocks no longer get tracked in the internal
dictionary as having been answered.
Added
The root redirect url Configuration directive.
The include_internal parameter of all_variables().
Warning if mandatory is used on a block that does not support the
mandatory modifier.
The undefine, recompute, and set options inside of a review
block.
Changed
To indicate that a multiple-choice under fields should use radio
buttons, a pulldown, or a combobox, use input type instead of
datatype. The datatype can then be set to something else, like
number. This change is backwards compatible.
Removed sublocality from normalized addresses.
Fixed
The show if JavaScript comparison is now more lenient when the
values look like numbers.
The delete_all function did not delete all interviews.
The defined function did not work well with lists and dictionaries
in the process of being gathered.
Social logins now populate first and last name in the user profile.
The all_variables() function now has an optional keyword argument
special that returns information about an interview that is not
stored in the variables.
Added
Support for long_description in setup.py files.
Fixed
Update button in /updatepackage reverted package to master
branch.
The include_docx_template() function accepts keyword parameters.
This has the effect of including Jinja2 set commands at the
beginning of the included sub-document.
The ldap login configuration directive. Using this feature will
require a system upgrade (running a new instance), as the
libsasl2-devlibldap2-dev Debian packages are required
dependencies of the python-ldap Python module.
The last_access_time() now returns the last access time as a
datetime object with a time zone; previously the object was “naive”
with respect to time zone.
Fixed
Problem with branch name of new GitHub repository.
Problem with as_datetime() converting times to midnight when the
argument is already a datetime object.
Configuration directive allow demo for allowing demonstration
interviews in production mode.
Ability to send e-mail using the Mailgun API instead of SMTP.
The decimal places option for automatically formatting floating
point numbers passed to DOCX and PDF forms using field code,
code, or field variables.
Changed
If the checkin interval configuration directive is set to 0, the
browser will not “check in” at all.
When the /api/session/question API encounters an undefined
variable for which a definition is not available, it will no longer
return an error code, but will return a success code and indicate
what variable was not defined.
Fixed
Invalid HTML in navigation bar.
Removed unnecessary invalidation of interview cache.
Problem with address autocomplete when variable name contains a bracket.
The all_variables() and variables_as_json() functions now
contain a limitation on nesting depth. The limit is hard-coded at
6 levels, after which values will be “null.” This is to prevent
exceptions being triggered by circular references.
Setting Google Drive Synchronization folder to “Do not link” will
now erase the connection between the OAuth app and the user.
When populating PDF checkboxes, passing None to the checkbox or to
the yesno() or noyes() functions will result in the box not
being checked.
Apache web server variables are now reset after a restart (e.g.,
after the Configuration is changed.
When pulling the contents of a docassemble extension package
into the Playground, it will now remember the GitHub URL or PyPI
package name so that when you go to Pull again, you will not need to
retype. This works even if you have not enabled GitHub integration.
Fixed
PDF checkbox inconsistencies.
Git pull into Playground packages without integration generated an
error message.
When datatype is object and variable existed, it would try to reduce
the object to text in order to see if it should be highlighted as a
pre-selected default value.
Option for changing the UID and GID of www-data within the Docker
container, so that /usr/share/docassemble/files can be mounted as
a Docker volume and the Playground files can be edited.
Changed
Multiple choice questions in fields will set boolean True or
False if those are the only options.
Additional headers are set to enable cross-site resource sharing
if the CROSSSITEDOMAIN variable is set.
Apache configuration files in Docker are configured differently;
existing site configuration files will not be overwritten and
configuration options are now implemented as Apache variables.
DAList objects now work with the + operator; a regular list can
be added to a DAList but not the other way around.
Fixed
The uncheck others feature triggered an error if it was not the
last field.
The Individual class no longer initializes the child, income,
asset, and expense attributes, but there are objects blocks in
basic-questions.yml that will initialize these attributes.
The Organization class no longer initializes the office
attribute, unless offices is provided as a keyword parameter
during object construction.
Added
Interview tags system and the session_tags() function.
The checkbox export value option when using pdf template file.
Changed
The Markdown to HTML converter now uses the Attribute Lists extension.
The server_capabilities() function now has a google_maps item.
When the server is not in debug mode, users must be logged in as
with administrator or developer privileges to run interviews in
docassemble.base and docassemble.demo. In the SMS interface,
interviews in these packages are always inoperable unless the server
is in debug mode.
Fixed
The server_capabilities() was not recognizing the enable
settings.
When using S3 or Azure Blob Storage, the files will now be cached
on the server file system and updated when they change.
When using the Playground and S3 or Azure Blob Storage is in use,
and there are more than ten decorations, no preview images will be
shown in “Variables, etc.”
The values of SavedFile objects will be cached in memory for the
duration of a web request, so that when you create a new
SavedFile, attributes will be set from memory.
The first argument to a MachineLearner object will no longer be
used as a literal group_id. Rather, an argument 'fruit' it will
be converted into a group_id of the form
docassemble.packagename:data/sources/ml-interviewname.json:fruit.
You can still set a literal group_id using the keyword parameter
group_id.
When an initial_file is given to a MachineLearner object, two
different formats can be used: an array, or a dictionary of arrays.
If a dictionary of arrays, the keys will be checked and if the key
matches the group_id (with the part before the final
colon, if any, removed), the array corresponding to that key will be
used.
Fixed
Playground wizard not including pdf and docx template files in package.
Playground wizard not including static files in package.
Playground wizard pickle error when using S3 or Azure blob storage.
Interview cache invalidation now handled through thread local
variables and a redis counter, rather than by modification times on
YAML files. This may avoid potential problems with Google Drive
sync.
Google Drive sync now has a page that tells the user not to stop the
web browser.
Fixed
Error on URL redirection.
Playground package page asking for GitHub sign-in after expiration
of credentials.
The way that the objects block gets executed has changed. It no
longer executes as a mandatory block unless it is marked as
mandatory.
In addition, the way that questions are asked has changed
accordingly. If any fields that would be set by the question have
attributes, docassemble will try to ensure that the underlying
variable is already defined, which may trigger a process of defining
the variable. This will ensure that objects mentioned in object
blocks will be created before they are necessary.
These new changes enable the use of iterator variables like i in
objects blocks.
Fixed
Problem with deletion of keys on S3.
Problem with response() on second and subsequent screens.
Option for go full screen that limits behavior to mobile only.
Caching of assembled documents. Clicking on assembled documents
will now open them in a new browser tab rather than offering them
as attachment downloads.
Changed
In Google Drive synchronization, .tmp and .gdoc files are now
ignored.
Fixed
Spinner did not appear on signature pages.
Date validation forcing input even when date not required.
Images included in terms not appearing unless fully qualified.
set_attributes() method for DAFile and DAFileList in order to
allow uploaded files to be used across interview sessions and not be
deleted when the session in which the file was uploaded is deleted.
url_for() method for DAFileList.
Changed
Hyperlinks to actions (e.g., created through url_action() or
action_menu_item()) are now carried out through Ajax.
Fixed
Compatibility of UI elements with ‘control’ live help feature.
Extraneous “Menu” entry in mobile menu when custom menu used.
Fields with datatype: checkboxes now have a “None of the above”
option by default, and input validation ensures that something is
checked. The none of the above field modifer configures it.
After registration, users will bypass the “Interviews” screen and
go right back to their interview, if they have started an interview.
Added
Option in fields called uncheck others when datatype is
yesno, noyes, yesnowide, or noyeswide. Enables a yes/no
field to act as a “None of the above” option.
“Upgrade docassemble” button on the “Update a package” page.
Fixed
Automatic login after registration was not working, so users had to
enter username and password information twice.
Improved CSS for when name of interview on mobile is too long to fit
in navigation bar.
Non-ASCII characters in PDF fields when scanning through utilities
no longer cause an error.
Fixed problem introduced in 0.1.22 where interview data would be
destroyed when switching back to an interview during the same session.
Support for help text next to choices in a multiple choice list.
Changed
Database upgrades now handled by alembic by default. See the ‘use
alembic’ configuration directive.
Extension packages no longer depend on the docassemble.base or
docassemble.webapp packages. As a result, installation of an
extension package will no longer trigger a total software update.
If you want to upgrade docassemble, upgrade docassemble.webapp.
Note that packages created in earlier versions will still have these
dependencies until they are regenerated in the Playground. You can
always edit install_requires in the setup.py file.
If you updated the Python packages to 0.1.15 or 1.1.16 without
updating the system, you may have experienced an error. Now, if
changes to the Python packages alter the necessary PostgreSQL
columns or tables, those columns and tables will be changed upon
reboot after the updating of the Python packages, and will not have
to wait until an upgrade of the system.
Fixed reference in Dockerfile to non-existent file.