SENAITE LIMS 2.6.0 released

:tada: Announcing SENAITE 2.6.0 – A Major Step Forward!

Dear community,

We are proud to announce the release of SENAITE 2.6.0, the next major milestone in the evolution of our open-source LIMS platform!

:wrench: What’s New?

A key highlight of this release is the migration of numerous content types from Archetypes (AT) to Dexterity (DX). This is part of our broader initiative to modernize the codebase, reduce technical debt, and advance towards full Python 3 compatibility.

The following content types have been successfully migrated:

AnalysisCategories, AnalysisCategory, AnalysisProfiles, AnalysisProfile, AttachmentTypes, AttachmentType,
BatchLabels, BatchLabel, ContainerTypes, ContainerType, Departments, Department, InstrumentTypes, InstrumentType,
LabProducts, LabProduct, Manufacturers, Manufacturer, Preservations, Preservation, SampleConditions, SampleCondition,
SampleMatrices, SampleMatrix, SamplePoints, SamplePoint, SampleTemplates, SampleTemplate, SampleTypes, SampleType,
SamplingDeviations, SamplingDeviation, StorageLocations, StorageLocation, SubGroups, SubGroup, Suppliers, Supplier,
WorksheetTemplates, WorksheetTemplate

:package: Release Packages

You can try the latest version right away using Docker:

docker pull senaite/senaite:v2.6.0
docker container run -p 8080:8080 --name senaite -e ADDONS="senaite.storage senaite.databox" senaite/senaite:v2.6.0

:clipboard: Version Updates

Thank you for your continued support and contributions and let us know what you think!

7 Likes

:clap: :clap: :clap:
Nice announcement.

Hi @ramonski,

First, thank you for officially releasing Senaite LIMS 2.6.0. I’ve successfully installed a fresh instance of version 2.6.0 on a Linux system (Zorin OS), and overall, it’s working well.

However, I’d like to share a couple of issues I encountered during the installation process that might be helpful for others:

  1. senaite.impress 2.6.0 – Pyphen Dependency
    The current version of senaite.impress does not allow the installation of pyphen==0.10.0, which is not compatible with Python 2.7. To resolve this, I had to manually modify the metadata file of the impress egg to permit the installation of pyphen 0.10.0.
  2. Local Server – Waitress Unicode Error
    When running the application on the local server, I encountered the following error from Waitress:
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd9 in position 3

To work around this, I modified the translogger.py file with the following snippet:

for key in d:
    if isinstance(d[key], str):
        try:
            d[key] = d[key].decode('utf-8')
        except UnicodeDecodeError:
            d[key] = d[key].decode('utf-8', 'ignore')
message = self.format % d

I hope this feedback is useful. Thank you again for the great work on Senaite.

Best regards,
Haider Alwaqfi
haideralwaqfi@gmail.com

Dear @haideralwaqfi,
Thank you very much for your feedback and for sharing these valuable insights and workarounds!
I haven’t encountered these issues myself so far, but I’m glad to hear everything is working as expected on your side now.
Let’s hope things get even smoother once we’ve fully migrated to Python 3 :wink:
Best regards,
Ramon

1 Like

Hi @ramonski,

Thank you very much for your continuous support. I have been part of this community since 2022, and it has greatly helped my career. I started using Senaite with version 2.4 on Ubuntu 22. Now, thanks to one of your YouTube videos, I have successfully installed a fresh Senaite 2.6 on Ubuntu 24. However, when I try to migrate my old filestorage and blobs to the newer version to consolidate all my data on one server, I encounter several errors.

Do you have any advice on how to migrate data correctly? I apologize if this is a rookie mistake, but I am a chemical engineer with minimal experience in IT.

1 Like

Hi @diegoadrian,

Thanks a lot for your message and for sharing your experience with us!

Sorry to hear that your upgrade from 2.4 to 2.6 didn’t go as expected. We know how frustrating that can be. While we’ve put a lot of effort and testing into the upgrade process, issues can still arise depending on the specifics of your data.

The most reliable approach is to perform the upgrades step-by-step through the ZMI, with the server running in foreground mode:

How to update SENAITE · SENAITE

This way, you’ll be able to see exactly where the upgrade fails and share the traceback or error message with us. That will help us support you more effectively.

Hopefully, we’ll be able to get your database upgraded to the latest version soon.

Good luck and best regards,
Ramon

