Skip to content

Releases: usnistgov/NEMO

7.2.1

01 Jul 13:46
Compare
Choose a tag to compare

Bug fixes

  • Fixed a bug in the calendar not displaying the tool reservations when the tool has no problems

7.2.0

30 Jun 21:15
c8a2c18
Compare
Choose a tag to compare

Upgrade notes

  • This update can take up to 10 minutes so make sure to plan enough downtime.
  • Make sure you add django_jsonform to your INSTALLED_APPS in settings.py
  • Migrations for NEMO 3.x and NEMO 4.x have been squashed, which means if by any chance you are currently still on NEMO < 5.0.0, you will need to update to NEMO 7.1.4 before updating to 7.2.0

New features

  • Added support for Staff on tool permission (defined in Detailed administration -> Tool or Detailed administration -> User). Thanks MIT.nano for the contribution!
    Users who are given staff on tool permission for a specific tool can:
    • use the tool on behalf of a user or for remote project
    • use the configuration agenda for that tool (and change the configuration)
    • use the maintenance page for that tool (and update/resolve tasks)
    • reset the tool's usage counters
    • qualify and train users on that tool
    • see the tool's credentials
    • receive Task status updates (when enabled)
  • Added experimental support for custom tool properties defined by a JSON Schema. This JSON Schema is used to create a GUI in Detailed administration -> Tool to allow admins to select properties for their tools. Once defined, the properties are also displayed on the tool control page as key/value pairs. More information on the schema definition can be found here: https://django-jsonform.readthedocs.io/en/latest/schema.html

Improvements

  • Added option in Customizations -> Tool -> Tool control to automatically pre-fill post usage answers with pre usage answers, as long as the question's name matches. Thanks MIT.nano for the contribution!
  • Added support for SCRIPT_NAME in Gunicorn's configuration when using docker image, by passing the environment variable: GUNICORN_SCRIPT_NAME (this is used for sub_path deployments)
  • Usage reminders do not include tools the user has an ongoing reservation for anymore. Thanks MIT.nano for the contribution!
  • Text area resizing in NEMO (mostly used in Customizations and Custom forms) now extends according to the placeholder text too.
  • Pre/post usage data will now be displayed in the Usage page. Thanks MIT.nano for the contribution!
  • In Email broadcast feature, updated the display of active/inactive and access expired users to be more clear and straightforward.
  • When qualified users are sent tool problems, they will now also receive problem resolutions (same for users subscribing to tool problems in preferences).
  • Added filter by tool category in maintenance page. Thanks MIT.nano for the contribution!
  • Comments can now be pinned. Pinned comments are be red and serve as tool alerts. They are displayed at the top of the tool control page and on the calendar. Thanks MIT.nano for the contribution!
  • In the Kiosk, the first name of the badged-in user will be be displayed in the bottom left corner.
  • Added option to customize the message displayed by the Kiosk page. Thanks MIT.nano for the contribution!
  • Updated user profile page to add separate active/inactive projects, access expiration and tool responsibilities (primary owner, backup, staff on tool, superuser)
  • Added options in Customizations -> User to display a warning and/or a danger banner when their access is about to expire (from access expiration date). The number of days before a warning/danger message is displayed is customizable.
  • Added account type and project type filter in project billing. #292 . Thanks @anielsantos for the contribution!
  • Added options (on successful login and logout) to add kiosk button shortcuts in area access screens, so users can go directly to the Kiosk after logging in/out of the lab. The options are available in Customization -> Application. Thanks UPenn Singh Center for the contribution!
  • The button on the calendar that is used to only display tools the user is qualified is now available for staff users to show only tools they are responsible for (as primary & backup owners, staff on tool or superuser). Thanks Stanford SNF for the contribution!
  • For interlock cards, added support for "reverse_signal" option in extra_args which will send the opposite signal (lock vs unlock) to the interlocks. This is useful for boxes set up to "fail open". Thanks Harvard CNS for the contribution!
  • List of qualified users for a tool will now display the date they last qualified.

API

  • Fixed an issue that was bypassing model validation when fields were set to "__all__".
  • Added filtering by serial for Tools.
  • Added "shortened" filter for Reservations.
  • Added Customizations and Tool comments endpoints.

Bug fixes

  • Fixed issue when no project type was selected when creating a project which was throwing an error when it shouldn't.
  • Fixed some permission issues in the Kiosk where the kiosk user was used instead of the badged in user.
  • Added new DB constraint to prevent duplicate tool usage events and area access records from being created.
  • Fixed an issue when users given temporary access to a lab would still get abuse messages that they were not supposed to be in the lab.
  • Fixed a problem with duplicate reservations by retrieving only the last one instead of all the matching reservations within the timeframe.
  • Fixed an issue in Requests when it would display a blank page when only Staff assistance requests were enabled.
  • Fixed error when a customization page does not exists by returning a 404 page instead of blowing up.
  • Fixed missing Project billing link for facility managers

