Skip to content

Releases: usnistgov/NEMO

7.0.2

05 Mar 03:44
Compare
Choose a tag to compare

Improvements

  • Updated to use python3 -m instead of pip in Dockerfile
  • Replaced var with let 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

24 Feb 15:24
0222f1b
Compare
Choose a tag to compare

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

20 Feb 14:15
8499b38
Compare
Choose a tag to compare

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 in settings.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 in settings.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 and MIT.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.
  • 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 and row_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:
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. Thanks Cornell 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 called Start date for pre run data and End 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. Thanks MIT.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 using LOGGING_ERROR_EMAIL_PERIOD_SECONDS and LOGGING_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 a training field set to True when it was used for training. Thanks MIT.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. Thanks Cornell 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...
Read more

6.0.3

22 Aug 19:46
Compare
Choose a tag to compare

Bug fixes

  • fixed issue with task notification being sent from the last qualified user instead of the reporter

Libraries

  • django 4.2.11 -> 4.2.15 (vulnerability)

6.0.2

12 Jun 21:51
0e4813a
Compare
Choose a tag to compare

Bug fixes

  • fixed error with first day of the week format for moment.js which created issues with daterangepicker in sensor data pages

6.0.1

12 Jun 17:31
09462e8
Compare
Choose a tag to compare

Bug fixes

  • fixed a bug from Django 4.2 upgrade preventing rates from being loaded correctly on start
  • fixed a validation bug in dynamic form with formula type questions

6.0.0

07 Jun 14:43
758968e
Compare
Choose a tag to compare

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:

  1. 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"]
  1. 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 the Tool 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

15 May 19:45
Compare
Choose a tag to compare

Bug fixes

  • Fixed an issue when reporting an problem or comment in the kiosk would not use the correct user

5.6.0

02 May 21:26
6bca6db
Compare
Choose a tag to compare

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 and access_expiration fields have also be renamed to active NEMO account and active 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

5.5.3

30 Apr 13:16
Compare
Choose a tag to compare

Bug fix

  • fixed a bug with model instance copies that interfered with the new version of auditlog