Thank you very much for your support @ramonski
the first thing I am trying to do is to clone my senaite 2.4 to a new server, but I believe I am having trouble because of the versions section in the buildout.cfg. I successfully installed Senaite 2.4 but when I try to access any listing, like samples, worksheets, etc., I do not see any table, instead, I get this error:

Traceback (innermost last):
  Module ZPublisher.WSGIPublisher, line 162, in transaction_pubevents
  Module ZPublisher.WSGIPublisher, line 371, in publish_module
  Module ZPublisher.WSGIPublisher, line 274, in publish
  Module ZPublisher.mapply, line 85, in mapply
  Module ZPublisher.WSGIPublisher, line 63, in call_object
  Module senaite.app.listing.view, line 253, in __call__
  Module Products.Five.browser.pagetemplatefile, line 126, in __call__
  Module Products.Five.browser.pagetemplatefile, line 61, in __call__
  Module zope.pagetemplate.pagetemplate, line 135, in pt_render
  Module Products.PageTemplates.engine, line 378, in __call__
  Module z3c.pt.pagetemplate, line 176, in render
  Module chameleon.zpt.template, line 302, in render
  Module chameleon.template, line 192, in render
  Module aec5a3b551f768231107d193b761aecf, line 321, in render
  Module e847953393f9c789b9878e9de20d0157, line 1449, in render_master
  Module e847953393f9c789b9878e9de20d0157, line 407, in render_content
  Module aec5a3b551f768231107d193b761aecf, line 259, in __fill_content_core
  Module zope.tales.expressions, line 250, in __call__
  Module Products.PageTemplates.Expressions, line 225, in _eval
  Module Products.PageTemplates.Expressions, line 155, in render
  Module senaite.app.listing.view, line 331, in contents_table
  Module Products.Five.browser.pagetemplatefile, line 126, in __call__
  Module Products.Five.browser.pagetemplatefile, line 61, in __call__
  Module zope.pagetemplate.pagetemplate, line 135, in pt_render
  Module Products.PageTemplates.engine, line 378, in __call__
  Module z3c.pt.pagetemplate, line 176, in render
  Module chameleon.zpt.template, line 302, in render
  Module chameleon.template, line 215, in render
  Module chameleon.template, line 192, in render
  Module b0d2560a74171500c7a32719a91b151a, line 418, in render
  Module zope.tales.pythonexpr, line 73, in __call__
   - __traceback_info__: (view.ajax_transitions_enabled())
  Module <string>, line 1, in <module>
  Module plone.memoize.view, line 59, in memogetter
  Module senaite.app.listing.decorators, line 50, in wrapper
  Module senaite.app.listing.ajax, line 322, in ajax_transitions_enabled
  Module senaite.core.registry, line 65, in get_registry_record
  Module plone.registry.registry, line 82, in forInterface
KeyError: 'Interface `senaite.app.listing.controlpanel.IListingRegistry` defines a field `listing_ajax_transitions_blacklist`, for which there is no record.'

 - Expression: "s python:view.ajax_transitions_enabled"
 - Filename:   ... y2.7.egg/senaite/app/listing/templates/contents_table.pt
 - Location:   (line 38: col 52)
 - Source:     ... jax_transitions python:view.ajax_transitions_enabled();
                                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 - Expression: "provider:plone.abovecontentbody"
 - Filename:   ... te/core/browser/main_template/templates/main_template.pt
 - Location:   (line 136: col 84)
 - Source:     ... 
                                     ^
 - Expression: "here/main_template/macros/master"
 - Filename:   ... 2.4.0-py2.7.egg/senaite/app/listing/templates/listing.pt
 - Location:   (line 5: col 23)
 - Source:     metal:use-macro="here/main_template/macros/master"
                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 - Arguments:  repeat: <Products.PageTemplates.engine.RepeatDictWrapper object at 0x7b1195394500>
               template: <Products.Five.browser.pagetemplatefile.ViewPageTemplateFile object at 0x7b119bd56c50>
               views: <Products.Five.browser.pagetemplatefile.ViewMapper object at 0x7b118ed89310>
               additional_form_class: ''
               request: <WSGIRequest, URL=http://localhost:8080/LIMSA/clients/base_view>
               args: ()
               form_adapter_name: ''
               here: <ClientFolder at /LIMSA/clients>
               portal: <PloneSite at /LIMSA>
               user: <PropertiedUser 'admin'>
               nothing: None
               translate: <function translate at 0x7b117bb21350>
               container: <ClientFolder at /LIMSA/clients>
               modules: <Products.PageTemplates.ZRPythonExpr._SecureModuleImporter object at 0x7b11a6302090>
               options: {}
               traverse_subpath: []
               default: <DEFAULT>
               loop: {u'input_attrs': <Products.PageTemplates.engine.RepeatItem object at 0x7b1153e10f50>}
               context: <ClientFolder at /LIMSA/clients>
               view: <Products.Five.browser.metaconfigure.ClientFolderContentsView object at 0x7b118d6aaa90>
               target_language: None
               root: <Application at >
               ajax_form_class: ''
              attrs: {u'data-enable_ajax_transitions': u'python:view.ajax_transitions_enabled()', u'class': u'ajax-contents-table w-100', u'data-pagesize': u'python:view.pagesize', u'data-listing_identifier': u'python:view.listing_identifier', u'data-api_url': u'python:view.get_api_url()', u'data-columns': u'python:view.ajax_columns()', u'data-review_states': u'python:view.ajax_review_states()', u'data-form_id': u'python:view.form_id', u'data-show_column_toggles': u'python:view.ajax_show_column_toggles()'}