Libraries

  • Django 4.2.20 -> 4.2.23
  • cryptography 44.0.2 -> 45.0.4
  • django-auditlog 3.0.0 -> 3.2.0

7.1.4

15 Apr 19:32
Compare
Choose a tag to compare

Improvements

  • The adjustment charge cannot be changed when editing or reviewing anymore (if it needs to be changed, users will need to delete their adjustment request and create a new one)

API

  • Switched metadata endpoint to ViewSet so it can be included in the root of the browsable API
  • Updated metadata API endpoint to work with python 3.9

Bug fixes

  • Fixed validation errors during recurring charges not being rendered properly
  • Fixed skip_customer_validation option not being respected in consumable withdrawals for recurring charges

Libraries

  • djangorestframework -> 3.16.0
  • Pillow -> 11.2.1

7.1.3

02 Apr 15:03
b5b0ef9
Compare
Choose a tag to compare

Bug fixes

  • Fixed issues with project name length in MySQL databases (which cannot create long unique indexes)
  • Fixed formula extraction not working when using a non-group variable inside a group formula
  • Fixed unnecessary db calls when using RoleGroupPermissionChoiceField

7.1.2

27 Mar 22:42
Compare
Choose a tag to compare

Bug fixes

  • Fixed issue when creation reservations on mobile and kiosk views.
  • Fixed file name comparison not working with windows paths (for those running NEMO on windows)

7.1.1

26 Mar 15:56
c476737
Compare
Choose a tag to compare

Bug fixes

  • Fixed escaping in project names in user's page (when names contained quotes it was removing all projects from a user on save)
  • Fixed some path issues on windows when automatically renaming document files

7.1.0

24 Mar 15:45
b8091f9
Compare
Choose a tag to compare

Upgrade notes

  • The new version of Gunicorn drops all HTTP headers with underscores in it. If using the docker image of NEMO, make sure you do not set any headers with underscores (use dashes, which are automatically converted to underscores in NEMO anyway)

Improvements

  • Organized all inactive projects under a separate section for an account. Thanks USC Nanofab for the contribution!
  • Added handling of checked status for required checkboxes in Dynamic forms. Also making them slightly visible (transparent, 1x1 boxes) to better handle validation.
  • introduced "auto_resize" option for text areas in Dynamic forms.
  • Updated Tool usage counters to work with either pre or post usage questions (or both). Thanks MIT.nano for the contribution!
  • Added new option in Customization -> remote work to assume work on behalf of another user is never remote. These options are now more clear: always/never considered remote, or ask explicitly. Thanks MIT.nano for the contribution!
  • Reordered impersonate checks to avoid extra db call on most requests.
  • Changed loading spinner behavior to hide on page unload instead of pageshow. Now the spinner can be used in ajax requests like adjustment requests.
  • Slightly improved adjustment requests loading time.
  • Added more options in Landing Page Choice view permissions. Icons can now be shown to anyone or specific roles/groups of people allowing a lot of flexibility.
  • Added option to unlock door on area logout. Thanks MIT.nano for the contribution!
  • Added "read_only" option for text fields in Dynamic forms.
  • Added "show_formula_preview" option for Dynamic form Formula field which will display the formula result as readonly field on the form.
  • Updated Dynamic form events to automatically handle add/remove of group questions and showing/hiding enable and disable tool buttons. Dynamic form changes now trigger dynamic-form-group-changed and dynamic-form-field-changed js events.
  • Added GenericRemoteUserAuthenticationBackend and GenericBasicAuthenticationHeaderAuthenticationBackend to handle remote user without removing @ and everything after.
  • Added support for pre-filling description in adjustment request (with GET parameter description)

Bug fixes

  • In detailed admin, fixed the permission issues preventing someone from using the autocomplete to find related objects. For example if a user had Staff Charge creation permission, they wouldn't be able to select a user unless they also had view permissions on all users. This fix guarantees they can select them if they have creation or change permissions on the parent object.
  • Fixed leftover "date" field preventing reservation from being made on kiosk and mobile devices.
  • Fixed an error when displaying run data in usage in the calendar view.
  • Fixed error being thrown when kiosk plugin is installed but not area access.
  • Fixed a bug in area access tablets where project validation would not happen if the user had only one project and that project had area restrictions (derived from tool restrictions). This is an edge case unlikely to affect many users.
  • Fixed buffer days for automatic user deactivation which was reversed. Users were deactivated days before instead of days after their access expiration date.
  • Fixed landing page link automatic prepending of SCRIPT_NAME (when deploying NEMO on a subpath) which should only happen for relative links.
  • Fixed Dynamic form group questions not working for pre usage questions.

Libraries

  • Django 4.2.19 -> 4.2.20
  • cryptography 44.0.1 -> 44.0.2
  • drf-excel 2.5.2 -> 2.5.3

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