Releases: usnistgov/NEMO
7.0.2
Improvements
- Updated to use
python3 -m
instead ofpip
in Dockerfile - Replaced
var
withlet
for variable declarations to enhance code consistency and modernity in a few places - Now automatically loading customization email templates when there is a
customization_<customization_key>_templates.html
file (helpful for plugins) - Updated customization template loading to work from
templates/<plugin_name>/customizations/
too instead of being forced to use the global templates directory (also helpful for plugins)
API
- Added tests for API lists
- Added staff assistance requests endpoint to API
Bug fixes
- Removed direct dependency on admin app for interlocks to avoid issues when the admin app is not installed
- Fixed issue with personal schedule checkbox showing in the calendar when not applicable
- Fixed hybrid reservation and use feed not working properly when there are both reservations and use events
Libraries
- gunicorn 20.1.0 -> 23.0.0
7.0.1
Improvements
- Added Training email category
- Updated tool credential detailed admin list to include password
- Restricted list of staff that can be allowed to view tool credentials to only "active" staff
Bug fixes
- Fixed username display in tool freed time notification
- Fixed a few html/js/css display issues
- Fixed old reference to NEMO 6.1.0 (instead of 7.0.0)
- Fixed help text on document display order
7.0.0
Breaking changes
- Dropped support for python 3.8 (end-of-life was reached in October 2024).
- Added support for Python 3.13.
- Removed dependency on
pytz
which is deprecated. Plugins will have to manually add that requirement it if they need it.
Upgrade notes
- This is a major release. It is recommended to wait until new compatible plugin versions are released before updating.
- The code for sensors has been moved to its own plugin, if you were using it you need to remove
NEMO.apps.sensors
from the list of INSTALLED_APPS insettings.py
and follow the instructions to install NEMO-Sensors. - The code for contracts and procurements has been moved to its own plugin, if you were using it you need to remove
NEMO.apps.contracts
from the list of INSTALLED_APPS insettings.py
and follow the instructions to install NEMO-Contracts. - A new email template needs to be added for the tool required unanswered questions email, which can be found here.
- The
out_of_time_reservation_email
template needs to be updated to the new version which can be found here. - The
adjustment_request_notification_email
template needs to be updated to the new version which can be found here. - To use the new periodic interlock status report feature, add the
nemo_email_interlock_status_report
systemd service and timer available in the systemd folder.
New features
- Added new Staff assistance requests:
- staff assistance requests have to be enabled in Customization -> User requests.
- users can create assistance requests, which are sent to all technical staff members. Staff members cannot create assistance requests.
- emails are sent and notifications are added in requests menu.
- any staff can reply and mark the request as resolved.
- Tool usage counter updates (Thanks
UPenn Singh Center
for the contribution!):- added way to increase or decrease counters
- added multiple checkboxes to decide who can reset the counter (staff/superusers/qualified users)
- added flag to not send reset notification to facility members
- Adjustment request updates:
- added a way to mark charges as waived and request it in adjustment requests. Thanks
Cornell NanoScale Facility
andMIT.nano
for the contribution! - customizations are now in a separate section
- requests can be linked to a charge without requiring changing one of the fields
- users can now request adjustments for non-remote charges done on their behalf. The staff member operating the tool can also request adjustments for that same charge.
- added a way to mark charges as waived and request it in adjustment requests. Thanks
- Dynamic form updates (used in pre/post usage and reservations questions):
- added new dynamic form question of type "radio_report_problem" to automatically report tool issues from pre/post usage questions. Thanks
UPenn Singh Center
for the contribution! - added a way to specify initial data. This is the first step toward allowing editing of questions (#153).
- added
form_row
androw_cell
to allow customization of the form display into a grid. - added
inline
property to radio buttons and checkboxes to display the options inline instead of vertically. - added support for option groups in dropdown questions by enabling the use of a dictionary in the
labels
property:
- added new dynamic form question of type "radio_report_problem" to automatically report tool issues from pre/post usage questions. Thanks
labels = {
"Category 1": ["Choice1", "Choice2"],
"Category 2": "Choice3"
}
- Added staff activity in
My usage
page for staff to view the activities they have performed on behalf of users. - Added readonly Detailed administration audit log to keep track of what users are doing in detailed admin. Thanks
UPenn Singh Center
for the contribution! - Added interlock ping function and systemd service to get periodic reports of interlocks responding to pings. Thanks
Stanford SNF
for the contribution! - Projects can now have one or multiple configurable
Project types
. ThanksCornell NanoScale Facility
for the contribution!
Improvements
- Updated the out of time reservation email to notify users when they are over staying. Thanks @r-xyz for the contribution!
- Added hybrid reservation + usage calendar feed option.
- Made the tool required unanswered questions email customizable in file & email templates.
- Projects are now shown in the user's page following the project selection template for consistency.
- In tool control data usage history tab, the
date
field for pre and post run data will now be calledStart date
for pre run data andEnd date
for post run data. - Added ability to customize the farewell_screen page display the same way as the welcome_screen.
- When there are no tools or areas, the Calendar main menu item will now be hidden.
- Added end date field when creating a reservation in the kiosk (only time was available previously). Thanks @r-xyz for the contribution!. Fixes #253.
- Now sending email with required questions when someone else forces someone off (even if they are not staff or user office).
- Updated char field length using predefined length: SMALL (100), MEDIUM (255), LARGE (1024) for consistency across NEMO.
- Now using reservation title when sending ICS calendar invites. Thanks
UPenn Singh Center
for the contribution! - Added an option in customization to show the username in the tool freed time email notification. Thanks
UPenn Singh Center
for the contribution! - Now showing pre/post usage data in calendar usage details.
- In Usage data history, added operator information. Thanks
MIT.nano
for the contribution! - Added customization option to show tool documents in a separate tab in tool control (instead of at the bottom). Thanks
MIT.nano
for the contribution! - Added option to only show qualified tools in the Kiosk (instead of all the tools the user cannot reserve/engage). Thanks
MIT.nano
for the contribution! - Added
?category=
query parameter to Kiosk URL to go show only tool of a specific category. ThanksMIT.nano
for the contribution! - Added an option (in Customization -> Tool) to show who has a reservation next in tool control.
- Added new environment variables to Dockerfile to customize the container's configuration. This allows more flexibility for workers and threads:
- NEMO_EXTRA_PIP_PACKAGES (to add plugins or other packages to be installed on start)
- GUNICORN_WORKER_CLASS (default is
gthread
) - GUNICORN_WORKER_COUNT (default is
cpu_count() * 2 + 1 with a max of 9
) - GUNICORN_THREAD_COUNT (default is
8
) - GUNICORN_KEEPALIVE_SECONDS (default is
300
) - GUNICORN_CAPTURE_OUTPUT (default is
True
)
- In Detailed administration -> Email logs, added the date when email was sent in the detailed view.
- Now displaying project PIs in Detailed administration -> Projects
- Added new type of AdminEmailHandler for django to limit the number of error emails sent within a certain timeframe. This option can be configured in
settings.py
usingLOGGING_ERROR_EMAIL_PERIOD_SECONDS
andLOGGING_ERROR_EMAIL_MAX_EMAILS
- Added a new option for using tools, for "training". This new mode will automatically take the trainer to the
record training
page in NEMO and link the usage event back to the training after it is successfully recorded. The usage event will also have atraining
field set to True when it was used for training. ThanksMIT.nano
for the contribution! - Added
critical
flag in app config so NEMO doesn't start if there is a plugin is set as critical and has an error on startup. - Added an option to automatically shut down a tool when a safety hazard is reported, even if the shutdown flag on the report is not True. Thanks
Cornell NanoScale Facility
for the contribution! - Added json dictionary of extra arguments for interlock cards. For modbusTCP implementations, the "timeout" key/value can be specified as the timeout for the connection. Thanks
MIT.nano
for the contribution! - Improved highlighting for required questions in Dynamic forms. Thanks @r-xyz for the contribution! Fixes #256.
- Added new autocomplete widget for admin fields.
- Added new
NEMO.plugins.utils
python file with utility functions for plugins. Added a function to dynamically add new notification types. - Added an
enable
flag on reservation questions. - If an SMTP connection error is detected (AuthenticationError, ConnectError or ServerDisconnected) when sending an email, NEMO will automatically retry it once.
- Added utility function to rename files in storage when their name depends on the tool name (for example tool image) and that tool name is updated in NEMO. Previously those files would keep the old name forever.
- Added links to projects from User's page and links to users from Project's page. Thanks
Stanford SNF
for the contribution! - Added new maximum future reservations policy for tools and areas. Thanks
MIT.nano
for the contribution! - Added options to always notify the person who has a reservation next when the current reservation is shortened. Thanks
MIT.nano
for the contribution! - Added a
Control
button in mobile calendar view to easily switch to the tool control page for that tool. ThanksCornell NanoScale Facility
for the contribution! - Added tool status icon in mobile calendar view. Thanks
Cornell NanoScale Facility
for the contribution!
API
- Removed pagination on readonly API endpoints (Permission, ContentType, ) to be consistent with other API endpoints.
- Added serializer field for MultiEmailField, so it can be handled properly in the API.
- All charge types (UsageEve...
6.0.3
6.0.2
6.0.1
6.0.0
Upgrade notes
[ORACLE & REPORTS PLUGIN USERS ONLY] If you use ORACLE Database and have NEMO-reports version >= 1.8.0, you need to remove it from settings.py INSTALLED_APPS
, update NEMO, then put it back. If you have NEMO-reports version < 1.8.0, you can proceed directly.
[EVERYONE]
NEMO 6.0.0 includes a major update to NEMO's underlying framework (Django 3.2 -> 4.2), and the following changes need to be made:
- add to
settings.py
:
# ALLOWED_HOSTS = ["nemo.example.com"]
# ...
CSRF_TRUSTED_ORIGINS = ["https://{}".format(ALLOWED_HOSTS[0])]
# or directly CSRF_TRUSTED_ORIGINS = ["https://nemo.example.com"]
- the unauthorized_tool_access_email template needs to be updated to the new version which can be found here
New features
- Added a new Tool credentials page for staff, allowing administrators and staff with permissions to add/edit and search tool credentials (username/passwords).
Tool credentials are shown to staff by default in theTool control -> Details
tab but require the user to expand the section to see the actual information (for privacy). - Added a user profile view which, if enabled in
Customization -> Users
, will allow users to see their profile by clicking on their name in the navigation bar. The user profile contains user's general information, projects, area access levels and tool qualifications (Thanks @Valilian of UC Irvine for the contribution!). - Added support for consumable withdrawal adjustment requests
Improvements
-
Project usage and project billing will now allow to search for inactive users.
-
Added an option to hide inactive projects when looking at a specific account page in
Customization -> Projects & accounts
. -
Added confirmation dialog when marking an adjustment request as applied.
-
Automatically adding tool owners, backup owners and superusers when sending a email to all qualified users (in case they are not explicitly qualified).
-
Added option to require selecting a user type when creating a new user.
-
Training can now be enabled for some specific hidden tools in
Customization -> Training
(Thanks @r-xyz for the contribution). #221 -
Added settings to allow tool problems and updates to be sent to users if they add them in preferences. only qualified tools are allowed (Thanks
UPenn Singh Center
for the contribution!). -
In user's page, added the last access date for each area access levels.
None
will be displayed in red color if the user has an area access that they never used. -
Personal schedule can now be selected in the calendar to be displayed in the same view as tool reservations (Thanks
UPenn Singh Center
for the contribution!). -
Added an option to sort tools in status dashboard by time of use instead of name (Thanks
Stanford SNF
for the contribution!). -
Added an option in email broadcast to send the message to users with expired access (false by default)
-
Max delayed logoff time can now be customized per tool. It replaces the previous checkbox. Any tool that previously allowed delayed logoff will be automatically set to 120 minutes which was the hardcoded value until now.
-
Added title for contact information people. #195
API
- Added recurring consumables, physical access levels, buddy requests, temporary physical access requests and adjustment requests endpoint.
- Missed reservation adjustment can now be applied (if times are changed, new times will be applied, and if no times are changed, the reservation will be changed to not missed).
- Simplified API filters in the code for easier maintainability and consistency.
Bug fixes
- Reservation ending email reminders will not be sent anymore when the user has back to back reservations (Thanks @r-xyz for the contribution!).
- Fixed the first day of the week not being consistent when using datetime pickers (Thanks @r-xyz for the contribution!). #231
- Fixed invalid dates when selecting blank option as a month in my usage/project billing pages. #235
Libraries
- Django 3.2.25 -> 4.2.11
- cryptography 42.0.5 -> 42.0.8
- requests 2.31.0 -> 2.32.3
5.6.1
5.6.0
Upgrade notes
- To use the new automatic deactivation when a user's access expires, a new timed services need to be added,
nemo_deactivate_access_expired_users
Systemd services are available in the systemd folder
New features
- Users with access expiring can now be automatically deactivated. The timed service needs to be set and at least one user type option needs to be picked in
Customization -> User -> Access expiration - deactivate users
Improvements
- Policy rules were changed, so that the
access expiration
date on users now prevents users from making reservations and engaging tools. active
andaccess_expiration
fields have also be renamed toactive NEMO account
andactive access expiration
(respectively) to be more explicit- By default, broadcast emails will also not be sent to users with access expired. An option was added to still send it to them when writing a message