Should I try to clone my information and then upgrade it, or just go directly to version 2.6?

Hi @diegoadrian,

The best approach is to install a fresh SENAITE 2.6 version from scratch on your server.
Afterwards, you copy the filestorage and the blobstorage for your current server to the new server, e.g. filstorage goes to /home/senaite/senaitelims/var/filestorage and blobstorage goes to /home/senaite/senaitelims/var/filestorage (unless you have configured it differently).

Then you start your ZEO server and start one instance in foreground mode, e.g. if /home/senaite/senaitelims is your buildout directory and your instance part is named instance, you would do this:

cd /home/senaite/senaitelims
bin/instance fg

Then go to portal_setup and run all upgrade steps one after the other as described here: How to update SENAITE · SENAITE

Don’t forget to run also the upgrade steps of the dependent packages, e.g. senaite.impress, senaite.app.listing, senaite.app.spotlight etc.

Good luck and regards,
Ramon

1 Like

Hello again @ramonski
Thanks for your instructions. On the new server, I have installed SENAITE 2.6, copied filestrorage and blobstorage where they belong by default, started an instance in foreground mode, and go this error:

/home/senaite/senaite/eggs/Products.CMFCore-2.7.1-py2.7.egg/Products/CMFCore/CachingPolicyManager.py:30: DeprecationWarning: IObjectMovedEvent is deprecated. Some zope.container interfaces have been moved to zope.lifecycleevent.interfaces, please import form there.
  from zope.container.interfaces import IObjectMovedEvent
/home/senaite/senaite/eggs/Products.CMFCore-2.7.1-py2.7.egg/Products/CMFCore/CMFCatalogAware.py:28: DeprecationWarning: IObjectAddedEvent is deprecated. Some zope.container interfaces have been moved to zope.lifecycleevent.interfaces, please import form there.
  from zope.container.interfaces import IObjectAddedEvent
/home/senaite/senaite/eggs/Products.Archetypes-1.16.6-py2.7.egg/Products/Archetypes/generator/widget.py:4: DeprecationWarning: InitializeClass is deprecated. Please import from AccessControl.class_init.
  from App.class_init import InitializeClass
/home/senaite/senaite/eggs/Products.Archetypes-1.16.6-py2.7.egg/Products/Archetypes/ReferenceEngine.py:31: DeprecationWarning: LazyMap is deprecated. Please import from ZTUtils.Lazy.
  from Products.ZCatalog.Lazy import LazyMap
2025-05-22 23:40:38,953 INFO    [chameleon.config:38][MainThread] directory cache: /home/senaite/senaite/var/cache.
/home/senaite/senaite/eggs/Products.ATContentTypes-3.0.7-py2.7.egg/Products/ATContentTypes/interfaces/factories.py:2: DeprecationWarning: IFileFactory is deprecated. Import IFileFactory from zope.filerepresentation.interfaces instead
  from plone.app.widgets.interfaces import IFileFactory
/home/senaite/senaite/eggs/Products.ATContentTypes-3.0.7-py2.7.egg/Products/ATContentTypes/permission.py:2: DeprecationWarning: IFieldPermissionChecker is deprecated. Import IFieldPermissionChecker from plone.app.z3cform.interfaces instead
  from plone.app.widgets.interfaces import IFieldPermissionChecker
/home/senaite/senaite/eggs/Products.ATContentTypes-3.0.7-py2.7.egg/Products/ATContentTypes/permission.py:8: DeprecationWarning: setDefaultRoles is deprecated. Please use addPermission from AccessControl.Permission.
  from Products.CMFCore.permissions import setDefaultRoles
/home/senaite/senaite/eggs/Products.ATContentTypes-3.0.7-py2.7.egg/Products/ATContentTypes/content/base.py:21: DeprecationWarning: ResourceLockedError is deprecated. Please import from zExceptions.
  from webdav.Lockable import ResourceLockedError
/home/senaite/senaite/eggs/Products.ATContentTypes-3.0.7-py2.7.egg/Products/ATContentTypes/lib/historyaware.py:4: DeprecationWarning: html_quote is deprecated. Please import from DocumentTemplate.html_quote. These shims will go away in DocumentTemplate 4.0.
  from DocumentTemplate.DT_Util import html_quote
/home/senaite/senaite/eggs/Products.ATContentTypes-3.0.7-py2.7.egg/Products/ATContentTypes/content/topic.py:35: DeprecationWarning: LazyCat is deprecated. Please import from ZTUtils.Lazy.
  from Products.ZCatalog.Lazy import LazyCat
/home/senaite/senaite/eggs/Products.ATContentTypes-3.0.7-py2.7.egg/Products/ATContentTypes/tool/factory.py:30: DeprecationWarning: call_object is deprecated. Please import from ZServer.ZPublisher.Publish.
  from ZPublisher.Publish import call_object
/home/senaite/senaite/eggs/Products.ATContentTypes-3.0.7-py2.7.egg/Products/ATContentTypes/tool/factory.py:31: DeprecationWarning: dont_publish_class is deprecated. Please import from ZServer.ZPublisher.Publish.
  from ZPublisher.Publish import dont_publish_class
/home/senaite/senaite/eggs/Products.ATContentTypes-3.0.7-py2.7.egg/Products/ATContentTypes/tool/factory.py:32: DeprecationWarning: missing_name is deprecated. Please import from ZServer.ZPublisher.Publish.
  from ZPublisher.Publish import missing_name
/home/senaite/senaite/eggs/plone.app.upgrade-2.1.8-py2.7.egg/plone/app/upgrade/__init__.py:157: DeprecationWarning: GopipIndex is deprecated. Please import from plone.folder.nogopip
  from plone.app.folder.nogopip import GopipIndex
/home/senaite/senaite/eggs/plone.app.blob-1.8.2-py2.7.egg/plone/app/blob/field.py:6: DeprecationWarning: rfc1123_date is deprecated. Please import from zope.datetime. This backwards compatibility import will go away in Zope 6.
  from App.Common import rfc1123_date
/home/senaite/senaite/eggs/plone.app.blob-1.8.2-py2.7.egg/plone/app/blob/content.py:23: DeprecationWarning: MimeTypeException is deprecated. Import from Products.MimetypesRegistry.interfaces instead
  from Products.MimetypesRegistry.common import MimeTypeException
/home/senaite/senaite/eggs/Products.ATContentTypes-3.0.7-py2.7.egg/Products/ATContentTypes/setuphandlers.py:9: DeprecationWarning: ILanguageSchema is deprecated. It has been moved to plone.i18n.interfaces, import from there instead.
  from Products.CMFPlone.interfaces import ILanguageSchema
/home/senaite/senaite/eggs/archetypes.schemaextender-3.0.2-py2.7.egg/archetypes/schemaextender/extender.py:15: DeprecationWarning: zope.site.hooks has moved to zope.component.hooks. Import of zope.site.hooks will become unsupported in Version 5.0
  from zope.site.hooks import getSite
/home/senaite/senaite/eggs/plone.contentrules-2.1.3-py2.7.egg/plone/contentrules/engine/interfaces.py:4: DeprecationWarning: IContained is deprecated. Some zope.container interfaces have been moved to zope.location.interfaces, please import form there.
  from zope.container.interfaces import IContained
/home/senaite/senaite/eggs/plone.app.contentrules-4.1.6-py2.7.egg/plone/app/contentrules/handlers.py:16: DeprecationWarning: IObjectRemovedEvent is deprecated. Some zope.container interfaces have been moved to zope.lifecycleevent.interfaces, please import form there.
  from zope.container.interfaces import IObjectRemovedEvent
/home/senaite/senaite/eggs/plone.app.contenttypes-2.2.3-py2.7.egg/plone/app/contenttypes/migration/patches.py:13: DeprecationWarning: _marker is deprecated. Please import from Products.PluginIndexes.unindex.
  from Products.PluginIndexes.common.UnIndex import _marker
2025-05-22 23:40:42,077 INFO    [senaite.jsonapi:48][MainThread] INITIALIZED SENAITE JSONAPI V1 ROUTE ---> senaite.jsonapi.v1.routes.catalogs
2025-05-22 23:40:42,085 INFO    [senaite.jsonapi:48][MainThread] INITIALIZED SENAITE JSONAPI V1 ROUTE ---> senaite.jsonapi.v1.routes.content
2025-05-22 23:40:42,085 INFO    [senaite.jsonapi:48][MainThread] INITIALIZED SENAITE JSONAPI V1 ROUTE ---> senaite.jsonapi.v1.routes.push
2025-05-22 23:40:42,087 INFO    [senaite.jsonapi:48][MainThread] INITIALIZED SENAITE JSONAPI V1 ROUTE ---> senaite.jsonapi.v1.routes.registry
2025-05-22 23:40:42,088 INFO    [senaite.jsonapi:48][MainThread] INITIALIZED SENAITE JSONAPI V1 ROUTE ---> senaite.jsonapi.v1.routes.settings
2025-05-22 23:40:42,091 INFO    [senaite.jsonapi:48][MainThread] INITIALIZED SENAITE JSONAPI V1 ROUTE ---> senaite.jsonapi.v1.routes.users
2025-05-22 23:40:42,094 INFO    [senaite.jsonapi:48][MainThread] INITIALIZED SENAITE JSONAPI V1 ROUTE ---> senaite.jsonapi.v1.routes.version
/home/senaite/senaite/eggs/senaite.impress-2.6.0-py2.7.egg/senaite/impress/browser/viewlets/setupbutton.py:22: DeprecationWarning: ManageBika: Moved to senaite.core.permissions
  from bika.lims.permissions import ManageBika
/home/senaite/senaite/eggs/zope.configuration-4.4.1-py2.7.egg/zope/configuration/config.py:239: DeprecationWarning: IAutoGenerateID: Moved to senaite.core.interfaces
  obj = getattr(mod, oname)
/home/senaite/senaite/eggs/zope.configuration-4.4.1-py2.7.egg/zope/configuration/config.py:239: DeprecationWarning: IMultiCatalogBehavior: Moved to senaite.core.interfaces
  obj = getattr(mod, oname)
/home/senaite/senaite/eggs/senaite.core-2.6.0-py2.7.egg/senaite/core/browser/stickers/view.py:39: DeprecationWarning: ComponentLookupError is deprecated. Import from zope.interface.interfaces
  from zope.component.interfaces import ComponentLookupError
2025-05-22 23:40:43,604 INFO    [senaite.impress:35][MainThread] TemplateFinder::init:type=senaite.impress.reports
2025-05-22 23:40:43,997 INFO    [SENAITE:32][MainThread] *** Initializing SENAITE LIMS Customization Package ***
2025-05-22 23:40:43,997 INFO    [senaite.impress:32][MainThread] *** Initializing SENAITE.IMPRESS ***
2025-05-22 23:40:43,997 INFO    [senaite.app.supermodel:37][MainThread] *** Initializing SENAITE.APP.SUPERMODEL ***
2025-05-22 23:40:43,997 INFO    [senaite.app.spotlight:28][MainThread] *** Initializing SENAITE.APP.SPOTLIGHT ***
2025-05-22 23:40:43,997 INFO    [senaite.app.listing:36][MainThread] *** Initializing SENAITE.APP.LISTING ***
2025-05-22 23:40:43,997 INFO    [senaite.core:55][MainThread] *** Initializing BIKA.LIMS ***
2025-05-22 23:40:44,394 INFO    [senaite.core:32][MainThread] *** Initializing SENAITE.CORE ***
2025-05-22 23:40:44,394 INFO    [plone.jsonapi.routes:16][MainThread] ### PLONE.JSONAPI.CORE INITIALIZE ###
2025-05-22 23:40:44,396 INFO    [Zope:45][MainThread] Ready to handle requests
Starting server in PID 55456.
Serving on http://0.0.0.0:8080

Then I ran all the upgrades in the http://localhost:8080/senaite/portal_setup/manage_upgrades, as shown

and the upgrades on the Add-ons, as shown:

Nevertheless, when I access Samples section, I get this error:

Traceback (innermost last):
  Module ZPublisher.WSGIPublisher, line 176, in transaction_pubevents
  Module ZPublisher.WSGIPublisher, line 385, in publish_module
  Module ZPublisher.WSGIPublisher, line 288, in publish
  Module ZPublisher.mapply, line 85, in mapply
  Module ZPublisher.WSGIPublisher, line 63, in call_object
  Module senaite.app.listing.view, line 246, in __call__
  Module senaite.app.listing.ajax, line 113, in handle_subpath
  Module senaite.core.decorators, line 40, in decorator
  Module senaite.app.listing.decorators, line 63, in wrapper
  Module senaite.app.listing.decorators, line 50, in wrapper
  Module senaite.app.listing.decorators, line 100, in wrapper
  Module senaite.app.listing.ajax, line 383, in ajax_folderitems
  Module senaite.app.listing.decorators, line 88, in wrapper
  Module senaite.app.listing.ajax, line 259, in get_folderitems
  Module senaite.app.listing.view, line 982, in folderitems
  Module senaite.core.browser.samples.view, line 499, in folderitem
  Module plone.memoize.view, line 59, in memogetter
  Module bika.lims.browser, line 94, in user_fullname
  Module bika.lims.api, line 1572, in get_user_fullname
  Module bika.lims.api, line 1514, in get_user_contact
  Module bika.lims.api, line 1009, in search
  Module bika.lims.api, line 484, in get_tool
  Module bika.lims.api, line 492, in fail
APIError: No tool named 'senaite_catalog_contact' found.

Am I missing on how to run also the upgrade steps of the dependent packages, e.g. senaite.impress, senaite.app.listing, senaite.app.spotlight etc.?
Sorry If I seem to rookie, what can I do?
Thanks very much for your help
Best regards,
Diego

Hi @diegoadrian,

It seems like you didn’t follow all the upgrade steps correctly.

The error below arises because of this missing step:

Therefore, I would suggest you run all the upgrade steps once again, starting from 2500.

To do so, you have to select the senaite.core:default profile and click the Show old upgrades button:

Afterwards, start from the 2500 upgrade step and let them run one after the other:

Regarding the first screenshot:

There are no errors displayed, but just deprecation warnings.
As soon as you get this line:

Starting server in PID 55456.
Serving on http://0.0.0.0:8080

your SENAITE instance is up and running correctly.

:point_up: Please note that it is not recommended to run SENAITE on 0.0.0.0 if it is publicly accessible.

Good luck,
Ramon

1 Like

Hello again @ramonski
thank you very much for your time and for your words of advice. It has been of great help, I’m almost there! I can see almost all my data now.

As instructed, starting from 2500, there are certain errors I get when upgrading one by one each step:

When I get to SENAITE CORE 2.5.0: Setup Labels, I get this error:

Traceback (innermost last):
Module ZPublisher.WSGIPublisher, line 176, in transaction_pubevents
Module ZPublisher.WSGIPublisher, line 385, in publish_module
Module ZPublisher.WSGIPublisher, line 288, in publish
Module ZPublisher.mapply, line 85, in mapply
Module ZPublisher.WSGIPublisher, line 63, in call_object
Module Products.GenericSetup.tool, line 1135, in manage_doUpgrades
Module Products.GenericSetup.upgrade, line 185, in doStep
Module senaite.core.upgrade, line 39, in wrap_func_args
Module senaite.core.upgrade.v02_05_000, line 139, in setup_labels
Module senaite.core.setuphandlers, line 280, in add_dexterity_items
AttributeError: ‘NoneType’ object has no attribute ‘get’

So I skipped it, and continue with following upgrades. And when getting to SENAITE.CORE 2.6.0: Fix setup folders not indexed in UID catalog I get this next error:

Traceback (innermost last):
Module ZPublisher.WSGIPublisher, line 176, in transaction_pubevents
Module ZPublisher.WSGIPublisher, line 385, in publish_module
Module ZPublisher.WSGIPublisher, line 288, in publish
Module ZPublisher.mapply, line 85, in mapply
Module ZPublisher.WSGIPublisher, line 63, in call_object
Module Products.GenericSetup.tool, line 1135, in manage_doUpgrades
Module Products.GenericSetup.upgrade, line 185, in doStep
Module senaite.core.upgrade.v02_06_000, line 2327, in set_referenceable_behavior
AttributeError: ‘NoneType’ object has no attribute ‘objectValues’

And this error repeats itself for every single upgrade that contains a shift to Dexterity in 2.6.0

Rookie me, but I decided to try many different upgrades, even upgrading all the way back from 2.3.0 untill 2.6.0 or even 2.5.0, and actually almost everything works, except that I cannot see analyses in the sample’s profile, as shown:

Which in foreground mode shows the following:

Traceback (most recent call last):
File “/home/senaite/senaite/eggs/plone.app.viewletmanager-3.1.3-py2.7.egg/plone/app/viewletmanager/manager.py”, line 110, in render
html.append(viewlet.render())
File “/home/senaite/senaite/eggs/plone.app.layout-3.5.2-py2.7.egg/plone/app/layout/viewlets/common.py”, line 78, in render
return self.index()
File “/home/senaite/senaite/eggs/Zope-4.8.10-py2.7.egg/Products/Five/browser/pagetemplatefile.py”, line 126, in call
return self.func(self, *args, **kw)
File “/home/senaite/senaite/eggs/Zope-4.8.10-py2.7.egg/Products/Five/browser/pagetemplatefile.py”, line 61, in call
sourceAnnotations=getattr(debug_flags, ‘sourceAnnotations’, 0),
File “/home/senaite/senaite/eggs/zope.pagetemplate-4.6.0-py2.7.egg/zope/pagetemplate/pagetemplate.py”, line 135, in pt_render
strictinsert=0, sourceAnnotations=sourceAnnotations
File “/home/senaite/senaite/eggs/Zope-4.8.10-py2.7.egg/Products/PageTemplates/engine.py”, line 378, in call
return template.render(**kwargs)
File “/home/senaite/senaite/eggs/z3c.pt-3.3.1-py2.7.egg/z3c/pt/pagetemplate.py”, line 176, in render
return base_renderer(context)
File “/home/senaite/senaite/eggs/Chameleon-3.9.1-py2.7.egg/chameleon/zpt/template.py”, line 302, in render
return super(PageTemplate, self).render(
_kw)
File “/home/senaite/senaite/eggs/Chameleon-3.9.1-py2.7.egg/chameleon/template.py”, line 215, in render
raise_with_traceback(exc, tb)
File “/home/senaite/senaite/eggs/Chameleon-3.9.1-py2.7.egg/chameleon/template.py”, line 192, in render
self._render(stream, econtext, rcontext)
File “/home/senaite/senaite/var/cache/c4a76f1b91de449f27b4e598cf25b305.py”, line 390, in render
__cache_133832068820496 = _static_133832169609040(‘python’, u’view.contents_table()', econtext=econtext)(_static_133832169780880(econtext, __zt_tmp))
File “/home/senaite/senaite/eggs/zope.tales-5.2-py2.7.egg/zope/tales/pythonexpr.py”, line 73, in call
return eval(self._code, vars)
File “”, line 1, in
File “/home/senaite/senaite/eggs/senaite.core-2.5.0-py2.7.egg/senaite/core/browser/viewlets/sampleanalyses.py”, line 61, in contents_table
view.update()
File “/home/senaite/senaite/eggs/senaite.core-2.5.0-py2.7.egg/bika/lims/browser/analyses/view.py”, line 251, in update
if self.analysis_categories_enabled():
File “/home/senaite/senaite/eggs/plone.memoize-3.0.0-py2.7.egg/plone/memoize/view.py”, line 59, in memogetter
cache[key] = func(*args, **kwargs)
File “/home/senaite/senaite/eggs/senaite.core-2.5.0-py2.7.egg/bika/lims/browser/analyses/view.py”, line 328, in analysis_categories_enabled
return setup.getCategorizeSampleAnalyses()
AttributeError: ‘NoneType’ object has no attribute ‘getCategorizeSampleAnalyses’

I am really grateful for all the help you have provided me. I hope this message finds you well.
Kind regards,
Diego